2012-01-09 17 views
10

Bir web sayfasındaki küçük resmin görüntüsü olarak bir sayfa pdf belgesini kaydetmem gerekiyor.PDF'yi JPG (s) 'ye İhracat C#

PDFSharp ile uğraştım ve şansım olmadı.

Bunu denedim: http://www.pdfsharp.net/wiki/ExportImages-sample.ashx?AspxAutoDetectCookieSupport=1 ama tek yapacağı, PDF dosyasındaki gömülü görüntüleri istenen sonuçtan çıkarmaktır.

Bunu nasıl yapacağınıza dair fikirler? Bunu halledebilecek iyi bir kütüphane olan var mı?

Düzenleme: Lütfen bana neden bu kadar kötü bir soru olduğunu bildirin. Eğer bunun iyi bir çözümü varsa, diğer insanlar için harika bir kaynak olacaktır. Özellikle Google aramaları boş olduğundan

+1

PDFSharp'ta ne denediniz? Burada bir örnek var: http://www.pdfsharp.net/wiki/ExportImages-sample.ashx?AspxAutoDetectCookieSupport=1 – keyboardP

+0

Bize neyi denediğinizi gösterin. Size yardımcı olacağız. – Amy

+0

Downvotes için teşekkürler! PDF'yi kopyalamak ve görüntüye vermek yerine PDF'deki görüntüleri ayıklayan bağladığınız örnek dışında hiçbir şey denemedim. Bu yüzden soruyorum nedeni: iTextSharp veya PDFSharp içinde bunu yapmak için bir yol göremiyorum. Çok çalıştım ve boş verdim. – Jason

cevap

5

Ghostscript'e bir göz atın. Görüntülere PDF uygulayabilirsiniz.

(uyarı: Ben Atalasoft için çalışmak ve PDF teknolojisi bir çok yazdım)

http://www.mattephraim.com/blog/2009/01/06/a-simple-c-wrapper-for-ghostscript/

+0

Teşekkürler, deneyeceğim! – Jason

+0

Bir şampiyon gibi çalışır. Kaynağı almanızı öneriyorum. Takip etmek daha kolaydır ve aynı zamanda blogdaki örneğin de biraz farklıdır. Tek şey istenen genişliği/yüksekliği bilmek zorunda. Bu bilgiyi nereden alacağımı bulmak için çalışacağım sanırım. – Jason

+0

Bu çözüm hakkında çıldırmıyorum, çalıştığı gerçeğinden başka. Daha iyi bir çözüm varsa, bize bildirin ve ben size onay işareti vereceğim. – Jason

1

Eğer Atalasoft DotImage içinde PdfDecoder kullanırsanız , bu basittir:

public void PdfToJpegThumb(Stream srcStream, int pageNo, int maxDimension, Stream dstStream) 
{ 
    PdfDecoder decoder = new PdfDecoder(); 
    decoder.Resolution = 96; // reduce default resolution to speed up rendering 
    // render page 
    using (AtalaImage pdfimage = decoder.read(srcStream, pageNo, null)) { 
     Thumbnail tn = new Thumbnail(maxDimension, maxDimension); 
     // make a thumbnail image 
     using (AtalaImage tnImage = tn.Create(pdfImage)) { 
      // save it 
      tnImage.Save(dstStream, new JpegEncoder(), null); 
     } 
    } 
} 
+9

Bu 2000 + dolar mal olsaydı oldukça düzgün olurdu. = P – Jason

0

Bunu web'de bir yerden aldım - tam olarak nerede olduğunu hatırlayamıyorum ama benim için çalışıyor!
Sadece güzel bir işleve dönüştürdüm.

Bu GhostScript API'ler (gsdll32.dll) imageFormat parametresinin

Örnekler kullanan vb "JPEG", "tiff32nc" vardır

#region GhostScript API functions 
    [DllImport("gsdll32.dll", EntryPoint = "gsapi_new_instance")] 
    private static extern int CreateAPIInstance(out IntPtr pinstance, 
              IntPtr caller_handle); 

    [DllImport("gsdll32.dll", EntryPoint = "gsapi_init_with_args")] 
    private static extern int InitAPI(IntPtr instance, int argc, IntPtr argv); 

    [DllImport("gsdll32.dll", EntryPoint = "gsapi_exit")] 
    private static extern int ExitAPI(IntPtr instance); 

    [DllImport("gsdll32.dll", EntryPoint = "gsapi_delete_instance")] 
    private static extern void DeleteAPIInstance(IntPtr instance); 
    #endregion 

    public bool CreateImage(string inputPath, string outputPath, string imageFormat, int firstPage, int lastPage, int width, int height) 
    { 
     bool result = false; 
     try 
     { 
      string[] args = GetArgs(inputPath, outputPath, imageFormat, firstPage, lastPage, width, height); 
      var argStrHandles = new GCHandle[args.Length]; 
      var argPtrs = new IntPtr[args.Length]; 

      // Create a handle for each of the arguments after 
      // they've been converted to an ANSI null terminated 
      // string. Then store the pointers for each of the handles 
      for (int i = 0; i < args.Length; i++) 
      { 
       argStrHandles[i] = GCHandle.Alloc(StringToAnsi(args[i]), GCHandleType.Pinned); 
       argPtrs[i] = argStrHandles[i].AddrOfPinnedObject(); 
      } 

      // Get a new handle for the array of argument pointers 
      var argPtrsHandle = GCHandle.Alloc(argPtrs, GCHandleType.Pinned); 

      // Get a pointer to an instance of the GhostScript API 
      // and run the API with the current arguments 
      IntPtr gsInstancePtr; 
      CreateAPIInstance(out gsInstancePtr, IntPtr.Zero); 
      InitAPI(gsInstancePtr, args.Length, argPtrsHandle.AddrOfPinnedObject()); 

      // Cleanup arguments in memory 
      for (int i = 0; i < argStrHandles.Length; i++) 
       argStrHandles[i].Free(); 

      argPtrsHandle.Free(); 

      // Clear API 
      ExitAPI(gsInstancePtr); 
      DeleteAPIInstance(gsInstancePtr); 

      result = true; 
     } 
     catch(Exception e) 
     { 
      throw e; 
     } 
     return result; 
    } 
+0

http://www.mattephraim.com/blog/2009/01/06/a-simple-c-wrapper-for-ghostscript/ adresinden alınmıştır. Ayrıca, 'GetArgs' vb – Jason

+0

gibi tüm yardımcı yöntemleri kaçırıyorsunuz Düzeltme için teşekkürler – CompanyDroneFromSector7G

5

Ghostscript anda oluşturma için de-facto standart PDF'leri. GhostScriptSharp kullanarak bile, biraz sarmak zor.

Jason Morse açık kaynak imageresizing.net library bir eklenti olarak bir great C# wrapper for rendering PDFs yazdı.

bir asp.net uygulama söz konusuysa, kütüphane-the-fly oluşturmayı sağlar, böylece sadece jpeg/png sürümü almak için bir sorgu dizesi ekleyebilirsiniz:

/pdfs/letter.pdf?format=jpg&page=2

de kullanabilirsiniz (herhangi bir uygulama türü - spesifik asp.net değil) yerine yönetilen API

ImageBuilder.Current.Build ("letter.pdf", "dest.jpg", yeni ResizeSettings ("format = jpg; page = 2"));

PdfRenderer eklentisi, tıpkı Ghostscript gibi GPL lisanslıdır.

+0

Bugün kontrol edeceğim. – Jason