2012-01-09 34 views
10

1ページのpdfドキュメントをWebサイト上のサムネイルの画像として保存する必要があります。C#でJPGにPDFをエクスポート

私はPDFSharpを使いこなしていて、運がなかった。

私はこれを試した:http://www.pdfsharp.net/wiki/ExportImages-sample.ashx?AspxAutoDetectCookieSupport=1しかし、それは望む結果ではないPDFファイルの埋め込み画像を抽出することです。

これを行う方法のアイデアはありますか?誰もがこれを処理できる良いライブラリを知っていますか?

編集:なぜこのような悪い質問であるか教えてください。もし誰かがこれに対する良い解決策を持っていれば、他の多くの人にとって素晴らしいリソースになるでしょう。特にGoogleの検索は空になるので

+1

PDFSharpで何を試しましたか?ここに例があります:http://www.pdfsharp.net/wiki/ExportImages-sample.ashx?AspxAutoDetectCookieSupport=1 – keyboardP

+0

あなたが試したことを私たちに教えてください。私たちはそれを手伝ってくれるでしょう。 – Amy

+0

downvotesありがとう! PDFをレンダリングしてイメージに出力するのではなく、PDF内のイメージを抽出する例を除いて、何も試していません。それは私が求めている理由です:私はiTextSharpやPDFSharpでそれを行う方法はありません。私はたくさんのグーグルをして空手を手に入れました。 – Jason

答えて

5

Ghostscriptをご覧ください。 PDFを画像にレンダリングすることができます。

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

+0

ありがとう、私はそれを試してみよう! – Jason

+0

チャンピオンのように動作します。私はソースを取得することをお勧めします。それは従うのが簡単で、それはブログ上の例とは少し異なります。唯一のことは、希望の幅/高さを知る必要があることです。私はその情報をどこから収集するかを考え出す作業をしています。 – Jason

+0

私はこのソリューションについて夢中ではない、それが動作するという事実以外。もし誰かがより良い解決策を持っていれば私たちに知らせてください、私はあなたにチェックマークを与えます。 – Jason

1

(免責事項:私はAtalasoftのために働くとPDFの技術の多くを書いた) あなたはAtalasoft dotImageでPdfDecoderを使用している場合、これは単純です:

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

2000ドル以上の費用がかかっていなければ、それはかなりきちんとしているはずです。 = P – Jason

0

私はどこかのウェブからこれを手に入れました。
私はちょうどいい機能にしました。

それはGhostscriptが現在レンダリングするためのデファクトスタンダードである

#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/から取りました。また、GetArgsなどのヘルパーメソッドがすべてありません – Jason

+0

訂正ありがとう – CompanyDroneFromSector7G

5

等、imageFormatパラメータの

例は、 "JPEG"、 "tiff32nc" でのGhostscriptのAPI(GSdll32.dll)を使用しPDF。 GhostScriptSharpを使用していても、折り返すのはちょっと難しいことです。

ジェイソンモールは、great C# wrapper for rendering PDFsをオープンソースのプラグインとして書きました。

それはasp.netアプリケーションの場合は、ライブラリはオンザフライでレンダリングできますので、あなただけのJPEG/PNG形式のバージョンを取得するクエリ文字列を追加することができます:あなたが使用することもでき

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

を代わりに管理されたAPI(asp.net固有のアプリケーションタイプではない)

ImageBuilder.Current.Build( "letter.pdf"、 "dest.jpg"、新しいResizeSettings( "format = jpg; page = 2" ));

PdfRendererプラグインは、Ghostscriptと同様に、GPLライセンスです。

+0

今日はチェックアウトします。 – Jason

関連する問題