C#でPrinceXMLからIronPDFに移行する方法
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 をインストールする必要があります。
4.サーバーごとのライセンス:展開ごとに個別のライセンスが必要です (495 ドル以上)。
5.エラー処理の難易度:エラー検出のためにテキスト出力を解析します。
- Async/Await なし:ブロッキング呼び出しや複雑な非同期ラッパーは必要ありません。
7.パスの依存関係: Prince 実行可能ファイルを PATH または絶対パスで見つける必要があります。
PrinceXMLとIronPDFの比較
| アスペクト | PrinceXML | IronPDF |
|---|---|---|
| アーキテクチャ | 外部プロセス | .NETネイティブライブラリ |
| 統合。 | コマンドライン | ダイレクトAPI |
| デプロイメント | すべてのサーバーにインストール | 単一のNuGetパッケージ |
| エラー処理。 | テキスト出力の解析 | .NET の例外 |
| 非同期サポートについて | マニュアルラッパー | ネイティブasync/await |
| PDF操作 | 生成のみ | 完全な操作(マージ、分割、編集) |
| ライセンスについて | サーバーあたり(495ドル以上) | 開発者1人あたり |
| 更新情報 | 手動再インストール | NuGetアップデート |
| デバッグ。 | 難易度 | 完全なデバッガサポート |
| デジタル署名。 | なし | はい |
| フォーム。 | なし | はい |
| Dockerサポート。 | 複雑 | 単純 |
| クラウドファンクション | 難易度 | 簡単 |
IronPdfは、単なるHTMLからPDFへの変換にとどまらず、編集、マージ、電子署名などの高度なPDF操作タスクも含む、.NETネイティブ機能で代替手段を提供します。 IronPdfのAPIはシンプルで使いやすいように設計されており、開発者は最小限の定型コードで変換や操作を行うことができます。
2025年と2026年まで.NET 10とC# 14の導入を計画しているチームにとって、IronPDFのシームレスな導入は外部依存やサーバープロセスを必要としないため、.NETフレームワークへの統合の負担を軽減します。
始める前に
前提条件
- .NET環境: .NET Framework 4.6.2+ または.NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGetアクセス: NuGetパッケージをインストールする機能
- IronPDFライセンス: IronPDFからライセンスキーを取得します。
NuGetパッケージの変更
# Install IronPDF
dotnet add package IronPdf
# Remove Prince wrapper if using one
dotnet remove package PrinceXMLWrapper
# Install IronPDF
dotnet add package IronPdf
# Remove Prince wrapper if using one
dotnet remove package PrinceXMLWrapper
ライセンス構成
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' 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" .
# 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" .
完全な API リファレンス
名前空間の変更
// Before: PrinceXML
using PrinceXMLWrapper;
using System.Diagnostics;
using System.IO;
// After: IronPDF
using IronPdf;
// Before: PrinceXML
using PrinceXMLWrapper;
using System.Diagnostics;
using System.IO;
// After: IronPDF
using IronPdf;
' Before: PrinceXML
Imports PrinceXMLWrapper
Imports System.Diagnostics
Imports System.IO
' After: IronPDF
Imports IronPdf
コマンドラインからメソッドへのマッピング
| プリンスコマンド | IronPDF 同等物 |
|---|---|
prince input.html -o output.pdf |
renderer.RenderHtmlFileAsPdf("input.html").SaveAs("output.pdf") |
prince --style=custom.css input.html |
HTML に CSS を含めるか、RenderingOptions を使用します |
prince --javascript |
renderer.RenderingOptions.EnableJavaScript = true |
prince --no-javascript |
renderer.RenderingOptions.EnableJavaScript = false |
prince --page-size=Letter |
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter |
prince --page-margin=1in |
renderer.RenderingOptions.MarginTop = 72 (72ポイント = 1インチ) |
prince --encrypt |
pdf.SecuritySettings.OwnerPassword = "..." |
prince --user-password=pw |
pdf.SecuritySettings.UserPassword = "pw" |
prince --disallow-print |
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint |
prince --disallow-copy |
pdf.SecuritySettings.AllowUserCopyPasteContent = false |
prince --baseurl=http://... |
renderer.RenderingOptions.BaseUrl = new Uri("http://...") |
prince --media=print |
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print |
prince --media=screen |
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen |
CSSの@pageからRenderingOptionsへのマッピング
| CSS @ページプロパティ | IronPDF 同等物 |
|---|---|
size: A4 |
PaperSize = PdfPaperSize.A4 |
size: Letter |
PaperSize = PdfPaperSize.Letter |
size:A4landscape |
PaperSize = PdfPaperSize.A4 + PaperOrientation = Landscape |
margin: 2cm |
MarginTop/Bottom/Left/Right = 56 |
margin-top: 1in |
MarginTop = 72 |
@top-center { content: "..." } |
HtmlHeader 中央揃えの div |
@bottom-right { content: counter(page) } |
HtmlFooter と {page} のプレースホルダ |
ページ サイズの変換
| サイズ | ポイント | ミリメートル |
|---|---|---|
| レター | 612 x 792 | 216 x 279 |
| A4 | 595 x 842 | 210 x 297 |
| リーガル | 612 x 1008 | 216 x 356 |
| 1インチ | 72 | 25.4 |
| 1cm | 28.35 | 10 |
コード移行の例
例1: HTMLファイルからPDFへの変換
翻訳前 (PrinceXML):
// NuGet: Install-Package PrinceXMLWrapper
using PrinceXMLWrapper;
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");
}
}
// NuGet: Install-Package PrinceXMLWrapper
using PrinceXMLWrapper;
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");
}
}
Imports PrinceXMLWrapper
Imports System
Module Program
Sub Main()
Dim prince As New Prince("C:\Program Files\Prince\engine\bin\prince.exe")
prince.Convert("input.html", "output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End Module
翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlFileAsPdf("input.html");
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlFileAsPdf("input.html");
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlFileAsPdf("input.html")
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End Class
この例は、基本的なアーキテクチャの違いを示しています。PrinceXMLでは、実行可能ファイルへの完全なパス ("C:\\Program Files\\Prince\\engine\\bin\\prince.exe") を使用して Prince オブジェクトをインスタンス化し、次に入力パスと出力パスを使用して Convert() を呼び出す必要があります。
IronPDF はパス依存性を完全に排除します。つまり、ChromePdfRenderer を作成し、HTML ファイル パスを使用して RenderHtmlFileAsPdf() を呼び出し、SaveAs() で結果を書き込みます。 実行可能パス、プロセス管理、パス依存性はありません。 包括的な例については、HTML to PDF documentationを参照してください。
例2: オプションを使用したURLからPDFへの変換
翻訳前 (PrinceXML):
// NuGet: Install-Package PrinceXMLWrapper
using PrinceXMLWrapper;
using System;
class Program
{
static void Main()
{
Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
prince.SetJavaScript(true);
prince.SetEncrypt(true);
prince.SetPDFTitle("Website Export");
prince.Convert("https://example.com", "webpage.pdf");
Console.WriteLine("URL converted to PDF");
}
}
// NuGet: Install-Package PrinceXMLWrapper
using PrinceXMLWrapper;
using System;
class Program
{
static void Main()
{
Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
prince.SetJavaScript(true);
prince.SetEncrypt(true);
prince.SetPDFTitle("Website Export");
prince.Convert("https://example.com", "webpage.pdf");
Console.WriteLine("URL converted to PDF");
}
}
Imports PrinceXMLWrapper
Imports System
Class Program
Shared Sub Main()
Dim prince As New Prince("C:\Program Files\Prince\engine\bin\prince.exe")
prince.SetJavaScript(True)
prince.SetEncrypt(True)
prince.SetPDFTitle("Website Export")
prince.Convert("https://example.com", "webpage.pdf")
Console.WriteLine("URL converted to PDF")
End Sub
End Class
翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.PdfTitle = "Website Export";
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.Encrypt("password");
pdf.SaveAs("webpage.pdf");
Console.WriteLine("URL converted to PDF");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.PdfTitle = "Website Export";
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.Encrypt("password");
pdf.SaveAs("webpage.pdf");
Console.WriteLine("URL converted to PDF");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.PdfTitle = "Website Export"
Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
pdf.Encrypt("password")
pdf.SaveAs("webpage.pdf")
Console.WriteLine("URL converted to PDF")
End Sub
End Class
この例では、PrinceXMLのオプションとIronPDFのプロパティの対応を示しています。PrinceXMLは、変換前に setter メソッド (SetPDFTitle()) を使用します。IronPDFは、レンダリング前設定に RenderingOptions プロパティを使用し、PdfDocument オブジェクトでは Encrypt() のようなレンダリング後メソッドを使用します。
主なマッピング
prince.SetJavaScript(true)→renderer.RenderingOptions.EnableJavaScript = trueprince.SetPDFTitle("...")→renderer.RenderingOptions.PdfTitle = "..."prince.SetEncrypt(true)→pdf.Encrypt("password")(IronPDF にはパスワードが必要です)
詳しくは、チュートリアルをご覧ください。
例3: HTML文字列からPDFへの変換
翻訳前 (PrinceXML):
// NuGet: Install-Package PrinceXMLWrapper
using PrinceXMLWrapper;
using System;
using System.IO;
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>";
File.WriteAllText("temp.html", html);
Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
prince.Convert("temp.html", "styled-output.pdf");
Console.WriteLine("Styled PDF created");
}
}
// NuGet: Install-Package PrinceXMLWrapper
using PrinceXMLWrapper;
using System;
using System.IO;
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>";
File.WriteAllText("temp.html", html);
Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
prince.Convert("temp.html", "styled-output.pdf");
Console.WriteLine("Styled PDF created");
}
}
Imports PrinceXMLWrapper
Imports System
Imports System.IO
Module Program
Sub Main()
Dim html As String = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>"
File.WriteAllText("temp.html", html)
Dim prince As New Prince("C:\Program Files\Prince\engine\bin\prince.exe")
prince.Convert("temp.html", "styled-output.pdf")
Console.WriteLine("Styled PDF created")
End Sub
End Module
翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
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>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("styled-output.pdf");
Console.WriteLine("Styled PDF created");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
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>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("styled-output.pdf");
Console.WriteLine("Styled PDF created");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim html As String = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>"
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("styled-output.pdf")
Console.WriteLine("Styled PDF created")
End Sub
End Class
この例では、重要な違いが強調されています。PrinceXML ではファイル入力が必要なので、変換前に一時ファイル (File.WriteAllText("temp.html", html)) を作成する必要があります。IronPDFの RenderHtmlAsPdf() は HTML 文字列を直接受け入れます。一時ファイル、クリーンアップ コード、ディスク I/O オーバーヘッドはありません。
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);
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
};
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
};
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 With {
.HtmlFragment = "<div style='text-align:center;'>Document Title</div>",
.MaxHeight = 40
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.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> タグの {html-title} プレースホルダーを使用します。
<title>Chapter 1: Introduction</title>
<title>Chapter 1: Introduction</title>
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<div>{html-title}</div>"
};
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<div>{html-title}</div>"
};
課題4:カウンター(ページ)が間違っている。
CSS カウンターの代わりにIronPDFの {total-pages} プレースホルダーを使用します。
パフォーマンス比較
| 手術 | PrinceXML | IronPDF |
|---|---|---|
| シンプルな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");
var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_book.pdf");
Dim pdf1 = PdfDocument.FromFile("chapter1.pdf")
Dim pdf2 = PdfDocument.FromFile("chapter2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("complete_book.pdf")
ウォーターマーク
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
デジタル署名
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
Dim 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");
var pdf = PdfDocument.FromFile("form.pdf");
pdf.Form.GetFieldByName("Name").Value = "John Doe";
pdf.SaveAs("filled_form.pdf");
Dim pdf = PdfDocument.FromFile("form.pdf")
pdf.Form.GetFieldByName("Name").Value = "John Doe"
pdf.SaveAs("filled_form.pdf")
機能比較の概要
| フィーチャー | PrinceXML | IronPDF |
|---|---|---|
| .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ライセンスキーを取得します
コードの変更
PrinceXMLWrapperNuGetパッケージを削除しますIronPdfNuGetパッケージをインストールします- 名前空間のインポートを更新する
Princeインスタンス化をChromePdfRendererに置き換えますprince.Convert()をRenderHtmlFileAsPdf()またはRenderHtmlAsPdf()に置き換えます- セッターメソッドを
RenderingOptionsプロパティに変換します - @page CSS を
RenderingOptionsに移行します - 余白ボックスを
HtmlFooterに置き換えます - CSS カウンターを
{total-pages}プレースホルダーに変換します - HTML文字列の一時ファイル処理を削除
- アプリケーションの起動時にライセンスの初期化を追加
移行後
- HTMLファイルの変換をテストする
- HTML文字列の変換をテストする
- URL変換をテストする
- ページサイズが一致していることを確認する
- 余白が一致していることを確認する
- ヘッダーとフッターをテストする
- ページ番号を確認する
- 暗号化/セキュリティのテスト
- サーバーからPrinceのインストールを削除する
- デプロイメントスクリプトを更新する

