このページには自動翻訳されたテキストを含めることができます。

C# および VB.NET で HTML を PDF に変換する

すでに HTML 形式でのコンテンツの作成に多くの時間と費用を費やしている場合は、その HTML から PDF を作 成したいと思うかもしれません。 このようなアプローチは、重複した作業を避けたいと考えているすべての人 にとって自然な方向です。

投資をうまく再利用するには、変換をプログラムで実行する必要があり、結果として得られる PDF は視覚的に ソース HTML にできるだけ近いものにする必要があります。

HTMLからPDFへの変換

.NET アプリケーションでの HTML から PDF への変換用 API

Docotic.Pdf ライブラリ用の無料の HTML to PDF アドオンは、このような変換のための API を提供します。 アドオンとライブラリはどちらも、.NET および .NET Core フレームワーク用に構築された Web アプリケー ションおよびデスクトップ アプリケーションから使用できます。

このアドオンは、変換中に Chromium を使用する HTML to PDF .NET ライブラリです。 各変換の前に、アドオ ンは、サポートされている最新の Chromium が既にダウンロードされているかどうかを自動的にチェックしま す。 すでにダウンロードされている対象バージョンは再利用されます。 対象となるバージョンが見つからな い場合、アドオンは変換前にバージョンをダウンロードします。 Google Chrome(R)と同様のWeb標準準拠が期 待されます。

このアドオンは、Windows、macOS、および Linux 環境で HTML から PDF を生成できます。 Linux でアドオン を構成する方法については、記事 Azure での HTML から PDF への変換につい て をご覧ください。

アドオンは NuGet で入手可能 であり、ライブラリの バイナリ付き zip にも含まれています。 評価モードの制限なしでライブラリを試すには、こ こ で無料の期間限定ライセンス キーを入手できます。

シンプルな HTML から PDF C# への変換

HTML to PDF API を使用すると、C# 変 換コードは次のようになります:

static async Task convertUrlToPdfAsync(string urlString, string pdfFileName)
{
    using (var converter = await HtmlConverter.CreateAsync())
    {
        using (var pdf = await converter.CreatePdfAsync(new Uri(urlString)))
            pdf.Save(pdfFileName);
    }
}

それはかなり単純です。 PDF ドキュメントを生成するために必要な呼び出しは 2 回だけです。 ご覧のとお り、API は非同期であり、同期メソッドをまったく提供しません。

同期コードから API を呼び出したい場合は、次のラッパーを使用できます:

Task.Run(async () =>
{
    await convertUrlToPdfAsync("https://bitmiracle.com/", "output.pdf");
}).GetAwaiter().GetResult();

一般に、非同期メソッドを同期的に呼び出すことは推奨されないため、他に選択肢がない場合にのみラッパー を使用してください。

同期および非同期の両方の コンソール アプリケーションから API を使用する方 法を示すサンプル コードを提供します。 また、Windows Forms および WPF アプリケーションのサンプル コードもあります。

HTML to PDF サンプル グループもあります。 各サンプルには C# バージョンと VB.NET バージョンが付属しています。

C# および VB.NET で HTML 文字列またはファイルを含む PDF を作成する

API を使用すると、HTML 文字列を PDF に簡単に変換できます。 文字列には、完全な HTML ドキュメントまた は断片のみを含めることができます。 コンバーターは HTML コードから PDF を作成します。

var html = "<body><br/><br/><br/><h1>Hello, World<h1></body>";
using (var pdf = await converter.CreatePdfFromStringAsync(html))
    pdf.Save("output.pdf");

変換する HTML コード内のすべての相対リンクのベース URL を指定できます。 以下は、C# でベース URL を 使用して HTML を PDF に変換する方法のコード スニペットです。

var incompleteHtml = "<img src=\"/images/team.svg\"></img>";
var options = new HtmlConversionOptions();
options.Load.BaseUri = new Uri("https://bitmiracle.com/");
using (var pdf = await converter.CreatePdfFromStringAsync(incompleteHtml, options))
    pdf.Save("output.pdf");

HTML ファイルの変換は、URL の変換とほぼ同じです。 URL の代わりにパスを受け入れる CreatePdfAsync オーバーロードを使用するだけです。 C# または VB.NET コードで HTML ファイルを PDF に変換する場合、 ベース URL およびその他のオプションもサポートされます。

var sampleHtmlPath = @"C:\path\to\sample.html";
using (var pdf = await converter.CreatePdfAsync(sampleHtmlPath))
    pdf.Save("output.pdf");

API を使用して SVG 画像を PDF に変換 することもできます。

カスタムのページ サイズ、余白、スケールを使用する

PDF 作成メソッドに変換オプションを提供することで、HTML から PDF C# への変換を設定できます。

以下は、C# で出力ページのサイズ、余白、スケールを構成する方法を示すコード スニペットです:

using (var converter = await HtmlConverter.CreateAsync())
{
    var options = new HtmlConversionOptions();

    // ページの向きを横向きにするかどうかを指定したり、
    // サイズをポイントまたはインチで指定したりすることもできます
    options.Page.SetSize(PdfPaperSize.ItalyEnvelope);

    options.Page.MarginLeft = 10;
    options.Page.MarginTop = 20;
    options.Page.MarginRight = 30;
    options.Page.MarginBottom = 40;

    options.Page.Scale = 1.5;

    using (var pdf = await converter.CreatePdfAsync(url, options))
        pdf.Save("output.pdf");
}

ページ オプションを使用して、ヘッダーとフッターのテンプレートを指定できます。 テンプレートは、いく つかの変数をサポートする通常の HTML コードを使用します。 これらの変数 は、datetitleurlpageNumbertotalPages です。

画像にはインライン スタイルとデータ URI を使用することをお勧めします。

ページの上下の余白を指定したい場合があります。 余白がないと、ヘッダーまたはフッターがページのコンテ ンツによって隠れてしまう可能性があります。

Convert HTML to PDF with header and footer in C# or VB.NET サン プル コードは、テンプレートで変数とデータ URI を使用する方法を示しています。

パスワードで保護された HTML から PDF C# への変換

HTML ページがユーザー名とパスワードのペアで保護されている場合でも、PDF を作成できます。 HtmlConversionOptions 内で認証オプションを設定するのと同じくらい簡単です。

var options = new HtmlConversionOptions();
options.Authentication.SetCredentials("foo", "bar");

using (var pdf = await converter.CreatePdfAsync(url, options))
    pdf.Save("output.pdf");

ページが適切に機能するためにいくつかの Cookie を設定する必要がある場合も簡単です。 これらの Cookie をオプションに追加するだけです。 その方法は次のとおりです:

var options = new HtmlConversionOptions();
options.Cookies.Add(new Cookie("sessionID", "my-session-ID"));

using (var pdf = await converter.CreatePdfAsync(url, options))
    pdf.Save("output.pdf");

変換開始を遅らせる

デフォルトでは、変換はロード直後に開始されます。 ただし、ページが安定するまでに時間がかかる場合があ ります。 たとえば、いくつかの計算を実行し、それらの計算の準備ができた後に内容を更新する場合です。

変換開始オプションを使用すると、指定したミリ秒数だけ変換を遅らせることができます。

// 変換を開始する前に 10 秒待ちます。
var options = new HtmlConversionOptions();
options.Start.SetStartAfterDelay(10 * 1000);

場合によっては、読み込まれたページ上の要素を切り替えるため、または動的なコンテンツの読み込みを行う ために、スクリプトを実行することが必要になります。 これも可能です:

var options = new HtmlConversionOptions();
var js = @"
    async function scrollDownUntilYouCantAnyMore() {
        await new Promise((resolve, reject) => {
            // 簡潔にするために省略
            }, 400);
        });
    }
    scrollDownUntilYouCantAnyMore();
";
options.Start.SetStartAfterScriptRun(js);
using (var pdf = await converter.CreatePdfAsync(url, options))
    pdf.Save("output.pdf");

C# または VB.NET でスクリプトを実行した後の HTML から PDF サンプル コードには、完全な scrollDownUntilYouCantAnyMore 関数が含まれています。 このサンプルでは、HTML か ら PDF に変換する前にスクリプトを実行する方法を示します。

.NET で SSL エラーを無視して HTML を PDF に変換する

変換中に SSL エラーが発生する可能性があります。 このようなエラーは通常、自己署名証明書または信頼で きない証明書が原因で発生します。 失効した証明書や期限切れの証明書によっても、HTML から PDF へのコン バーターが例外をスローする可能性があります。

SSL エラーが発生する理由を理解し、無視しても安全であると確信できる場合は、SSL エラーを無視できま す。 HTML から PDF への変換中に SSL エラーを無視するには、エンジン オプショ ンIgnoreSslErrors = true で使用します。

var engineOptions = new HtmlEngineOptions
{
    IgnoreSslErrors = true
};
using (var converter = await HtmlConverter.CreateAsync(engineOptions))
{
    var url = new Uri("https://self-signed.badssl.com/");
    using (var pdf = await converter.CreatePdfAsync(url))
        pdf.Save("output.pdf");
}

HTML コンテンツを PDF ページ上に配置する

HTML を変換し、変換結果を既存の PDF ページの上に置く必要がある場合があります。 たとえば、フォームの 画像がある場合、その画像の空の領域に何かを配置したい場合があります。 結果は入力されたフォームのよう になります。

変換された HTML を既存の PDF コンテンツの上に置くには、次の操作を行う必要があります:

  • HTMLから背景が透明なPDFページを作成します
  • 変換されたページから XObject を作成します
  • 既存の PDF ページ上に XObject を描画します。

HTML を変換し、C# または VB.NET で既存の PDF コンテンツに重ねる サンプル コードには、すべての手順が示されています。 ぜひサンプルをご覧ください。