このページには自動翻訳されたテキストを含めることができます。
C# および VB.NET で PDF ドキュメントをレンダリングおよび印刷する
PDF ドキュメントを読むとき、誰もが Adobe Reader を思い浮かべます。 しかし、あなたがソフトウェア開発 者で、アプリケーションで PDF ドキュメントを表示したい場合はどうすればよいでしょうか? ユーザーに Adobe Reader をセットアップしてそこでドキュメントを開くように要求する必要はありません。
他の PDF 関連の要件も実装する必要がある場合があります。 たとえば、PDF ドキュメントを印刷します。 ま たは、アップロードされた PDF ドキュメントのサムネイルを生成します。 または、デスクトップまたは Web アプリケーションでの PDF 編集をサポートします。
必要なのは、PDF ドキュメントをレンダリングして印刷できる PDF ライブラリだけです。
PDF ドキュメントを表示、編集、印刷するための .NET ライブラリ
Docotic.Pdf ライブラリ を使用すると、C# および VB.NET で PDF ドキュメントを表 示、編集、印刷できます。 3 つのコア機能を使用して、複雑な PDF レンダリング フローを実装できます。
1 つ目は、PDF を画像に変換する 機能です。 この機能に基づいてほとんど すべてを実装できます。 PDF の印刷から、HoloLense での PDF の表示、または Instagram への PDF の投稿 まで。 画像はどこでもサポートされているため、これが可能です。
2 番目の重要な機能は、System.Drawing.Graphics
の描画面に PDF ページを描画できることです。 Windows
フォームまたは WPF アプリケーションで PDF をレンダリングおよび印刷できるようになります。 この機能を
使用するには、BitMiracle.Docotic.Pdf.Gdi 拡張 DLL をプロジェクトに追加し
ます。
最後に重要なことは、PDF ページ オブジェクトを抽出する機能です。 この機能を使用すると、C# または VB.NET アプリケーションで PDF ビューアまたは PDF エディタを構築できます。
9.5.17615-dev 14,813人が合格 NuGet の合計ダウンロード数 4,924,084C# .NET PDF ライブラリをダウンロード ページでライブラリと無料の期間限定ライセンス キーを入手してください。
Windows フォームまたは WPF アプリケーションで PDF を印刷する
.NET は、そのままでは PDF ドキュメントの印刷をサポートしていません。 PDF ドキュメントを画像や XPS
ファイルに変換するか、 System.Drawing.Graphics
サーフェスに描画する必要があります。 その後、.NET
クラスを使用して、Windows フォームまたは WPF アプリケーション内から出力を印刷できます。
Windows Forms アプリケーションでは、System.Drawing.Printing
名前空間のクラスを使用できます。印刷
UI を構築するための便利な PrintDialog
クラスと PrintPreviewDialog
クラスもあります。
macOS および Linux 環境では、System.Drawing
名前空間からのものを使用することは推奨されないことに
注意してください。 macOS および Linux の System.Drawing
実装は不完全であり、Windows の実装とは異
なります。 macOS および Linux 環境で System.Drawing
名前空間を使用すると、不正確な結果や一貫性の
ない結果が得られる可能性があります。
WPF は別の PrintDialog
クラスを提供しますが、印刷プレビュー用のクラスは提供しません。 幸いなこと
に、WPF では System.Windows.Forms.dll の PrintPreviewDialog
クラスを使用できます。 したがっ
て、WPF アプリケーションで System.Windows.Forms
および System.Drawing.Printing
名前空間の印刷ク
ラスを使用する方が簡単です。
WinForms および WPF 用の C# バージョンと VB.NET バージョンで提供される .NET で PDF を印刷す る デモ アプリケーションを見てください。 このアプリケーションは次の方法を示します:
- PDF ドキュメントの印刷プレビューを表示します
- PDF ドキュメントを選択したプリンターで印刷します
- 用紙サイズ、拡大縮小モード、その他の印刷設定を設定します
アプリケーションは Docotic.Pdf ライブラリ、BitMiracle.Docotic.Pdf.Gdi 拡張
DLL、および System.Windows.Forms
および System.Drawing.Printing
名前空
間の印刷クラスを使用します。 。 その PdfPrintDocument クラスと
PdfPrintHelper クラスを WPF または Windows フォーム プロジェクトで使用で
きます。
PdfPrintDocument
クラスは、主要な印刷ロジックを記述します。 このクラスは、Docotic.Pdf を
System.Drawing.Printing.PrintDocument
クラスに接続します。 重要なメソッドは
printDocument_PrintPage
イベント ハンドラーです:
private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
Graphics gr = e.Graphics;
// すべてのコンテキストで一貫した単位を得るためにポイント単位で作業します。
// 1. プリンター
// 2. 印刷プレビュー
// 3. PDF
gr.PageUnit = GraphicsUnit.Point;
if (m_printAction == PrintAction.PrintToPreview)
{
gr.Clear(Color.LightGray);
gr.FillRectangle(Brushes.White, m_printableAreaInPoints);
gr.IntersectClip(m_printableAreaInPoints);
gr.TranslateTransform(m_printableAreaInPoints.X, m_printableAreaInPoints.Y);
}
PdfPage page = m_pdf.Pages[m_pageIndex];
PdfSize pageSizeInPoints = getPageSizeInPoints(page);
if (m_printSize == PrintSize.FitPage)
{
float sx = (float)(m_printableAreaInPoints.Width / pageSizeInPoints.Width);
float sy = (float)(m_printableAreaInPoints.Height / pageSizeInPoints.Height);
float scaleFactor = Math.Min(sx, sy);
centerContentInPrintableArea(gr, pageSizeInPoints, scaleFactor);
gr.ScaleTransform(scaleFactor, scaleFactor);
}
else if (m_printSize == PrintSize.ActualSize)
{
centerContentInPrintableArea(gr, pageSizeInPoints, 1);
}
page.Draw(gr);
++m_pageIndex;
e.HasMorePages = (m_pageIndex <= m_lastPageIndex);
}
まず、印刷ページの Graphics
オブジェクトの変換を設定します。 「ページに合わせる」と「実際のサイ
ズ」の設定を尊重することが重要です。 また、[印刷プレビュー] ダイアログにはプリンターのハード マージ
ンも表示されます。 次に、PdfPage.Draw 拡張メソッ
ドを使用して、現在の PDF ページを Graphics
オブジェクトに描画します。
PdfPrintHelper
クラスを使用すると、印刷用の UI クラスで PdfPrintDocument
を使用できます。 たと
えば、次のように PDF ドキュメントの印刷ダイアログを表示できます:
using (var pdf = new PdfDocument("your_document.pdf"))
action(pdf, getPrintSize());
public static DialogResult ShowPrintDialog(PdfDocument pdf, PrintSize printSize)
{
using (var printDialog = new PrintDialog())
{
printDialog.AllowSomePages = true;
printDialog.AllowCurrentPage = true;
printDialog.AllowSelection = true;
printDialog.PrinterSettings.MinimumPage = 1;
printDialog.PrinterSettings.MaximumPage = pdf.PageCount;
printDialog.PrinterSettings.FromPage = printDialog.PrinterSettings.MinimumPage;
printDialog.PrinterSettings.ToPage = printDialog.PrinterSettings.MaximumPage;
var result = printDialog.ShowDialog();
if (result == DialogResult.OK)
{
using (var printDocument = new PdfPrintDocument(pdf, printSize))
printDocument.Print(printDialog.PrinterSettings);
}
return result;
}
}
それでおしまい。 Windows フォームまたは WPF アプリケーションで PDF 印刷を実装するには、次の手順を実行します。
- サンプル から
PdfPrintDocument
、PdfPrintHelper
、およびPrintSize
ファイル を追加します - Docotic.Pdf ライブラリへの参照を追加
- BitMiracle.Docotic.Pdf.Gdi 拡張 DLL への参照を追加します
- (WPF のみ) System.Windows.Forms および System.Drawing アセンブリへの参照を追加します
画像への変換を使用して PDF を印刷する
System.Drawing.Printing
名前空間のクラスは、Windows Forms および WPF アプリケーションで適切に機能
します。 ただし、System.Drawing.Printing
を使用できない、または使用すべきでない場合もあります。
たとえば、Windows サービスや ASP.NET アプリケーションでは System.Drawing.Printing
を使用しないで
ください。 Linux または macOS で印刷する場合、System.Drawing.Printing
は一貫性のない結果を生成す
る可能性があります。 また、Eto.Forms または Avalonia アプリケーションでは System.Drawing.Printing
を使用することはできません。
このような場合は、まず PDF ドキュメントを画像に変換 する必要がありま す。 この C# サンプルでは、PDF ページを PNG イメージとして保存する方法、または PDF ドキュメント全体 を複数ページの TIFF に変換する方法を示します:
using (var pdf = new PdfDocument(@"your_document.pdf"))
{
PdfDrawOptions options = PdfDrawOptions.Create();
options.HorizontalResolution = printerDpi;
options.VerticalResolution = printerDpi;
// 1 ページを保存する
pdf.Pages[0].Save("page0.png", options);
// ドキュメント全体を複数ページのモノクロ TIFF として保存します
options.Compression = ImageCompressionOptions.CreateTiff().SetBitonal();
pdf.SaveAsTiff("your_document.tiff", options);
}
次に、代替の印刷フレームワークまたはツールを使用して画像を印刷します。 Print PDF in
Eto.Forms デモ アプリケーションを見て、System.Drawing.Printing
を使用せず
に PDF ドキュメントを印刷する方法を示します。
C# および VB.NET で PDF をレンダリングする
アプリケーションでの PDF の表示は印刷と似ています。 ASP.NET、WPF、Eto.Forms、Avalonia、またはその他 のアプリケーション タイプでは、PDF を画像に変換してから、画像を表示し ます。
Windows Forms アプリでは、任意のコントロールから System.Drawing.Graphics
コンテキスト上に PDFペー
ジを描画できます。 または、PDF ページを System.Drawing.Bitmap
に変換し、そのビットマップを
PictureBox
に表示することもできます。
このサンプルは、PDF ページを C# の Bitmap
に変換する方法を示します:
using (var pdf = new PdfDocument("render.pdf"))
{
const float TargetResolution = 300;
PdfPage page = pdf.Pages[0];
double scaleFactor = TargetResolution / page.Resolution;
using (var bitmap = new Bitmap((int)(page.Width * scaleFactor), (int)(page.Height * scaleFactor)))
{
bitmap.SetResolution(TargetResolution, TargetResolution);
using (Graphics gr = Graphics.FromImage(bitmap))
page.Draw(gr);
bitmap.Save("result.png");
}
}
上記のコードでは、BitMiracle.Docotic.Pdf.Gdi 拡張 DLL をプロジェクトに追 加する必要があります。
.NETアプリケーションでPDFビューアまたはPDFエディタを作成する
Docotic.Pdf を使用すると、PDF ページ上のすべてのオブジェクトに関する詳細情報を取得できます。 PDF ページからテキスト チャンク、画像、ベクター パス、フォーム コントロール、および注釈を抽出できます。
その後、アプリケーションで、抽出されたすべてのオブジェクトをレンダリングできます。 レンダリングされ たオブジェクトを選択および編集する機能を実装することもできます。
PDF からテキスト、画像、パスを抽出する サンプルを見てください。 ページオ
ブジェクトを抽出して System.Drawing.Graphics
コンテキストに描画する方法を示します。
テキスト オブジェクトをベクター パスとして抽出することもできます。 そのためには PdfPage.GetObjects(PdfObjectExtractionOptions) オーバーロードを使用します。
結論
Docotic.Pdf ライブラリ を使用して、.NET プロジェクトで PDF ドキュメントを表示お よび印刷します。 関連する C# および VB.NET のサンプルを見てください:
PDF の印刷またはレンダリングに関する質問がある場合は、お問い合わせ してください。