How to Convert XAML to PDF in NET MAUI | IronPDF
PeachPDFからIronPDFに移行することで、包括的な機能、活発な開発、プロフェッショナルなサポートを備えたエンタープライズグレードのPDF生成にアクセスできます。 このガイドは、PeachPDF の プレ-1.0非同期 HTML-to-PDF ワークフローから、Chromium レンダリング、セキュリティ設定、およびドキュメント操作 API を備えたより完全な機能 PDF ソリューションへのステップバイステップの移行パスを提供します。
なぜPeachPDFからIronPDFに移行するのか
PeachPDFを理解する
PeachPDFは、HTMLをPDFに変換する必要がある開発者向けに設計された、.NETエコシステムの比較的新しい参入者です。 ライブラリとして、PeachPDFは純粋な.NET実装を約束し、外部プロセスに依存しないことで差別化を図り、.NETがサポートされているプラットフォーム間でシームレスに統合できることを保証します。 この特徴により、PeachPDF は、軽量でマネージドなライブラリソリューションをお探しのプロジェクトにとって魅力的な選択肢となります。
PeachPDFは、その可能性にもかかわらず、まだ開発中であり、エキサイティングな可能性と注目すべき制限の両方が浮き彫りになっています。 PeachPDFは、純粋な.NET Coreを採用しているため、多様な環境での簡単な導入が約束されており、魅力的です。 しかし、ユーザーベースやコミュニティ主導のサポートが少ないため、採用が限られることにもつながります。
PeachPDFの限界について
PeachPDFは単一のメンテナーによる、1.0未満 for .NETライブラリ(最新jhaygood86によってリリースされています。 成熟性、機能、および確立されたソリューションのサポートが欠けています。 移行する主な理由
-
**プレ-1.0 機能セット:**ピーチPDFには組み込まれたデジタル署名、PDF/A 準拠、OCR、フォーム入力、またはページレベルのヘッダー/フッター API はありません。
-
JavaScriptエンジン不要: PeachPDFは
PeachPDF.PdfSharpCoreに基づいたレイアウトレンダラーであり、ブラウザではありません; スクリプトと複雑な Grid/Flexbox レイアウトは実行されません。 -
net8.0のみ: このパッケージはnet8.0をターゲットにしています; 古い .NET Framework / .NET 6 プロジェクトはアップグレードするか、別のライブラリを選ぶ必要があります。 -
小規模なコミュニティ: 単一 GitHub 管理者、限られたドキュメント、限られたサンプル。
-
エンタープライズサポートがない: 商用サポートや SLA オプションがありません。
PeachPDFとIronPDFの比較
| 機能/特徴 | ピーチPDF | IronPDF |
|---|---|---|
| 実装 | ピュアマネージド.NET(PeachPDF.PdfSharpCore + SixLabors上) | 組み込み Chromium ランタイムで管理 |
| ライセンス | BSD-3-Clause | 商用 |
| ターゲットフレームワーク | net8.0のみ | .NET Framework 4.6.2+, .NET 6/7/8 |
| ユーザーベース | 小規模(1.0未満、0.7.26、2025年10月リリース) | 大規模 |
| サポート | コミュニティ主導(単一のメンテナー、jhaygood86) | プロフェッショナルな専任サポート |
| HTMLレンダリング。 | PdfSharpCore に基づく HTML + CSS レイアウトエンジン | 完全なChromium |
| CSSサポート | HTML+CSSのサブセット、ウェブフォント、@font-face | 完全なCSS3 |
| JavaScript(JavaScript | 実行されていません | フルES2024 |
| デジタル署名。 | なし | はい |
| PDF/Aコンプライアンス | なし | はい |
| ドキュメント | 制限付き (単一 README) | 広範囲 |
| 開発ステータス | 1.0未満(0.7.26、2025年10月) | 成熟した安定したリリース |
IronPDFはHTMLからPDFへの変換だけでなく、OCR、透かし、その他の高度な機能をサポートし、より幅広い機能を備えています。 そのプロフェッショナルなサポート構造により、開発者が直面する問題の迅速な解決への経路を提供します。
現代の .NET を採用しているチーム向けに、IronPDF は包括的な機能と積極的なメンテナンスを提供し、現在の .NET バージョン全体での長期安定性をサポートします。
始める前に
前提条件
- .NET環境: .NET Framework 4.6.2+ または.NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGetアクセス: NuGetパッケージをインストールする機能
- IronPDFライセンス: IronPDFからライセンスキーを取得します。
NuGetパッケージの変更
# Remove PeachPDF
dotnet remove package PeachPDF
# Install IronPDF
dotnet add package IronPdf
ライセンス構成
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"PeachPDFの使用方法を特定する
# AuditピーチPDFusage in codebase
grep -r "using PeachPDF" --include="*.cs" .
grep -r "PdfGenerator\|PdfGenerateConfig\|GeneratePdf" --include="*.cs" .
完全な API リファレンス
名前空間の変更
// Before: PeachPDF
using PeachPDF;
using PeachPDF.PdfSharpCore;
using System.IO;
using System.Threading.Tasks;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;Imports IronPdf
Imports IronPdf.Rendering
Imports System.IO
Imports System.Threading.Tasksコア API マッピング
| ピーチPDF | IronPDF |
|---|---|
new PdfGenerator() | new ChromePdfRenderer() |
await generator.GeneratePdf(html, config) | renderer.RenderHtmlAsPdf(html) |
document.Save(stream) | pdf.SaveAs(path) |
memStream.ToArray() | pdf.BinaryData |
new PdfGenerateConfig { NetworkAdapter = new HttpClientNetworkAdapter(...) } | renderer.RenderUrlAsPdf(url) |
config.PageSize, config.PageOrientation | renderer.RenderingOptions.PaperSize, .PaperOrientation |
ソースHTMLに埋め込む(CSS position: fixed) | RenderingOptions.HtmlHeader / HtmlFooter |
| サポートされていません | PdfDocument.FromFile(path) |
| サポートされていません | PdfDocument.Merge(pdfs) / pdf.AppendPdf(...) |
コード移行の例
例1: HTML文字列からPDFへの変換
翻訳前 (PeachPDF):
using PeachPDF;
using PeachPDF.PdfSharpCore;
using System.IO;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var html = "<html><body><h1>Hello World</h1></body></html>";
var config = new PdfGenerateConfig
{
PageSize = PageSize.Letter,
PageOrientation = PageOrientation.Portrait
};
var generator = new PdfGenerator();
var document = await generator.GeneratePdf(html, config);
using var stream = File.Create("output.pdf");
document.Save(stream);
}
}Imports PeachPDF
Imports PeachPDF.PdfSharpCore
Imports System.IO
Imports System.Threading.Tasks
Module Program
Async Function Main() As Task
Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
Dim config As New PdfGenerateConfig With {
.PageSize = PageSize.Letter,
.PageOrientation = PageOrientation.Portrait
}
Dim generator As New PdfGenerator()
Dim document = Await generator.GeneratePdf(html, config)
Using stream As FileStream = File.Create("output.pdf")
document.Save(stream)
End Using
End Function
End Module翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim html = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End Classこの例は、両方のライブラリ間の根本的な違いを示します。 PeachPDFはStreamに書き込むドキュメントを返します。 IronPDFはPdfDocumentオブジェクトを返します。
IronPDFのアプローチの実用的な利点:FileStreamなしでファイルパスを直接受け取ります。 さらなる例については HTML to PDF ドキュメント を参照してください。
例2: URLからPDFへの変換
翻訳前 (PeachPDF):
//ピーチPDFhas no ConvertUrl-style helper; URL fetching is wired via
// HttpClientNetworkAdapter and passing null HTML so the engine fetches the page.
using PeachPDF;
using PeachPDF.Network;
using PeachPDF.PdfSharpCore;
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var http = new HttpClient();
var config = new PdfGenerateConfig
{
PageSize = PageSize.Letter,
NetworkAdapter = new HttpClientNetworkAdapter(http, new Uri("https://www.example.com"))
};
var generator = new PdfGenerator();
var document = await generator.GeneratePdf(null, config);
using var stream = File.Create("webpage.pdf");
document.Save(stream);
}
}
翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var url = "https://www.example.com";
var pdf = renderer.RenderUrlAsPdf(url);
pdf.SaveAs("webpage.pdf");
}
}Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim url = "https://www.example.com"
Dim pdf = renderer.RenderUrlAsPdf(url)
pdf.SaveAs("webpage.pdf")
End Sub
End ClassPeachPDF にはファーストクラスのURLからPDFへヘルパーがありません; エンジンがページをフェッチするように、構成のnull HTMLを渡します。 IronPDFはRenderUrlAsPdf(url)を直接公開しています。ピーチPDFはJavaScriptを実行しないため、シングルページアプリケーションと動的コンテンツは通常ネットワークアダプタルートを介して正しくレンダリングされません;IronPDFの Chromium エンジンは最新の CSS とJavaScriptを処理します。 詳しくは、チュートリアルをご覧ください。
例3: ヘッダーとフッターを追加する
翻訳前 (PeachPDF):
//ピーチPDFv0.7.x has no header/footer API. The closest approach is
// to embed the header/footer markup directly inside the source HTML
// using CSS positioning.
using PeachPDF;
using PeachPDF.PdfSharpCore;
using System.IO;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var html = @"
<html><head><style>
.header { position: fixed; top: 0; left: 0; right: 0; text-align:center; }
.footer { position: fixed; bottom: 0; left: 0; right: 0; text-align:center; }
</style></head>
<body>
<div class='header'>My Header</div>
<h1>Document Content</h1>
<div class='footer'>Footer text</div>
</body></html>";
var config = new PdfGenerateConfig { PageSize = PageSize.Letter };
var generator = new PdfGenerator();
var document = await generator.GeneratePdf(html, config);
using var stream = File.Create("document.pdf");
document.Save(stream);
}
}
翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center'>My Header</div>" };
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center'>Page {page}</div>" };
var html = "<html><body><h1>Document Content</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("document.pdf");
}
}Imports IronPdf
Imports IronPdf.Rendering
Imports System
Module Program
Sub Main()
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {.HtmlFragment = "<div style='text-align:center'>My Header</div>"}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter() With {.HtmlFragment = "<div style='text-align:center'>Page {page}</div>"}
Dim html As String = "<html><body><h1>Document Content</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("document.pdf")
End Sub
End Moduleこの例は、重要なアーキテクチャの違いを示しています。 PeachPDFはPdfGenerateConfigでヘッダー/フッターAPIを公開していないので、ページChromeはCSSポジショニングを使用してソースHTML内に収める必要があります。 IronPDFはRenderingOptions.HtmlFooterに割り当て、ページのChromeと文書のコンテンツを分離します。
IronPDFのアプローチでは、ヘッダー/フッターのサイズ制御のための{total-pages}プレースホルダーをサポートします。
IronPDFに必要な追加の名前空間に注意してください: HtmlHeaderFooterクラスに必要です。
重要な移行に関する注意事項
ジェネレーター/レンダラークラスの変更
PeachPDFはPdfGenerator + PdfGenerateConfigペアを使用します; IronPDFは単一のChromePdfRendererを使用します:
// PeachPDF
var config = new PdfGenerateConfig { PageSize = PageSize.Letter };
var generator = new PdfGenerator();
// IronPDF
var renderer = new ChromePdfRenderer();' PeachPDF
Dim config As New PdfGenerateConfig With {.PageSize = PageSize.Letter}
Dim generator As New PdfGenerator()
' IronPDF
Dim renderer As New ChromePdfRenderer()非同期 vs 同期、およびリターンタイプ
PeachPDFのStreamを受け取るドキュメントを返します。 IronPDFのPdfDocumentを返します:
// PeachPDF: async, save to a Stream
var document = await generator.GeneratePdf(html, config);
using var fs = File.Create("output.pdf");
document.Save(fs);
// IronPDF: synchronous PdfDocument object
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Or get bytes: byte[] bytes = pdf.BinaryData;Imports System.IO
' PeachPDF: async, save to a Stream
Dim document = Await generator.GeneratePdf(html, config)
Using fs As FileStream = File.Create("output.pdf")
document.Save(fs)
End Using
' IronPDF: synchronous PdfDocument object
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
' Or get bytes: Dim bytes As Byte() = pdf.BinaryDataヘッダー/フッターのプロパティの変更
// PeachPDF: no header/footer API -- embed in source HTML
// (e.g. via CSS position:fixed)
// IronPDF: HtmlHeaderFooter objects
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<div>Header</div>"
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<div>Footer</div>"
};' PeachPDF: no header/footer API -- embed in source HTML
' (e.g. via CSS position:fixed)
' IronPDF: HtmlHeaderFooter objects
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
.HtmlFragment = "<div>Header</div>"
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter() With {
.HtmlFragment = "<div>Footer</div>"
}メソッド名の変更
| ピーチPDF | IronPDF |
|---|---|
await generator.GeneratePdf(html, config) | renderer.RenderHtmlAsPdf(html) |
NetworkAdapter = new HttpClientNetworkAdapter(...) + GeneratePdf(null, config) | renderer.RenderUrlAsPdf(url) |
document.Save(stream) | pdf.SaveAs(path) |
移行後の新機能
IronPDFに移行すると、PeachPDFでは提供できない機能が得られます:
PDFマージ
var pdf1 = PdfDocument.FromFile("doc1.pdf");
var pdf2 = PdfDocument.FromFile("doc2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
HTMLによるウォーターマーク
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark("<div style='color: red; font-size: 48pt;'>DRAFT</div>");
pdf.SaveAs("watermarked.pdf");Dim pdf = PdfDocument.FromFile("document.pdf")
pdf.ApplyWatermark("<div style='color: red; font-size: 48pt;'>DRAFT</div>")
pdf.SaveAs("watermarked.pdf")パスワード保護
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SaveAs("protected.pdf");Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>")
pdf.SecuritySettings.OwnerPassword = "owner123"
pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint
pdf.SaveAs("protected.pdf")デジタル署名
using IronPdf.Signing;
var pdf = PdfDocument.FromFile("document.pdf");
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningReason = "Document Approval",
SigningLocation = "New York"
};
pdf.Sign(signature);
pdf.SaveAs("signed.pdf");Imports IronPdf.Signing
Dim pdf = PdfDocument.FromFile("document.pdf")
Dim signature = New PdfSignature("certificate.pfx", "password") With {
.SigningReason = "Document Approval",
.SigningLocation = "New York"
}
pdf.Sign(signature)
pdf.SaveAs("signed.pdf")非同期オペレーション
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Async PDF</h1>");
pdf.SaveAs("async_output.pdf");Dim renderer As New ChromePdfRenderer()
Dim pdf = Await renderer.RenderHtmlAsPdfAsync("<h1>Async PDF</h1>")
pdf.SaveAs("async_output.pdf")機能比較の概要
| フィーチャー | ピーチPDF | IronPDF |
|---|---|---|
| HTMLからPDFへ | PdfSharpCore ベースのレイアウト | 完全なChromium |
| URLからPDFへ | HttpClientNetworkAdapter経由(JSなし) | はい |
| CSSグリッド/フレックスボックス | 部分的 / 保証されていません | はい |
| JavaScript | 実行されていません | フルES2024 |
| PDFのマージ | いいえ (HTML→PDF のみ) | はい |
| PDFの分割 | なし | はい |
| 透かし | HTML 経由で手動 | フルHTML |
| ヘッダー/フッター | HTML/CSS 経由で手動 | フルHTML |
| デジタル署名 | なし | はい |
| PDF/A | なし | はい |
| フォーム入力 | なし | はい |
| テキスト抽出 | なし | はい |
| 画像抽出 | なし | はい |
| 非同期サポート | 非同期専用 API | はい |
| クロスプラットフォーム | net8.0(Windows / Linux / macOS) | はい |
よくある移行の問題
課題1: 異なるAPIパターン
問題: PeachPDFはPdfGenerateConfig(設定)を分離しており、非同期です; IronPDFは単一のPdfDocumentを返します。
ソリューション:
//ピーチPDFpattern (async, stream-out)
var config = new PdfGenerateConfig { PageSize = PageSize.Letter };
var generator = new PdfGenerator();
var document = await generator.GeneratePdf(html, config);
using var fs = File.Create(path);
document.Save(fs);
//IronPDFpattern
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(path);
問題 2: 保存先がパスではなくストリームをターゲット
問題: PeachPDFのStreamのみを受け取ります; IronPDFのpdf.SaveAs(path)はパス文字列を受け取ります。
解決策: pdf.SaveAs("file.pdf")を直接使用します。
問題 3: 既存 PDF の操作がない
**問題:**ピーチPDFは HTML-to-PDF のみです; 既存の PDF をロード、マージ、分割、編集することはできません。
解決策: マイグレート後、これらの操作をIronPDFのpdf.AppendPdfに置き換えます。
移行チェックリスト
移行前
- コードベースでのPeachPDFの使用状況を監査する
- カスタム構成を文書化する
- すべてのヘッダー/フッターの実装をメモします
- IronPDFからIronPDFライセンスキーを取得します
- まずはIronPDFの試用ライセンスでテストしてください
パッケージの変更
PeachPDFNuGetパッケージの削除IronPdfNuGetパッケージをインストール:dotnet add package IronPdf
コードの変更
- 名前空間のインポートを更新(
using PeachPDF;→using IronPdf;) - ヘッダー/フッターの機能のために
using IronPdf.Rendering;を追加 PdfGenerator+ChromePdfRendererに置き換えるRenderHtmlAsPdfAsync)に置き換えるHttpClientNetworkAdapter+renderer.RenderUrlAsPdf(url)に置き換えるpdf.SaveAs(path)に置き換える- HTML埋め込みのヘッダー/フッターを
HtmlFooterオブジェクトに置き換えます - アプリケーションの起動時にライセンスの初期化を追加
移行後
- HTMLレンダリング品質をテストする
- PDF出力が期待値と一致していることを確認
- ページ番号付きのヘッダー/フッターのレンダリングをテストする
- 必要に応じて新しい機能(セキュリティ、透かし、結合)を追加します
PeachPDFは、その所有者の登録商標です。 このサイトは、PeachPDFと提携しておらず、後援または推奨もされていません。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。)}]

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