web-dev-qa-db-ja.com

C#を使用してPDFをレンダリングする方法

C#を使用して、PDFファイルをグラフィカルにロードおよび描画したい。それらを編集する必要はなく、特定のズームレベルでレンダリングするだけです。

私が見つけたpdfライブラリは、生成に焦点を当てているようです。どうすればいいですか?

ありがとう。

47
Garth

Adobe ActiveXが探しているものではない場合、他のいくつかの選択肢があります(Acrobatはユーザーマシンに存在している必要があり、自分で出荷できないため)。

PDFプレビューを作成するには、まずStackOverflowのテーマに関する他のいくつかの議論を見てください。

最後の2つでは、あなたが試すことができるいくつかのことについて話します。

  • 商用レンダラーを取得できます( PDFViewForNetPDFRasterizer.NET[〜#〜] abcpdf [〜#〜]ActivePDFXpdfRasterizer およびその他の回答のその他...)。
    ほとんどはかなり高価ですが、特に簡単なプレビュー/サムネイルを作成するだけの場合はなおさらです。

  • Omar Shahineのコードスニペットに加えて、Adobe ActiveXの使用方法を示す CodeProjectの記事 がありますが、古くなっている可能性があり、新しいリリースで簡単に壊れており、その合法性は曖昧です(基本的には内部使用は問題ありませんが、出荷することはできず、サーバー上でPDFの画像を生成することもできません。

  • SumatraPDF 、OpenSource PDF windows用ビューア)のソースコードを見ることができます。

  • Poppler 、レンダリングエンジンとして Xpdf を使用するレンダリングエンジンもあります。これらはすべて素晴らしいものですが、それらを機能させて.Netと連携させるにはかなりのコミットメントが必要であり、GPLの下で配布される傾向があります。

  • ページのレンダリングは非常に簡単なプロセスなので、インタープリターとして GhostScript を使用することを検討してください。
    欠点は、アプリとともにインストールするために再パッケージ化するか、前提条件(または少なくともインストールプロセスの一部)にする必要があることです。
    これは大きな課題ではなく、他のレンダリングエンジンをマッサージして.Netと連携させるよりも確かに簡単です。
    添付ファイルとして Developer Expressフォーラム にある小さなプロジェクトを行いました。
    GhostScriptのライセンス要件に注意してください。
    それを残せない場合は、おそらく商用ソフトウェアが唯一の選択肢です。

43
Renaud Bompuis

Googleは、Foxit Softwareで作成した優れたPDFレンダリングエンジン- PDFium -をオープンソース化しました。

PdfiumViewer と呼ばれるC#nugetパッケージがあり、PDFiumのC#ラッパーを提供し、PDFの表示と印刷を可能にします。

私はそれを使用し、レンダリングの品質に非常に感銘を受けました。


PDFiumはストリームを直接処理するため、データをディスクに書き込む必要はありません。

これはWinFormsアプリからの私の例です

    public void LoadPdf(byte[] pdfBytes)
    {
        var stream = new MemoryStream(pdfBytes);
        LoadPdf(stream)
    }

    public void LoadPdf(Stream stream)
    {
        // Create PDF Document
        var pdfDocument = PdfDocument.Load(stream);

        // Load PDF Document into WinForms Control
        pdfRenderer.Load(pdfDocument);
    }

編集:WinFormでpdfRendererコントロールを取得するには:PdfiumViewer NuGetパッケージをプロジェクトに追加します。 Windowsエクスプローラーでプロジェクトパッケージフォルダーを開き、PdfiumViewer.dllファイルをToolboxウィンドウに; PdfRendererというコントロールを追加して利用できます:

Adding PdfRenderer control to WinForms

53
Paddy

ここに別の質問からの私の答えがあります。

まず、Adobe Reader ActiveXコントロールを参照する必要があります

Adobe Acrobat Browser Control Type Library 1.

%programfiles&\ Common Files\Adob​​e\Acrobat\ActiveX\AcroPDF.dll

次に、ツールボックスからWindowsフォームにドラッグします。

そして、このようなコードを使用してActiveXコントロールを初期化します。

private void InitializeAdobe(string filePath)
{
    try
    {
        this.axAcroPDF1.LoadFile(filePath);
        this.axAcroPDF1.src = filePath;
        this.axAcroPDF1.setShowToolbar(false);
        this.axAcroPDF1.setView("FitH");
        this.axAcroPDF1.setLayoutMode("SinglePage");
        this.axAcroPDF1.Show();
    }
    catch (Exception ex)
    {
        throw;
    }
}

ActiveXコントロールを破棄することをフォームが閉じるときに確認してください

this.axAcroPDF1.Dispose();
this.axAcroPDF1 = null;

そうしないと、Acrobatが横たわったままになる可能性があります。

12
Omar Shahine

PdfiumViewerは優れていますが、System.Drawingand WinForms。このため、私はPDFiumの周りに独自のラッパーを作成しました: PDFiumSharp

ページは PDFiumBitmap にレンダリングでき、これはディスクに保存したり、公開したりできます ストリームとして 。このように、ストリームからBMP形式で画像をロードできるフレームワークは、このライブラリを使用してpdfページを表示できます。

たとえば、WPFアプリケーションでは、次のメソッドを使用してPDFページをレンダリングできます。

using System.Linq;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using PDFiumSharp;

static class PdfRenderer
{
    public static ImageSource RenderPage(string filename, int pageIndex, string password = null, bool withTransparency = true)
    {
        using (var doc = new PdfDocument(filename, password))
        {
            var page = doc.Pages[pageIndex];
            using (var bitmap = new PDFiumBitmap((int)page.Width, (int)page.Height, withTransparency))
            {
                page.Render(bitmap);
                return new BmpBitmapDecoder(bitmap.AsBmpStream(), BitmapCreateOptions.None, BitmapCacheOption.OnLoad).Frames.First();
            }
        }
    }
}
5
ArgusMagnus

ABCpdfがこれと他の多くのことを行います。

PDFをさまざまな形式(JPEG、GIF、PNG、TIFF、JPEG 2000、ベクターEPS、SVG、Flash、PostScriptなど)にレンダリングすることはできませんが、さまざまな色空間(たとえば、グレー、RGB、CMYK)およびビット深度(たとえば、コンポーネントごとに1、8、16ビット)。

そして、それはそれがすることのほんの一部です!

詳細については、以下を参照してください。

http://www.websupergoo.com/abcpdf-8.htm

ああ、無料のライセンススキームで無料のライセンスを取得できます。

Acrobatを使用してPDFレンダリングを行う場合、EULAの問題があります。このルートを使用する場合は、まず合法性を慎重に確認してください。

2
user81888

Webブラウザーコントロールを使用します。これにはAdobe Readerがインストールされている必要がありますが、とにかくそれを持っている可能性が高いです。コントロールのUrLをファイルの場所に設定します。

1
Sesh