HTML で作成されたコンテンツを PDF として保存・配布したい場面は多い。請求書やレポートの生成、Web ページのアーカイブ、印刷用ドキュメントの作成など、用途はさまざまである。HTML から PDF への変換では、元のレイアウトやスタイルをどれだけ忠実に再現できるかが実用上の鍵となる。
本記事では、C# で Spire.PDF for .NET の ChromeHtmlConverter クラスを使用し、Google Chrome のレンダリングエンジンを利用して HTML を PDF に変換する手順を解説する。この方法は、Chrome ブラウザでページを表示したときとほぼ同じ見た目の PDF を生成できる点が特徴である。
前提条件
ChromeHtmlConverter を使用するには、以下の環境が必要である。
- Spire.PDF for .NET:NuGet または DLL 参照でプロジェクトに追加する。
- Google Chrome:変換処理に Chrome の実行ファイル(chrome.exe)を使用するため、システムにインストールされている必要がある。
# Package Manager Console
PM> Install-Package Spire.PDF
# .NET CLI
dotnet add package Spire.PDF
なお、ChromeHtmlConverter による HTML から PDF への変換機能は、Spire.PDF for .NET のバージョン 10.7.21 以降でサポートされている。
HTML を PDF に変換するコード
ChromeHtmlConverter.ConvertToPdf() メソッドを使用して、HTML ファイルまたは URL を PDF に変換する。このメソッドは、入力ファイルパス(または URL)、出力 PDF ファイルパス、および変換設定を保持する ConvertOptions オブジェクトの 3 つの引数を受け取る。
以下が基本的な変換コードである。
using System;
using Spire.Additions.Chrome;
namespace ConvertHtmlToPdfUsingChrome
{
class Program
{
static void Main(string[] args)
{
// 変換元の HTML ファイル(または URL)と出力先の PDF ファイルパス
string inputUrl = @"https://example.com/sample.html";
string outputFile = @"HtmlToPDF.pdf";
// Chrome 実行ファイルのパス
string chromeLocation = @"C:\Program Files\Google\Chrome\Application\chrome.exe";
// ChromeHtmlConverter のインスタンスを生成
ChromeHtmlConverter converter = new ChromeHtmlConverter(chromeLocation);
// ConvertOptions のインスタンスを生成
ConvertOptions options = new ConvertOptions();
// 変換タイムアウトを設定(ミリ秒)
options.Timeout = 10 * 3000;
// 用紙サイズとマージンを設定
options.PageSettings = new PageSettings()
{
PaperWidth = 8.27, // A4 幅(インチ)
PaperHeight = 11.69, // A4 高さ(インチ)
MarginBottom = 0,
MarginTop = 0,
MarginLeft = 0,
MarginRight = 0
};
// HTML を PDF に変換
converter.ConvertToPdf(inputUrl, outputFile, options);
Console.WriteLine("変換が完了しました。");
}
}
}
処理の流れは次の通りである。まず ChromeHtmlConverter のコンストラクタに Chrome 実行ファイルのパスを渡してインスタンスを生成する。次に ConvertOptions オブジェクトを作成し、タイムアウトや用紙サイズ、マージンなどの変換設定を指定する。最後に ConvertToPdf() メソッドを呼び出して変換を実行する。
変換ログの出力
変換処理のデバッグや問題の特定に役立てるため、ログを出力できる。ChromeHtmlConverter の Logger プロパティに Logger オブジェクトを割り当てることで、変換過程の詳細がログファイルに記録される。
// ログファイルのパスを指定
string logFilePath = @"Logs.txt";
// ロガーを設定
converter.Logger = new Logger(logFilePath);
ログには変換の進行状況やエラー情報が含まれる。タイムアウトが発生した場合や、一部のリソースが読み込めなかった場合などに、原因を調査する手がかりとなる。
ChromeHtmlConverter と QT プラグイン方式の比較
Spire.PDF for .NET は、HTML から PDF への変換方法として ChromeHtmlConverter 以外に QT Web プラグインを使用する方式も提供している。両者にはそれぞれ異なる特性がある。
| 方式 | 特徴 |
|---|---|
| ChromeHtmlConverter | Chrome のレンダリングエンジンを使用。動的コンテンツの再現性が高く、ログ出力が可能。 |
| QT プラグイン | 変換速度が比較的速く、コードが簡潔。ログインセッションに対応。 |
ChromeHtmlConverter は、JavaScript によって動的に生成されるコンテンツや、複雑な CSS レイアウトを含むページの変換に適している。一方、静的な HTML を手早く変換したい場合には QT プラグイン方式が選択肢となる。用途に応じて使い分けることが望ましい。
注意点
Chrome の依存性:ChromeHtmlConverter は Chrome 実行ファイルを必要とするため、変換処理を実行するマシンに Chrome がインストールされている必要がある。サーバー環境などで Chrome を配置できない場合は、他の変換方式を検討する必要がある。
タイムアウト設定:外部リソース(画像、CSS、JavaScript など)を多く含むページでは、変換に時間がかかる場合がある。ConvertOptions.Timeout プロパティで適切なタイムアウト値を設定することが推奨される。
無料版の制限:Free Spire.PDF for .NET には制限がある。PDF ドキュメントのロードは 10 ページまで、各種形式へのエクスポートは最初の 3 ページのみが処理される。これを超えるページ数を扱う場合は商用ライセンスの確認が必要となる。
まとめ
本記事では、Spire.PDF for .NET の ChromeHtmlConverter クラスを使用して、HTML ファイルまたは URL を PDF に変換する手順を示した。Chrome のレンダリングエンジンを利用することで、ブラウザで表示したときとほぼ同じレイアウトの PDF を生成できる。
基本的な変換は、Chrome のパス指定、変換設定の構成、ConvertToPdf() の呼び出しという 3 つのステップで実装できる。変換ログを有効化することで、問題発生時のトラブルシューティングも可能である。HTML コンテンツの PDF 化が必要な場面では、検討に値する手法の一つと言えるだろう。