DioDocs for PDF
HTML の PDF への描画

DioDocs for PDF ライブラリとともに GcHtml ライブラリを使用することで、HTML コンテンツを簡単に PDF ドキュメントに描画できます。GcHtml のようなユーティリティライブラリを使用すれば、請求書や報告書などの HTML ファイルを PDF に変換し、レイアウト、スタイル、フォーマットの乱れを気にすることなく印刷できます。また、PDF ドキュメントに HTML コンテンツを追加することもできます。

GcHtml は、ヘッドレスモードで動作する Chrome ウェブブラウザエンジンをベースにしており、Windows、Linux、macOS など任意のプラットフォームで HTML を PDF に描画できます。.NET アプリケーションが x64、x86、AnyCPU のいずれのプラットフォームをターゲットに構築されているかは関係ありません。ブラウザは常に別プロセスで動作しています。

GrapeCity.DioDocs.Html.ja パッケージには、以下の名前空間が含まれています。

GcHtml パッケージのインストール

プロジェクトに GcHtml パッケージをインストールするには、以下の手順を参照してください。

  1. Visual Studio を開き、新規の .NET Core コンソールアプリケーションを作成します。

  2. [ソリューションエクスプローラー]にて[依存関係]を右クリックし、[NuGetパッケージの管理]を選択します。

  3. 表示される [NuGetパッケージマネージャー]の[パッケージソース]にて、[nuget.org]を選択します。その後、「参照」タブにて「GrapeCity.DioDocs.Pdf.ja」を検索し、[インストール]をクリックします。

  4. 同様に、「GrapeCity.DioDocs.Html.ja」をインストールします。

    メモ:インストール中に、2つの確認ダイアログが表示されます。[変更のプレビュー]ダイアログボックスでは[OK]をクリックし、[ライセンスへの同意]ダイアログボックスでは[同意する]をクリックしてインストールを続行します。
  5. GcHtml パッケージが正常にインストールされたら、Program.cs ファイルに以下の名前空間を追加します。

    C#
    コードのコピー
    using GrapeCity.Documents.Html;
    using GrapeCity.Documents.Pdf;
    using GrapeCity.Documents.Drawing;
    
  6. GcHtml ライブラリの GcHtmlBrowser クラスに DioDocs for PDF ライセンスを適用すると、HTML を PDF に変換できるようになります。ライセンスを適用しないと、PDF への変換回数が5回に制限されます。ライセンスは、次のいずれかの方法で適用できます。

    • 作成するインスタンスにライセンスを適用するには、次のように実装します。
      var html = "<html><body><h1>My First Heading</h1><p>My first paragraph.</p></body></html>";
      var re = new GcHtmlBrowser(html);
      re.ApplyGcPdfLicenseKey("key");

    • すべてのインスタンスにライセンスを適用するには、次のように実装します。
      GcHtmlBrowser.SetGcPdfLicenseKey("key");
  7. サンプルコードを記述します。

HTML Webページの PDF への描画

GcHtml を使用して、HTML Web ページを PDF に描画することができます。GcHtml では、PdfOptions クラス、GcHtmlBrowser クラス、HtmlPage クラスの SaveAsPdf メソッドを使用して、HTML を PDF に描画できます。

HTML Web ページを PDF に描画するには、以下の手順を参照してください。

  1. HTML Web ページを描画するための PDF ファイルのパスを指定します。
  2. HTML ソース (URI) を指定します。
  3. PdfOptions クラスを使用して、PDF に描画する際のオプションを設定します。
  4. HTML の描画に使用する GcHtmlBrowser クラスのインスタンスを作成します。
  5. HtmlPage クラスの SaveAsPdf メソッドを使用して、HTML Web ページを PDF ファイルに描画します。
C#
コードのコピー
// Web ページがレンダリングされる一時ファイルを取得します
var tmp = Path.GetTempFileName();

// PDF に描画する Web ページの URI です
var uri = new Uri(@"https://www.google.co.jp");

// オプションを設定します
var pdfOptions = new PdfOptions()
{
    PageWidth = 8.5f,
    PageHeight = 11f,
    Margins = new PdfMargins(0.2f, 1, 0.2f, 1),
    Landscape = true,
    Scale = 1.1f
};

// HTML の描画に使用する GcHtmlBrowser のインスタンスを生成します
var browserPath = BrowserFetcher.GetSystemChromePath();
using var browser = new GcHtmlBrowser(browserPath);

// ソース Web ページを一時ファイルに描画します
using var htmlPage = browser.NewPage(uri);
htmlPage.SaveAsPdf(tmp, pdfOptions);

// 作成した PDF を一時ファイルからターゲットストリームにコピーします
using (var ts = File.OpenRead(tmp))
    ts.CopyTo(stream);

// 一時ファイルを削除します
File.Delete(tmp);

出力された PDF は以下のようになります。

メモ:HTML ページを PDF に描画する際、HTML ページで使用されているフォントがシステムに既にインストールされている必要があります。

HTML コンテンツの PDF への描画

HTML ページや文字列を PDF ドキュメントに追加するには、GcPdfGraphicsExt クラスの DrawHtml メソッドを使用します。

HTML 形式の文字列を PDF に描画するには、以下の手順を参照してください。

  1. GcPdfDocument クラスのインスタンスを作成します。
  2. HTML の描画に使用する GcHtmlBrowser クラスのインスタンスを作成します。
  3. HtmlToPdfFormat クラスを使用して、PDF に描画する際の設定を定義します。
  4. GcPdfGraphicsExt クラスの DrawHtml メソッドを使用して、HTML 文字列を PDF ドキュメントに追加します。
  5. GcPdfDocument クラスの Save メソッドを使用して PDF ファイルを保存します。
C#
コードのコピー
// 描画するコンテンツを表す HTMLのコード
var html = "<!DOCTYPE html>" +
    "<html>" +
    "<head>" +
    "<style>" +
    "span.bold {" +
        "font-weight: bold;" +
    "}" +
    "p.round {" +
        "font: 36px arial, sans-serif;" +
        "color: DarkSlateBlue;" +
        "border: 4px solid SlateBlue;" +
        "border-radius: 16px;" +
        "padding: 3px 5px 3px 5px;" +
        "text-shadow: 3px 2px LightSkyBlue;" +
    "}" +
    "</style>" +
    "</head>" +
    "<body>" +
    "<p class='round'>Hello, World, from <span class='bold'>GcHtml</span>!</p>" +
    "</body>" +
    "</html>";

// 新しい PDF ドキュメントを作成してから、ページを追加し、描画するグラフィックを取得します
var doc = new GcPdfDocument();
var page = doc.NewPage();
var g = page.Graphics;

try
{
    // HTML の描画に使用する GcHtmlBrowser のインスタンスを作成します
    var browserPath = BrowserFetcher.GetSystemChromePath();
    using var browser = new GcHtmlBrowser(browserPath);

    // HTMLを描画します
    var ok = g.DrawHtml(browser, html, 72, 72,
        new HtmlToPdfFormat(false) { MaxPageWidth = 6.5f, MaxPageHeight = 9f },
        out SizeF size);
}
catch (Exception ex)
{
    throw new Exception($"エラー:\n{ex.Message}");
}
// 完了
doc.Save(stream);

出力された PDF は以下のようになります。

HTML を PDF に描画する方法の詳細については、DioDocs for PDF サンプルブラウザを参照してください。


廃止された GcHtmlRenderer クラスからの移行手順

アプリケーションが、廃止された GcHtmlRenderer クラスを使用して HTML ページまたはコンテンツを PDF 形式に変換している場合、以下の手順にて、Chromium のカスタムビルドに依存せず GPL や LGPL ライセンスが不要な新しい GcHtmlBrowser クラスへ簡単に移行できます。

  1. [ソリューションエクスプローラー]にて、プロジェクト > [依存関係] > [パッケージ] に移動し、以下のパッケージの参照を削除します。
    • GrapeCity.DioDocs.Html.Windows.X64.ja
    • GrapeCity.DioDocs.Html.Linux.X64.ja
    • GrapeCity.DioDocs.Html.Mac.X64.ja

  2. GcHtmlRenderer にてライセンスを適用していた場合は、以下のように変更します。
    C#
    コードのコピー
    GcHtmlRenderer.SetGcPdfLicenseKey(key); ⇒ GcHtmlBrowser.SetGcPdfLicenseKey(key);
    
  3. GcHtmlBrowser クラスのインスタンスを作成して使用するには、現在のシステム上にある Chromium ベースのブラウザへのパスが必要です。例えば、Chrome ブラウザの場合:
    • 以下のコードにて、現在のシステムにインストールされている既存の Chrome のインスタンスへのパスを取得できます。
      C#
      コードのコピー
      var path = BrowserFetcher.GetSystemChromePath();
      
    • または、以下のコードのように、任意の場所に Chrome をダウンロードしてインストールし、そのパスを取得することもできます。
      C#
      コードのコピー
      var tp = Path.GetTempPath();
      var bf = new BrowserFetcher() { DestinationFolder = Path.Combine(tp, "Chrome") };
      var path = bf.GetDownloadedPath();
      
    メモ: Edge では一部の DevTools 機能の実装に違いがあるため、GcHtmlBrowser クラスで Chrome ブラウザを使用することをお勧めします。
  4. GcHtmlBrowser のインスタンスを作成します。Linux システムでは、RunWithNoSandbox オプションが必要な場合があることに注意してください。
    C#
    コードのコピー
    using var browser = new GcHtmlBrowser(path);
    
    // Linux システムで RunWithNoSandbox オプションが必要な場合
    using var browser = new GcHtmlBrowser(path, new LaunchOptions { RunWithNoSandbox = true });                           
    
  5. 呼び出されるすべての GcGraphics.DrawHtml() メソッドに、最初のパラメータとして GcHtmlBrowser のインスタンスを挿入します。
    C#
    コードのコピー
    g.DrawHtml(html, ...); ⇒ g.DrawHtml(browser, html, ...);          
    
  6. 以下のように URI を描画している GcHtmlRenderer クラスのインスタンスを探します。
    C#
    コードのコピー
    using var re = new GcHtmlRenderer(uri);
    ...
    re.RenderToPdf(file, new PdfSettings() {…});      
    
    以下のように置き換えます。
    C#
    コードのコピー
    //  URI から HtmlPage を作成します
    // (PdfSettings/JpegSettings/PngSettings の DefaultBackgroundColor および WindowSize オプションは PageOptions に移動し、
    // その他のオプションは PdfOptions/JpegOptions/PngOptions に移動しました)
    using var htmlPage = browser.NewPage(uri, new PageOptions() { WindowSize = pixelSize;… });
    ...
    htmlPage.SaveAsPdf(file, new PdfOptions() {...});