IRONSOFTWAREHOME
ビデオ

HTML文字列をPDFにレンダリングする方法 C#

Curtis Chau
Curtis Chau
Updated: 2026年7月19日

PrinceXMLからIronPDFに移行することで、PDF生成のワークフローが外部のコマンドラインプロセスから.NETネイティブライブラリに変わります。 このガイドは、プロセス管理のオーバーヘッドを排除し、デプロイを簡素化し、生成にとどまらない広範なPDF操作機能を提供する、完全でステップバイステップの移行パスを提供します。

なぜPrinceXMLからIronPDFに移行するのか

PrinceXMLを理解する

PrinceXMLは、CSS Paged Media仕様の専用サポートにより、HTMLコンテンツを印刷に最適なPDF文書に変換することを得意とする洗練されたツールです。 PrinceXMLは、このような専門性に特化しているため、意図した印刷デザインに忠実なドキュメントを作成することができます。

ただし、PrinceXMLは.NETライブラリではなく、独立したコマンドラインツールとして動作するため、純粋な.NETソリューションを好む環境にとっては統合が複雑になる可能性があります。 別のサーバープロセスに依存するため、システムリソースの管理が追加され、プロジェクトの展開が複雑になる可能性があります。

外部プロセスの問題

PrinceXMLは独立したコマンドライン実行ファイルとして動作するため、.NETアプリケーションではアーキテクチャ上の大きな課題が生じます:

1.**プロセス管理のオーバーヘッド:**外部プロセスを生成、監視、終了する必要があります。

2.ネイティブ.NET統合なし: stdin/stdout または一時ファイルを介して通信します。

3.**展開の複雑さ:**すべてのサーバーに Prince をインストールする必要があります。

  1. サーバーあたりのライセンス: 各デプロイメントは個別のライセンスが必要です。

5.**エラー処理の難易度:**エラー検出のためにテキスト出力を解析します。

  1. **Async/Await なし:**ブロッキング呼び出しや複雑な非同期ラッパーは必要ありません。

7.パスの依存関係: Prince 実行可能ファイルを PATH または絶対パスで見つける必要があります。

PrinceXMLとIronPDFの比較

アスペクトPrinceXMLIronPDF
アーキテクチャ外部プロセス.NETネイティブライブラリ
統合コマンドラインダイレクトAPI
デプロイメントすべてのサーバーにインストール単一のNuGetパッケージ
エラー処理テキスト出力の解析.NET の例外
非同期サポートについてマニュアルラッパーネイティブasync/await
PDF操作生成のみ完全な操作(マージ、分割、編集)
ライセンスについてデスクトップ $495 / サーバー $3,800; free non-commercial use with logo watermark開発者1人あたり
更新情報手動再インストールNuGetアップデート
デバッグ難易度完全なデバッガサポート
デジタル署名なしはい
フォームなしはい
Dockerサポート複雑単純
クラウドファンクション難易度簡単

IronPDFは、単なるHTMLからPDFへの変換にとどまらず、編集、マージ、電子署名などの高度なPDF操作タスクも含む、.NETネイティブ機能で代替手段を提供します。 IronPDFのAPIはシンプルで使いやすいように設計されており、開発者は最小限の定型コードで変換や操作を行うことができます。

最新 for .NETを採用しているチームには、IronPDFのシームレスなデプロイメントは外部依存関係やサーバープロセスを必要とせず、.NETフレームワークへの統合にかかる負担を軽減します。


始める前に

前提条件

  1. .NET環境: .NET Framework 4.6.2+ または.NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGetアクセス: NuGetパッケージをインストールする機能
  3. IronPDFライセンス: IronPDFからライセンスキーを取得します。

NuGetパッケージの変更

# Install IronPDF
dotnet add package IronPdf

# Remove Prince wrapper if using one
dotnet remove package PrinceXMLWrapper
SHELL

ライセンス構成

// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

PrinceXMLの使い方を検索する

# Find Prince process calls
grep -r "prince" --include="*.cs" .
grep -r "Process.Start" --include="*.cs" . | grep -i prince
grep -r "@page" --include="*.css" .
grep -r "prince-" --include="*.css" .
SHELL

完全な API リファレンス

名前空間の変更

// Before: PrinceXML
using PrinceXML.Wrapper;
using System.Diagnostics;
using System.IO;

// After: IronPDF
using IronPdf;

コマンドラインからメソッドへのマッピング

プリンスコマンドIronPDF 同等物
prince input.html -o output.pdfrenderer.RenderHtmlFileAsPdf("input.html").SaveAs("output.pdf")
prince --style=custom.css input.htmlHTMLにCSSを含めるか、RenderingOptionsを使用します。
prince --javascriptrenderer.RenderingOptions.EnableJavaScript = true
prince --no-javascriptrenderer.RenderingOptions.EnableJavaScript = false
prince --page-size=Letterrenderer.RenderingOptions.PaperSize = PdfPaperSize.Letter
prince --page-margin=1inrenderer.RenderingOptions.MarginTop = 72 (72ポイント = 1インチ)
prince --encryptpdf.SecuritySettings.OwnerPassword = "..."
prince --user-password=pwpdf.SecuritySettings.UserPassword = "pw"
prince --disallow-printpdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint
prince --disallow-copypdf.SecuritySettings.AllowUserCopyPasteContent = false
prince --baseurl=http://...renderer.RenderingOptions.BaseUrl = new Uri("http://...")
prince --media=printrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
prince --media=screenrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen

CSSの@pageからRenderingOptionsへのマッピング

CSS @ページプロパティIronPDF 同等物
size: A4PaperSize = PdfPaperSize.A4
size: LetterPaperSize = PdfPaperSize.Letter
size:A4landscapePaperSize = PdfPaperSize.A4 + PaperOrientation = Landscape
margin: 2cmMarginTop/Bottom/Left/Right = 56
margin-top: 1inMarginTop = 72
@top-center { content: "..." }中央揃えのdivを用いたHtmlHeader
@bottom-right { content: counter(page) }HtmlFooter

ページ サイズの変換

サイズポイントミリメートル
レター612 x 792216 x 279
A4595 x 842210 x 297
リーガル612 x 1008216 x 356
1インチ7225.4
1cm28.3510

コード移行の例

例1: HTMLファイルからPDFへの変換

翻訳前 (PrinceXML):

// NuGet: Install-Package PrinceXMLWrapper
using PrinceXML.Wrapper;
using System;

class Program
{
    static void Main()
    {
        Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
        prince.Convert("input.html", "output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}

翻訳後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlFileAsPdf("input.html");
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}

この例は、基本的なアーキテクチャの違いを示しています。 PrinceXMLは、実行可能ファイルのフルパスを指定したConvert()を呼び出す必要があります。

IronPDFはパスの依存を完全に排除します: SaveAs()を使用します。 実行可能パス、プロセス管理、パス依存性はありません。 包括的な例については、HTML to PDF documentationを参照してください。

例2: オプションを使用したURLからPDFへの変換

翻訳前 (PrinceXML):

// NuGet: Install-Package PrinceXMLWrapper
using PrinceXML.Wrapper;
using System;

class Program
{
    static void Main()
    {
        Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
        prince.JavaScript = true;
        prince.Encrypt = true;
        prince.PdfTitle = "Website Export";
        prince.Convert("https://example.com", "webpage.pdf");
        Console.WriteLine("URL converted to PDF");
    }
}

翻訳後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.EnableJavaScript = true;
        renderer.RenderingOptions.Title = "Website Export";

        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SecuritySettings.OwnerPassword = "owner-password";
        pdf.SecuritySettings.UserPassword = "user-password";
        pdf.SaveAs("webpage.pdf");
        Console.WriteLine("URL converted to PDF");
    }
}

この例では、PrinceXMLのオプションとIronPDFのプロパティの対応を示しています。 PrinceXMLは、変換する前に、構成をPdfTitle)として公開します。 IronPDFは、事前レンダリング設定にSecuritySettingsを通じてレンダリング後に暗号化を適用します。

主なマッピング

  • prince.JavaScript = truerenderer.RenderingOptions.EnableJavaScript = true
  • prince.PdfTitle = "..."renderer.RenderingOptions.Title = "..."
  • prince.Encrypt = truepdf.SecuritySettings.OwnerPassword = "..." / pdf.SecuritySettings.UserPassword = "..."

詳しくは、チュートリアルをご覧ください。

例3: HTML文字列からPDFへの変換

翻訳前 (PrinceXML):

// NuGet: Install-Package PrinceXMLWrapper
using PrinceXML.Wrapper;
using System;

class Program
{
    static void Main()
    {
        string html = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>";

        Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
        // ConvertString accepts a raw HTML/XML string directly
        prince.ConvertString(html, "styled-output.pdf");
        Console.WriteLine("Styled PDF created");
    }
}

翻訳後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        string html = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("styled-output.pdf");
        Console.WriteLine("Styled PDF created");
    }
}

両方のライブラリは、PrinceXMLはRenderHtmlAsPdf()経由で、HTML文字列を直接受け入れます。 建築上の違いが残ります — PrinceXMLのprinceバイナリに入力を渡し続けますが、IronPDFは外部実行ファイルなしでインプロセスでレンダリングを実行します。


CSSページングされたメディアを移行する

PrinceXMLのCSS Paged Mediaのサポートは強力ですが、Prince固有のCSSを使用するため、ベンダーロックインが発生します:

PrinceXML CSS:

@page {
    size: A4;
    margin: 2cm;
    @top-center {
        content: "Document Title";
    }
    @bottom-right {
        content: counter(page);
    }
}

/* Prince-specific extensions */
prince-pdf-page-label: "Chapter " counter(chapter);
prince-pdf-destination: attr(id);
Text

IronPDF C# (相当):

renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 56;    // ~2cm
renderer.RenderingOptions.MarginBottom = 56;
renderer.RenderingOptions.MarginLeft = 56;
renderer.RenderingOptions.MarginRight = 56;

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center;'>Document Title</div>",
    MaxHeight = 40
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:right;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};

よくある CSS 移行の問題

課題1: CSSの@ページが動作しない

IronPDFはChromiumを使用しており、@ページのサポートに制限があります。 CSSルールをRenderingOptionsに変換する。

課題2:ページの余白ボックスが見つからない

CSSマージンボックス(@bottom-right)はPrince特有です。 代わりにHtmlFooterを使用します。

問題3: 文字列セット/コンテンツが動作しない

string-set CSSプロパティはPrince特有です。 <title>タグから使用します。

<title>Chapter 1: Introduction</title>
HTML
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div>{html-title}</div>"
};

課題4:カウンター(ページ)が間違っている

CSSカウンターの代わりにIronPDFの{total-pages}プレースホルダーを使用します。


パフォーマンス比較

手術PrinceXMLIronPDF
シンプルなHTML~400ms~300ms
複雑なCSS~600ms~400ms
JavaScriptページ制限的~500ms
大型文書~1500ms~1000ms
コンカレント (10)~4000ms~1500ms
スタートアップのオーバーヘッド~200ms~50ms

移行後の新機能

IronPDFに移行することで、PrinceXMLでは提供できない機能を得ることができます:

PDFマージ

var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_book.pdf");

ウォーターマーク

pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");

デジタル署名

var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);

フォーム入力

var pdf = PdfDocument.FromFile("form.pdf");
pdf.Form.GetFieldByName("Name").Value = "John Doe";
pdf.SaveAs("filled_form.pdf");

機能比較の概要

フィーチャーPrinceXMLIronPDF
.NET ネイティブなしはい
外部プロセス必須なし
非同期サポートマニュアルラッピングネイティブasync/await
CSSページングメディアサポート対象レンダリングオプション経由
CSSグリッドはいはい
フレックスボックスはいはい
JavaScript制限的フルES2024
世代はいはい
マージなしはい
分割なしはい
編集なしはい
透かしCSSのみHTML/CSS + API
デジタル署名なしはい
PDF/Aはいはい
暗号化はいはい
フォームなしはい
NuGetパッケージなしはい
サーバーインストール必須なし

移行チェックリスト

移行前

  • すべてのPrinceコマンドライン呼び出しを識別する
  • 使用されているドキュメント CSS @page ルール
  • Prince特有のCSSプロパティをリスト化します(string-set
  • Prince for JavaScript関数をメモする
  • 使用されているPDF機能(暗号化、メタデータ)を特定する
  • IronPDFからIronPDFライセンスキーを取得します

コードの変更

  • PrinceXMLWrapper NuGetパッケージを削除します
  • IronPdf NuGetパッケージをインストールします
  • 名前空間のインポートを更新する
  • ChromePdfRendererに置き換えます
  • RenderHtmlAsPdf()に置き換えます
  • セッターメソッドをRenderingOptionsプロパティに変換します
  • @page CSSをRenderingOptionsに移行します
  • マージンボックスをHtmlFooterに置き換えます
  • CSSカウンターを{total-pages}プレースホルダーに変換します
  • HTML文字列の一時ファイル処理を削除
  • アプリケーションの起動時にライセンスの初期化を追加

移行後

  • HTMLファイルの変換をテストする
  • HTML文字列の変換をテストする
  • URL変換をテストする
  • ページサイズが一致していることを確認する
  • 余白が一致していることを確認する
  • ヘッダーとフッターをテストする
  • ページ番号を確認する
  • 暗号化/セキュリティのテスト
  • サーバーからPrinceのインストールを削除する
  • デプロイメントスクリプトを更新する

ご注意: PrinceXMLはその所有者の登録商標です。 このサイトは、YesLogic Pty とは関連付けられておらず、承認や後援も受けていません。 株式会社。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。
Curtis Chau
テクニカルライター

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

...
詳しく読む

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。