C#を使用して、PDFファイルをグラフィカルにロードおよび描画したい。それらを編集する必要はなく、特定のズームレベルでレンダリングするだけです。
私が見つけたpdfライブラリは、生成に焦点を当てているようです。どうすればいいですか?
ありがとう。
Adobe ActiveXが探しているものではない場合、他のいくつかの選択肢があります(Acrobatはユーザーマシンに存在している必要があり、自分で出荷できないため)。
PDFプレビューを作成するには、まずStackOverflowのテーマに関する他のいくつかの議論を見てください。
最後の2つでは、あなたが試すことができるいくつかのことについて話します。
商用レンダラーを取得できます( PDFViewForNet 、 PDFRasterizer.NET 、 [〜#〜] abcpdf [〜#〜] 、 ActivePDF 、 XpdfRasterizer およびその他の回答のその他...)。
ほとんどはかなり高価ですが、特に簡単なプレビュー/サムネイルを作成するだけの場合はなおさらです。
Omar Shahineのコードスニペットに加えて、Adobe ActiveXの使用方法を示す CodeProjectの記事 がありますが、古くなっている可能性があり、新しいリリースで簡単に壊れており、その合法性は曖昧です(基本的には内部使用は問題ありませんが、出荷することはできず、サーバー上でPDFの画像を生成することもできません。
SumatraPDF 、OpenSource PDF windows用ビューア)のソースコードを見ることができます。
Poppler 、レンダリングエンジンとして Xpdf を使用するレンダリングエンジンもあります。これらはすべて素晴らしいものですが、それらを機能させて.Netと連携させるにはかなりのコミットメントが必要であり、GPLの下で配布される傾向があります。
ページのレンダリングは非常に簡単なプロセスなので、インタープリターとして GhostScript を使用することを検討してください。
欠点は、アプリとともにインストールするために再パッケージ化するか、前提条件(または少なくともインストールプロセスの一部)にする必要があることです。
これは大きな課題ではなく、他のレンダリングエンジンをマッサージして.Netと連携させるよりも確かに簡単です。
添付ファイルとして Developer Expressフォーラム にある小さなプロジェクトを行いました。
GhostScriptのライセンス要件に注意してください。
それを残せない場合は、おそらく商用ソフトウェアが唯一の選択肢です。
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
というコントロールを追加して利用できます:
ここに別の質問からの私の答えがあります。
まず、Adobe Reader ActiveXコントロールを参照する必要があります
Adobe Acrobat Browser Control Type Library 1.
%programfiles&\ Common Files\Adobe\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が横たわったままになる可能性があります。
PdfiumViewerは優れていますが、System.Drawing
and 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();
}
}
}
}
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の問題があります。このルートを使用する場合は、まず合法性を慎重に確認してください。
Webブラウザーコントロールを使用します。これにはAdobe Readerがインストールされている必要がありますが、とにかくそれを持っている可能性が高いです。コントロールのUrLをファイルの場所に設定します。