フッターコンテンツにスキップ
IRONPDFの使用

ライブラリを使わずにC#でHTMLをPDFに変換する方法

C#でHTMLからPDFに変換する場合、開発者は外部ライブラリに依存せずにネイティブ.NET機能を使用することを検討するかもしれません。 このアプローチは特定のシナリオで有効ですが、それには独自の利点と課題があります。 この記事ではそのプロセス、利点と欠点を探り、IronPDFのようなライブラリがなぜより良い選択とされうるかを論じます。

仕組み

組み込みの.NETツールを使用すると、WebBrowserコントロールとPrintDocumentクラスを使って、HTMLコンテンツをレンダリングし印刷することでHTMLからPDFへの変換を達成できます。 ここに簡略化されたワークフローがあります:

  1. 一時ファイルにHTMLコンテンツを書き込みます。
  2. レンダリングのためにWebBrowserコントロールにHTMLを読み込みます。
  3. PrintDocumentクラスを使用してレンダリングされたコンテンツを出力する印刷ジョブを作成します。

このアプローチでは外部依存を避けることが可能ですが、低レベルコンポーネントの操作や印刷ロジックの手動定義が必要です。

C#でHTMLをPDFに変換したい場合、外部ライブラリを使用せずに組み込みの.NET機能(System.IOやSystem.Drawing.Printingなど)を使用してHTMLをレンダリングし、その後PDFを作成できます。 以下に入門のお手伝いをする基本的な例があります:

ライブラリを使用せずHTMLをPDFに変換する方法

ライブラリを使用せずHTMLをPDFに変換する方法:図1

using System;
using System.IO;
using System.Windows.Forms; // You need to add a reference to System.Windows.Forms
using System.Drawing.Printing;

class Program
{
    [STAThread] // Required for using WebBrowser control
    static void Main()
    {
        // HTML content to be converted
        string htmlContent = "<html><body><h1>Hello, World!</h1></body></html>";

        // Write HTML content to a temporary file
        string tempFilePath = Path.Combine(Path.GetTempPath(), "temp.html");
        File.WriteAllText(tempFilePath, htmlContent);

        // Initialize a WebBrowser to render HTML
        WebBrowser webBrowser = new WebBrowser();
        webBrowser.DocumentCompleted += (sender, e) => 
        {
            // Create a PrintDocument for the printing task
            PrintDocument printDoc = new PrintDocument();
            printDoc.PrintPage += (s, args) =>
            {
                // Render the HTML content onto the Graphics object of PrintPageEventArgs
                args.Graphics.DrawString(htmlContent, new Font("Arial", 12), Brushes.Black, new PointF(100, 100));
            };

            // Use a standard print controller for silent printing
            printDoc.PrintController = new StandardPrintController(); 

            // Trigger the printing process
            printDoc.Print(); 

            // Exit the application once printing is complete
            Application.ExitThread(); 
        };

        // Load the HTML file into the WebBrowser control
        webBrowser.Url = new Uri(tempFilePath);

        // Run the application, which processes events like HTML rendering
        Application.Run();
    }
}
using System;
using System.IO;
using System.Windows.Forms; // You need to add a reference to System.Windows.Forms
using System.Drawing.Printing;

class Program
{
    [STAThread] // Required for using WebBrowser control
    static void Main()
    {
        // HTML content to be converted
        string htmlContent = "<html><body><h1>Hello, World!</h1></body></html>";

        // Write HTML content to a temporary file
        string tempFilePath = Path.Combine(Path.GetTempPath(), "temp.html");
        File.WriteAllText(tempFilePath, htmlContent);

        // Initialize a WebBrowser to render HTML
        WebBrowser webBrowser = new WebBrowser();
        webBrowser.DocumentCompleted += (sender, e) => 
        {
            // Create a PrintDocument for the printing task
            PrintDocument printDoc = new PrintDocument();
            printDoc.PrintPage += (s, args) =>
            {
                // Render the HTML content onto the Graphics object of PrintPageEventArgs
                args.Graphics.DrawString(htmlContent, new Font("Arial", 12), Brushes.Black, new PointF(100, 100));
            };

            // Use a standard print controller for silent printing
            printDoc.PrintController = new StandardPrintController(); 

            // Trigger the printing process
            printDoc.Print(); 

            // Exit the application once printing is complete
            Application.ExitThread(); 
        };

        // Load the HTML file into the WebBrowser control
        webBrowser.Url = new Uri(tempFilePath);

        // Run the application, which processes events like HTML rendering
        Application.Run();
    }
}
Imports System
Imports System.IO
Imports System.Windows.Forms ' You need to add a reference to System.Windows.Forms
Imports System.Drawing.Printing

Friend Class Program
	<STAThread>
	Shared Sub Main()
		' HTML content to be converted
		Dim htmlContent As String = "<html><body><h1>Hello, World!</h1></body></html>"

		' Write HTML content to a temporary file
		Dim tempFilePath As String = Path.Combine(Path.GetTempPath(), "temp.html")
		File.WriteAllText(tempFilePath, htmlContent)

		' Initialize a WebBrowser to render HTML
		Dim webBrowser As New WebBrowser()
		AddHandler webBrowser.DocumentCompleted, Sub(sender, e)
			' Create a PrintDocument for the printing task
			Dim printDoc As New PrintDocument()
			AddHandler printDoc.PrintPage, Sub(s, args)
				' Render the HTML content onto the Graphics object of PrintPageEventArgs
				args.Graphics.DrawString(htmlContent, New Font("Arial", 12), Brushes.Black, New PointF(100, 100))
			End Sub

			' Use a standard print controller for silent printing
			printDoc.PrintController = New StandardPrintController()

			' Trigger the printing process
			printDoc.Print()

			' Exit the application once printing is complete
			Application.ExitThread()
		End Sub

		' Load the HTML file into the WebBrowser control
		webBrowser.Url = New Uri(tempFilePath)

		' Run the application, which processes events like HTML rendering
		Application.Run()
	End Sub
End Class
$vbLabelText   $csharpLabel

コードの説明

  1. WebBrowserコントロールがHTMLをレンダリングするために使用されます。
  2. PrintDocumentクラスが印刷動作を定義するために使用されます。
  3. この例では直接PDFを作成していません; PDFの生データ作成ロジックを統合するためには、手動でテキストや形状を描くかストリームを操作する必要があります。

このアプローチには制限があり、大規模またはスタイルを含むHTMLドキュメントに対しては複雑になることがあります。 ユースケースが許すのであれば、IronPDFのようなライブラリを使用する方が通常はるかに効率的で、多機能です。

組み込み.NET機能を使用することの長所と短所

長所

  • 外部依存の非依存性:外部ライブラリを避けることで、プロジェクトでのサードパーティ依存管理の複雑さを軽減できます。
  • 無料:この方法がネイティブ.NETコンポーネントのみを使用しているため、ライセンス料や追加費用はありません。
  • 細かい制御:コンテンツのレンダリングと印刷方法を完全に制御できるため、カスタム処理が可能です。

短所

  • 機能が限られる:組み込み.NETツールは、複雑なHTML、CSS、またはJavaScriptを正確にレンダリングする能力が欠けています。 高度なレイアウト、レスポンシブデザイン、またはダイナミックコンテンツはサポートされていないかもしれません。
  • 時間がかかる実装:レンダリング、ページネーション、PDF作成を処理するカスタムコードを書く必要があるため、開発コストが高くなる可能性があります。
  • 低いスケーラビリティ:大規模なまたは高性能なアプリケーションに対して、このアプローチは非効率的でボトルネックを抱えるかもしれません。
  • ネイティブのPDFサポートがない:このワークフローは直接PDFを作成しません; 印刷された出力からPDFファイルを生成するためにカスタムロジックを実装する必要があります。

IronPDFの紹介

ライブラリを使用せずHTMLをPDFに変換する方法:図2

IronPDFは、HTMLからPDFへの変換を簡単に行える.NETライブラリです。 CSS、JavaScript、埋め込み画像もサポートする幅広い機能を備えています。 IronPDFを使用すると、HTMLウェブページとまったく同じ見た目のPDFを作成でき、フォーマット間のシームレスな移行を保証します。 このライブラリはその場で動的なPDFドキュメントを生成する必要があるWebアプリケーションに特に役立ちます。

IronPDFは、.NETアプリケーションにPDF機能をシームレスに統合し、PDFファイル構造を手動で管理する必要をなくします。 IronPDFは、Chromeベースのレンダリングエンジンを活用して、HTMLページ(複雑なCSS、JavaScript、画像を含む)を構造化されたPDFドキュメントに変換します。 レポート、請求書、電子書籍、またはPDF形式で提示する必要がある任意の種類のドキュメントを生成するために使用できます。

IronPDFは多用途で、PDFのレンダリングだけでなく、編集、フォーム処理、暗号化などの幅広いPDF処理オプションも提供します。

IronPDFの主な機能

  1. HTMLからPDFへの変換

    • HTMLレンダリング: IronPDFは、HTMLファイル形式のドキュメントやウェブページ(CSS、イメージ、JavaScriptを含むHTML)を直接PDFドキュメントに変換できます。 HTMLテンプレートを使用して変換することも可能です。 これは動的なWebコンテンツからのPDF生成に最適です。

    • モダンなHTML/CSSのサポート: IronPDFはモダンなHTML5、CSS3、およびJavaScriptを処理し、WebベースのコンテンツをPDFとして正確にレンダリングし、レイアウト、フォント、インタラクティブ要素を保持します。

    • 高度なレンダリング: Chromeのレンダリングエンジン(Chromium経由)を使用して正確で高品質のPDF生成を行い、他の多くのHTMLからPDFへのライブラリよりも信頼性が高いです。

    • ウェブサイトURLからPDFへ: IronPDFはウェブサイトのURL文字列を入力として受け取り、それをPDFに変換できます。
  2. カスタムヘッダーとフッター

    • IronPDFは、開発者がPDFドキュメントにカスタムヘッダーとフッターを追加する機能を持ちます。これにはページ番号、文書タイトル、あるいはカスタムテキストのような動的コンテンツを含めることができます。

    • ヘッダーとフッターは個々のページに追加することも、文書全体で一貫した要素として追加することも可能です。
  3. JavaScriptサポートのPDF

    • IronPDFはPDF生成前にHTMLコンテンツ内でJavaScriptの実行を可能にします。 これにより、生成されたPDF内でフォーム計算やインタラクティブ性などの動的コンテンツレンダリングが可能になります。

    • JavaScriptは動的なウェブページからのPDF作成やクライアントサイドロジックを要求するレポートの生成に役立ちます。
  4. 既存のPDFを編集する

    • IronPDFは既存のPDFを編集する機能を提供します。 既存のPDFファイルのテキスト、画像を修正し、注釈を追加することが可能です。 この機能は、文書をウォーターマークしたり、署名を追加したり、PDFファイル内のコンテンツを更新したりする際に便利です。

    • テキストの抽出と編集により、PDFドキュメント内のコンテンツをプログラムで操作できます。
  5. PDFのマージと分割

    • IronPDFは複数のPDFファイルを1つのドキュメントに統合したり、大きなPDFを小さなファイルに分割したりすることを可能にします。 文書を統合したり、より管理しやすい部分に分割する必要があるワークフローに最適です。
  6. インタラクティブフォームのサポート

    • IronPDFを使用してPDFフォームを作成し、入力し、操作することができます。 インタラクティブなフォーム(テキストフィールド、チェックボックス、ラジオボタンなど)を完全にサポートし、データを使ってフォームを事前に入力することができます。

    • IronPDFは既存のPDFからフォームデータを抽出することもでき、フォームデータをプログラムで読み取り、処理することが容易です。
  7. ページ操作

    • IronPDFはPDFドキュメント内の個々のページの操作(ページの回転、削除、並べ替えなど)に対する様々なメソッドを提供します。 最終ドキュメントの構造をカスタマイズするのに役立ちます。

    • 既存のPDFに新しいページを追加したり、不要なページを削除することもできます。
  8. セキュリティと暗号化

    • IronPDFはPDFにパスワード保護および暗号化を適用し、文書のセキュリティを確保します。 印刷、コピー、PDFの編集を防ぐようにユーザーの権限を設定できます。

    • 敏感な文書のために、PDFにデジタル署名を追加して信憑性を確認することができます。
  9. ウォーターマークとブランディング

    • IronPDFを使用するとPDFドキュメントにウォーターマークを追加するのが容易です。 テキストもしくは画像をページ上にウォーターマークとしてオーバーレイし、文書の無断コピーや配布から保護できます。

    • これはロゴやテキストが文書のすべてのページに一貫して表示される必要がある場合のブランド化でよく使用されます。
  10. テキストと画像の抽出

    • IronPDFはPDFドキュメントからのテキストと画像の抽出を可能にし、処理や再利用のためにデータを抽出できます。

    • これはPDFの内容を分析したり、フォームから情報を抽出したり、さらなる使用のために画像を取得する必要があるシナリオに役立ちます。
  11. ユニコードと多言語サポート

    • IronPDFは強力なユニコードサポートを備えており、国際文字やフォントを扱うことができ、複数の言語でPDFを生成するのに理想的です。

    • 中国語、アラビア語、ロシア語などの言語をサポートし、マルチリンガルなPDFドキュメントの作成を可能にします。
  12. パフォーマンス最適化

    • IronPDFはパフォーマンスに最適化されており、大容量のPDFドキュメントや大量のリクエストを処理することが可能です。 ライブラリは、データセットや画像が大規模でもPDF生成を高速かつ効率的に保つことを保証します。
  13. APIと開発者向けツール

    • IronPDFは包括的で使いやすいAPIを提供します。 開発者は、複雑なタスクを実行するための簡単なメソッド呼び出しを使用して迅速に開始できます。

    • APIは良く文書化されており、IronPDFを任意のC#もしくは.NETアプリケーションへ統合しやすくします。
  14. クロスプラットフォームサポート

    • IronPDFはクロスプラットフォームに対応しており、WindowsとLinux環境の両方で使用でき、異なるオペレーティングシステム間でPDFを生成および操作できます。

IronPDFを使用してHTMLをPDFに変換する方法

using IronPdf;

class Program
{
    static void Main()
    {
        // Specify license key
        License.LicenseKey = "Your Key";

        // Create a new ChromePdfRenderer object
        var Renderer = new ChromePdfRenderer();

        // Define the HTML string to be converted
        string htmlContent = "<html><body><h1>IronPDF: Easily Convert HTML to PDF</h1></body></html>";

        // Convert the HTML string to a PDF document
        var document = Renderer.RenderHtmlAsPdf(htmlContent);

        // Save the PDF document to a file
        document.SaveAs("html2Pdf.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main()
    {
        // Specify license key
        License.LicenseKey = "Your Key";

        // Create a new ChromePdfRenderer object
        var Renderer = new ChromePdfRenderer();

        // Define the HTML string to be converted
        string htmlContent = "<html><body><h1>IronPDF: Easily Convert HTML to PDF</h1></body></html>";

        // Convert the HTML string to a PDF document
        var document = Renderer.RenderHtmlAsPdf(htmlContent);

        // Save the PDF document to a file
        document.SaveAs("html2Pdf.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main()
		' Specify license key
		License.LicenseKey = "Your Key"

		' Create a new ChromePdfRenderer object
		Dim Renderer = New ChromePdfRenderer()

		' Define the HTML string to be converted
		Dim htmlContent As String = "<html><body><h1>IronPDF: Easily Convert HTML to PDF</h1></body></html>"

		' Convert the HTML string to a PDF document
		Dim document = Renderer.RenderHtmlAsPdf(htmlContent)

		' Save the PDF document to a file
		document.SaveAs("html2Pdf.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

コードスニペットの説明

1. ライセンスキーの設定

プログラムはIronPDFライセンスキーを設定することで始まります。このキーはライブラリの全機能を解放するために必要です。

2. レンダラーの作成

ChromePdfRendererのインスタンスが初期化されます。 このコンポーネントはHTMLコンテンツをPDFドキュメントに変換する責任を持ち、生のHTMLと最終出力の間の橋渡しを行います。

3. HTMLコンテンツの定義

htmlContentという文字列変数が作成されます。この変数は、PDFに変換されるHTML構造を保持します。 この例では、シンプルな見出しを含みます。

4. HTMLからPDFへの変換

ChromePdfRendererインスタンスに対してRenderHtmlAsPdf()メソッドが呼び出され、HTML文字列を入力として受け取ります。 この関数はコンテンツを処理し、PDFドキュメントに変換します。

5. PDFの保存

最後に、生成されたPDFをSaveAs()メソッドを使用して「html2Pdf.pdf」というファイルに保存します。ディスクに保存され、将来のアクセスが可能です。

出力

ライブラリを使用せずHTMLをPDFに変換する方法:図3

ライセンス情報(試用版あり)

IronPDFを使用するには有効なライセンスキーが必要です。 公式ウェブサイトから試用ライセンスを取得できます。IronPDFライブラリを使用する前に、次のようにライセンスキーを設定します:

IronPdf.License.LicenseKey = "your key";
IronPdf.License.LicenseKey = "your key";
IronPdf.License.LicenseKey = "your key"
$vbLabelText   $csharpLabel

これにより、ライブラリは制限なしに動作します。

結論

HTMLをPDFに変換するために組み込み.NET機能を使用することは、簡単なユースケースでは実行可能なソリューションとなりえるものの、しばしば大きな労力が必要で、現代の機能に欠けます。 対照的に、IronPDFのようなライブラリは、優れた機能、迅速な開発、および高度なHTMLレンダリングのサポートを提供するため、ほとんどの開発者にとっての選択肢になっています。 最終的な決定はプロジェクトの要件、予算、および開発の優先順位に依存します。

よくある質問

HTMLからPDFへの変換においてネイティブな.NET機能を使用する利点は何ですか?

ネイティブな.NET機能を使用することで、外部依存や追加コストを避けつつ、レンダリングや印刷プロセスに対する高い制御権を提供します。

ライブラリを使用せずにC#でHTMLをPDFに変換する際に、開発者が直面する可能性のある課題は何ですか?

課題には、組み込みメソッドの機能の限界、スタイル付きまたは大規模なHTMLドキュメントを扱う際の複雑さ、PDF作成のための追加のカスタムロジックの必要性が含まれます。

第三者ライブラリを使用せずに.NETを使用してHTMLをPDFに変換する方法は何ですか?

開発者はHTMLコンテンツを一時ファイルに書き込み、WebBrowserコントロールを使用してレンダリングし、PrintDocumentクラスを使用してPDF変換のための印刷ジョブを作成することができます。

.NETライブラリがHTMLからPDFへの変換においてより良い選択肢となる特徴は何ですか?

IronPDFのような.NETライブラリは、最新のHTML、CSS、JavaScript、画像のサポートを提供するとともに、PDF編集、マージ、分割、フォーム処理、セキュリティ機能を備えています。

なぜIronPDFがネイティブな.NETメソッドを使用するよりも優れた選択肢となるのでしょうか?

IronPDFは、JavaScriptの実行、カスタムヘッダー、および動的で複雑なウェブコンテンツの効率的な処理などの機能を提供することで、変換プロセスを簡素化し、堅牢でスケーラブルなソリューションを提供します。

IronPDFはインタラクティブなフォームや複雑なレイアウトをPDFで処理できますか?

はい、IronPDFはインタラクティブなフォームをサポートし、複雑なレイアウトを正確にレンダリングできるため、Webコンテンツからプロフェッショナル品質のPDFを作成するのに適しています。

IronPDFは大量のPDF生成に最適化されていますか?

はい、IronPDFは大規模なPDFドキュメントと大量のリクエストを効率的に処理するように設計されているため、大規模アプリケーションに理想的です。

IronPDFはクロスプラットフォームサポートを提供していますか?

IronPDFはWindowsやLinuxを含む複数のオペレーティングシステムと互換性があり、さまざまな開発環境に柔軟性を提供します。

IronPDFはPDFドキュメントのセキュリティをどのように保証していますか?

IronPDFはパスワード保護、暗号化、ユーザーパーミッション、デジタル署名オプションを提供し、PDFドキュメントをセキュリティで保護します。

IronPDFの全機能にアクセスするには何が必要ですか?

IronPDFのすべての機能を解除するには、有効なライセンスキーが必要です。開発者は公式ウェブサイトからトライアルライセンスを取得できます。

IronPDF は .NET 10 をサポートしていますか? また、.NET 10 プロジェクトで使用する場合に特別な考慮事項はありますか?

はい、IronPDFは.NET 10と完全に互換性があります。特別な設定や回避策を必要とせず、.NET 10(およびそれ以前のバージョン)をネイティブモードでサポートし、最新のAPIもすべて利用できます。NuGet経由でインストールすれば、Chromeベースのレンダリング、JS実行、レスポンシブCSSなどの機能を、以前の.NETバージョンと同様にご利用いただけます。

ネイティブ .NET 機能を使用して HTML を PDF に変換する場合、以前の .NET バージョンではなく .NET 10 をターゲットとするとどのように異なりますか?

.NET 10をターゲットにすることで、一般的にパフォーマンスが向上し、APIが改良され、特にデスクトップやWindowsFormsのコンテキストでの動作がより予測しやすくなります。ただし、手動レンダリング(WebBrowserやPrintDocumentの使用など)の制限は依然として適用されます。.NET 10に最適化されているIronPDFとは異なり、ネイティブメソッドは最新のHTML/CSS/JSサポートが不足しており、多様なコンテンツを処理するにはより多くのカスタム作業が必要になります。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。