C# で HTML ページを PDF ドキュメントに変換することは一般的なタスクであり、HTML テンプレートから請求書、レポート、契約書、その他のビジネス ドキュメントを作成するためによく使用されます。C# で HTML ページを PDF ドキュメントに変換することは、動的な Web コンテンツから静的でポータブルで印刷可能なドキュメントを作成するためにも不可欠です。
HTML ページを PDF ドキュメントに変換するプロセスには、次の手順が含まれます。
- ソース HTML ファイルを開き、HTML ページのコードを解析します。
- HTML ページで使用されている CSS ファイルと JS ファイルを取得します。
- CSS ファイル内の CSS スタイルを解析します。
- JS ファイル内の JavaScript コードを解析します。
- JavaScript コードを実行し、結果として得られる HTML ページのコードを取得します。
- 新しい PDF ドキュメントを作成します。
- HTML ページ上のラスター グラフィックとベクター グラフィック (CSS スタイルと透明度を含む) を PDF ページ上のグラフィックに変換し、結果として得られる PDF ドキュメントにグラフィックを追加します。
- HTML ページ上のテキスト (CSS スタイルを含む) を PDF ページのテキストに変換し、結果として得られる PDF ドキュメントにテキストを追加します。
- 作成した PDF ドキュメントをファイルに保存します。
HTML5 標準の仕様 (
https://html.spec.whatwg.org/print.pdf) には 1553 ページが含まれています。
CSS2 標準の仕様 (
https://www.w3.org/TR/CSS22/css2.pdf) には 426 ページが含まれています。
JavaScript 標準の仕様 (
https://ecma-international.org/wp-content/uploads/ECMA-262_16th_edition_june_2025.pdf) には 835 ページが含まれています。
HTML を PDF に変換する手順と HTML5、CSS2、JavaScript の仕様に関する情報は、HTML を PDF に変換する手順を上記で説明しており、一般的に、HTML を PDF に変換することは、ゼロから実装すると非常に複雑な作業であることを明確にしています。
同時に、この複雑な作業は、HTML ページを完全にレンダリングし、レンダリングされた HTML ページを PDF ファイルに保存できる最新の Web ブラウザですでに実装されています。したがって、妥当な疑問が生じます。C# アプリケーションで Web ブラウザを使用して HTML ページを PDF ドキュメントに変換することは可能でしょうか?
この記事では、Chromium を使用して、C# アプリケーションで任意の複雑さの HTML ページを完全に無料で最高品質で PDF ドキュメントに変換する方法を見ていきます。
Chromium は、主に Google Chrome、Microsoft Edge、Opera など、ほとんどの最新の Web ブラウザの基盤として使用されているオープンソースの Web ブラウザ プロジェクトです。速度、セキュリティ、安定性を念頭に置いて設計されており、Google、Microsoft、その他の企業の開発者による重要な貢献が特徴です。
Chrome コマンドラインを使用して C# で HTML ページを PDF ドキュメントに変換する
HTML ページを PDF ドキュメントに変換する最も簡単な方法は、コマンドラインから次の Chrome コマンドを実行することです。
"C:\Program Files\Google\Chrome\Application\chrome.exe" --headless --disable-gpu —run-all-compositor-stages-before-draw --no-margins --printBackground=true --no-pdf-header-footer --print-to-pdf="D:\result.pdf" "https://www.vintasoft.com/index.html"
Chrome コマンドラインで使用されるパラメーターの簡単な説明は次のとおりです。
- --headless – Chrome をグラフィカル インターフェイスなしで実行することを指定します。
- --disable-gpu – HTML ページのレンダリング時に GPU を無効にすることを指定します。このパラメーターは、Chrome の旧バージョンとの互換性のために必要です。
- --run-all-compositor-stages-before-draw – HTML ページがレンダリングされる前に、すべてのレンダリングおよび合成ステージを完了する必要があることを指定します。
- --no-margins – HTML ページを余白なしでレンダリングする必要があることを指定します。
- --printBackground – HTML ページに背景グラフィックを含める必要があることを指定します。
- --no-pdf-header-footer – 生成された PDF ドキュメントにドキュメント情報を含むヘッダー/フッターを含めないことを指定します。
- --print-to-pdf – 保存された PDF ファイルへのパスを指定します。パスは絶対パスである必要があります。
上記のコマンドは、Windows/Linux/maOS コマンドラインまたは C# コードから実行できます。
以下は、Chrome を使用して .NET コンソール アプリケーションで HTML ページを PDF ドキュメントに変換する方法を示す C# コードです。
using System.Diagnostics;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
string chromePath = @"C:\Program Files\Google\Chrome\Application\chrome.exe";
string sourceUrl = "https://www.vintasoft.com/index.html";
string resultPdfFilePath = @"D:\result.pdf";
string chromeArgsTemplate =
"--headless --no-pdf-header-footer --no-margins --disable-gpu --run-all-compositor-stages-before-draw --printBackground=true --print-to-pdf=\"{0}\" {1}";
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = chromePath,
Arguments = string.Format(chromeArgsTemplate, resultPdfFilePath, sourceUrl),
UseShellExecute = false,
CreateNoWindow = false
};
using (Process process = Process.Start(startInfo))
{
process.WaitForExit();
}
Console.WriteLine("HTML page is converted to the PDF document.");
}
}
}
この変換方法は、コンピューターに Chrome ウェブ ブラウザーがインストールされており、「chrome.exe」 ファイルへのパスがわかっている場合に使用できます。
結果として生成される .NET アプリケーションは、追加のライブラリを含まず、Chrome ウェブ ブラウザーに完全に依存するため、サイズが小さくなります。
CefSharp.OffScreen nuget パッケージを使用して C# で HTML ページを PDF ドキュメントに変換する
CefSharp.OffScreen nuget パッケージには、コンパイル済みの CefSharp ライブラリが含まれており、開発者は目に見えるユーザー インターフェイスなしで Chromium ウェブ ブラウザーの完全なインスタンスをバックグラウンドで実行できます。
.NET Framework アプリケーションで CefSharp.OffScreen ライブラリを使用する場合は、.NET Framework アプリケーションに CefSharp.OffScreen nuget パッケージへの参照を追加するだけです。
.NET Core アプリケーションで CefSharp.OffScreen ライブラリを使用する場合は、.NET Core アプリケーションに CefSharp.OffScreen.NETCore nuget パッケージへの参照を追加するだけです。
以下は、CefSharp.OffScreen ライブラリを使用して HTML ページを PDF ドキュメントに変換する .NET コンソール アプリケーションの C# コードです。
using CefSharp;
using CefSharp.OffScreen;
using System;
using System.Threading.Tasks;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
string sourceUrl = "https://www.vintasoft.com/index.html";
string resultPdfFilePath = @"D:\result.pdf";
Task task = ConvertHtmlToPdfUsingCefSharpOffScreen(sourceUrl, resultPdfFilePath);
task.Wait();
Console.WriteLine("HTML page is converted to the PDF document.");
Console.ReadKey();
}
static async Task ConvertHtmlToPdfUsingCefSharpOffScreen(string url, string pdfPath)
{
// if CEF is not initialized
if (Cef.IsInitialized == null || Cef.IsInitialized == false)
{
// create CEF settings
CefSettings settings = new CefSettings();
// initialize CEF
Cef.Initialize(settings);
}
// create Chromium web browser
using (ChromiumWebBrowser browser = new ChromiumWebBrowser(url))
{
// wait while page will be loaded
await browser.WaitForInitialLoadAsync();
// create PDF print settings
PdfPrintSettings printSettings = new PdfPrintSettings
{
MarginType = CefPdfPrintMarginType.None,
PrintBackground = true,
Landscape = false,
Scale = 1.0,
PreferCssPageSize = true,
DisplayHeaderFooter = false
};
// print web page to a PDF file
await browser.PrintToPdfAsync(pdfPath, printSettings);
}
}
}
}
この変換方法は Chrome Web ブラウザーに依存しないため、この場合、CefSharp.OffScreen nuget パッケージの作成者が既にコンパイル済みなので、CefSharp を自分でコンパイルする必要はありません。
結果として生成される .NET アプリケーションは、CefSharp ライブラリ ファイルが含まれているため、完全にスタンドアロンでサイズが大きくなっています (300 MB を少し超える)。
CefSharp ライブラリを使用して C# で HTML ページを PDF ドキュメントに変換する
CefSharp は、Chromium Embedded Framework (CEF) の .NET ラッパーを提供するオープンソース プロジェクトです。CefSharp を使用すると、開発者は完全に機能する Chromium ベースの Web ブラウザーを C# または VB.NET デスクトップ アプリケーションに直接埋め込むことができます。
CefSharp リポジトリは GitHub にあります:
https://github.com/cefsharp/cefsharp
リポジトリには、サンプル コンソール アプリケーション、サンプル WinForms アプリケーション、サンプル WPF アプリケーションなど、15 個のプロジェクトが含まれています。
サンプル WPF アプリケーション (プロジェクト "CefSharp.Wpf.Example.「.NET Core」を選択すると、Chrome と同様のページナビゲーションを備えた WPF アプリケーションが表示されます。この WPF アプリケーションには、リンクナビゲーション、CSS スタイル、JavaScript コードが含まれており、Chrome と全く同じ操作感です。アプリケーションのメインメニューで、「テスト => 現在のタブを PDF に印刷」メニューを選択し、レンダリングされた HTML ページを PDF ファイルとして保存できます。
この変換方法は Chrome Web ブラウザに依存しませんが、Visual Studio で CefSharp プロジェクトをコンパイルすると自動的に行われるソースコードから CefSharp を手動でコンパイルする必要があります。
結果として生成される .NET アプリケーション (「CefSharp.Wpf.Example.netcore」プロジェクト) は完全にスタンドアロンで、CefSharp ライブラリ ファイルが含まれているため、サイズが大きくなっています (400 MB 強)。
VintaSoft Imaging .NET SDK を使用した PDF ドキュメントの処理
VintaSoft は、 HTML ページを PDF ドキュメントに変換する機能は、非常に複雑で、最新の Web ブラウザですでに実装されているため、SDK に含める必要があります。
同時に、
VintaSoft Imaging .NET SDK と
VintaSoft PDF .NET Plug-in を使用すると、Windows、Linux、macOS で PDF および PDF/A ドキュメントを作成、表示、検証、印刷、注釈付け、編集、保護、署名、最適化、圧縮、変換、保存できます。
したがって、VintaSoft SDK を使用して、作成された PDF ドキュメントを処理できます。具体的には次のようになります。
VintaSoft Imaging .NET SDK +
VintaSoft PDF .NET Plug-in を使用した PDF 文書の処理機能に関する詳細情報は、こちらをご覧ください:
https://www.vintasoft.com/ja/vspdf-dotnet-index.html