MIGRATION GUIDES How to Migrate from PeachPDF to IronPDF in C# Curtis Chau 發表日期:2026年2月1日 下載 IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 開始免費試用 法學碩士副本 法學碩士副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 從 PeachPDF 遷移到 IronPDF 可以獲得企業級 PDF 生成功能,包括全面的功能、積極的開發和專業的支援。 本指南提供了一個完整的、逐步的遷移路徑,將您的基本 HTML 到 PDF 工作流程轉換為具有現代 Chromium 渲染、高級安全選項和廣泛操作功能的全功能 PDF 解決方案。 為什麼要從 PeachPDF 遷移到 IronPDF 了解 PeachPDF PeachPDF 是 .NET 生態系統中相對較新的產品,專為需要將 HTML 轉換為 PDF 的開發人員而設計。 作為一款函式庫,PeachPDF 承諾提供純 .NET 實現,其獨特之處在於不依賴外部流程,從而確保它可以無縫整合到支援 .NET 的平台上。 這項特性使 PeachPDF 成為尋求輕量級、可管理庫解決方案的專案的理想選擇。 儘管 PeachPDF 具有很大的潛力,但它仍在開發中,這不僅展現了令人興奮的可能性,也暴露出明顯的限制。 PeachPDF 仍然具有吸引力,因為它基於純 .NET Core,這意味著它可以在各種環境中輕鬆部署。 然而,這也意味著其普及程度有限,使用者群體較小,且主要依賴社群支持。 PeachPDF 的局限性 PeachPDF 是一個相對較新、知名度較低的 PDF 庫,它缺乏成熟解決方案所具備的功能、功能和支援。 遷移的主要原因: 1.功能集有限: PeachPDF 缺乏數位簽章、PDF/A 合規性和複雜的文字擷取等進階功能。 2.小型社群:文件、範例和社群支援有限。 由於使用者群體較小,社群支援可能也比較稀少,因此很難獲得協助或找到全面的文件。 3.不確定的未來:沒有既定業績記錄的新圖書館有被採用的風險。 4.基本 HTML 支援:有限的 CSS 和 JavaScript 渲染功能。 5.無企業支援:無專業支援或 SLA 選項。 PeachPDF 與 IronPDF 對比 特徵/特性 PeachPDF IronPDF 執行 純.NET 具有廣泛的兼容性 執照 開源(BSD-3條款) 商業的 使用者群 小的 大型(下載量超過 4000 萬次) 支援 社區驅動 專業人員提供專屬支持 HTML渲染 基本的 全鉻 CSS 支援 有限的 完整的 CSS3 JavaScript 基本的 完整版 ES2024 數位簽名 不 是的 PDF/A 合規性 不 是的 文件 有限的 廣泛的 發展狀況 開發中 成熟穩定的釋放 IronPDF 的優勢在於其更廣泛的功能,它不僅支援 HTML 到 PDF 的轉換,還支援 OCR、浮水印和其他高級功能。 其專業的支援體係是一大優勢,能夠快速解決開發人員所遇到的問題。 對於計劃在 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.com取得您的許可證密鑰。 NuGet 套件變更 # Remove PeachPDF dotnet remove package PeachPDF # Install IronPDF dotnet add package IronPdf # Remove PeachPDF dotnet remove package PeachPDF # Install IronPDF dotnet add package IronPdf SHELL 許可證配置 // Add at application startup IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; // Add at application startup IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; $vbLabelText $csharpLabel 識別 PeachPDF 使用情況 # Audit PeachPDF usage in codebase grep -r "using PeachPDF" --include="*.cs" . grep -r "HtmlToPdfConverter\|Convert\|ConvertUrl" --include="*.cs" . # Audit PeachPDF usage in codebase grep -r "using PeachPDF" --include="*.cs" . grep -r "HtmlToPdfConverter\|Convert\|ConvertUrl" --include="*.cs" . SHELL 完整 API 參考 命名空間變更 // Before: PeachPDF using PeachPDF; using System.IO; // After: IronPDF using IronPdf; using IronPdf.Rendering; // Before: PeachPDF using PeachPDF; using System.IO; // After: IronPDF using IronPdf; using IronPdf.Rendering; $vbLabelText $csharpLabel 核心 API 映射 PeachPDF IronPDF 筆記 new HtmlToPdfConverter() new ChromePdfRenderer() 建立渲染器 converter.Convert(html) renderer.RenderHtmlAsPdf(html) HTML 轉 PDF converter.ConvertUrl(url) renderer.RenderUrlAsPdf(url) PDF檔案的URL converter.Header renderer.RenderingOptions.HtmlHeader 標題內容 converter.Footer renderer.RenderingOptions.HtmlFooter 頁尾內容 File.WriteAllBytes(path, pdf) pdf.SaveAs(path) 儲存檔案 pdf (位元組數組) pdf.BinaryData 取得位元組 PdfReader.LoadFromFile(path) PdfDocument.FromFile(path) 載入PDF document.MergeWith(other) PdfDocument.Merge(pdfs) 合併PDF 程式碼遷移範例 範例 1:HTML 字串到 PDF 的轉換 之前(PeachPDF): using PeachPDF; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var html = "<html><body><h1>Hello World</h1></body></html>"; var pdf = converter.Convert(html); File.WriteAllBytes("output.pdf", pdf); } } using PeachPDF; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var html = "<html><body><h1>Hello World</h1></body></html>"; var pdf = converter.Convert(html); File.WriteAllBytes("output.pdf", pdf); } } $vbLabelText $csharpLabel (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"); } } // 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"); } } $vbLabelText $csharpLabel 這個例子展示了這兩個庫之間的根本區別。 PeachPDF 使用HtmlToPdfConverter ,其Convert()方法傳回一個byte[] ,需要使用File.WriteAllBytes()進行儲存。 IronPDF 使用ChromePdfRenderer的RenderHtmlAsPdf()方法,該方法傳回一個內建SaveAs()方法的PdfDocument物件。 IronPDF 方法的主要優點是:在儲存之前,可以對PdfDocument物件進行進一步操作(新增浮水印、合併、安全設定),而 PeachPDF 的位元組陣列是最終輸出。 IronPDF 的方法提供了更簡潔的語法和與現代 .NET 應用程式更好的整合。 請參閱HTML 轉 PDF 文件以取得完整範例。 範例 2:URL 轉 PDF 之前(PeachPDF): using PeachPDF; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var url = "https://www.example.com"; var pdf = converter.ConvertUrl(url); File.WriteAllBytes("webpage.pdf", pdf); } } using PeachPDF; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var url = "https://www.example.com"; var pdf = converter.ConvertUrl(url); File.WriteAllBytes("webpage.pdf", pdf); } } $vbLabelText $csharpLabel (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"); } } // 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"); } } $vbLabelText $csharpLabel PeachPDF 使用ConvertUrl() ,而 IronPDF 則使用RenderUrlAsPdf() 。 IronPDF 中的方法命名更具描述性——它明確地表明 URL 正在被渲染為 PDF。 這兩個庫處理 URL 到 PDF 的轉換方式類似,但 IronPDF 的完整 Chromium 引擎能夠更好地渲染具有複雜 CSS 和 JavaScript 的現代網頁。 了解更多信息,請閱讀我們的教程。 範例 3:新增頁首和頁尾 之前(PeachPDF): using PeachPDF; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); converter.Header = "<div style='text-align:center'>My Header</div>"; converter.Footer = "<div style='text-align:center'>Page {page}</div>"; var html = "<html><body><h1>Document Content</h1></body></html>"; var pdf = converter.Convert(html); File.WriteAllBytes("document.pdf", pdf); } } using PeachPDF; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); converter.Header = "<div style='text-align:center'>My Header</div>"; converter.Footer = "<div style='text-align:center'>Page {page}</div>"; var html = "<html><body><h1>Document Content</h1></body></html>"; var pdf = converter.Convert(html); File.WriteAllBytes("document.pdf", pdf); } } $vbLabelText $csharpLabel (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"); } } // 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"); } } $vbLabelText $csharpLabel 這個範例展示了一個關鍵的架構差異。 PeachPDF 使用簡單的字串屬性( converter.Header和converter.Footer )來表示頁首和頁尾。 IronPDF 使用指派給RenderingOptions.HtmlHeader和RenderingOptions.HtmlFooter HtmlHeaderFooter物件。 IronPDF 的方法更靈活HtmlHeaderFooter物件可以包含MaxHeight等額外屬性來控制頁首/頁尾的大小。請注意,這兩個庫都使用{page}作為頁碼佔位符。 IronPDF 也支援使用{total-pages}來表示總頁數。 請注意 IronPDF 所需的額外命名空間: HtmlHeaderFooter類別需要using IronPdf.Rendering; 關鍵遷移說明 轉換器類別更改 PeachPDF 使用HtmlToPdfConverter ; IronPDF 使用ChromePdfRenderer : // PeachPDF var converter = new HtmlToPdfConverter(); // IronPDF var renderer = new ChromePdfRenderer(); // PeachPDF var converter = new HtmlToPdfConverter(); // IronPDF var renderer = new ChromePdfRenderer(); $vbLabelText $csharpLabel 返回類型變更 PeachPDF 返回byte[] ; IronPDF 返回PdfDocument : // PeachPDF: Returns byte array byte[] pdf = converter.Convert(html); File.WriteAllBytes("output.pdf", pdf); // IronPDF: Returns PdfDocument object PdfDocument pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); // Or get bytes: byte[] bytes = pdf.BinaryData; // PeachPDF: Returns byte array byte[] pdf = converter.Convert(html); File.WriteAllBytes("output.pdf", pdf); // IronPDF: Returns PdfDocument object PdfDocument pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); // Or get bytes: byte[] bytes = pdf.BinaryData; $vbLabelText $csharpLabel 頁首/頁尾屬性更改 // PeachPDF: Simple string properties converter.Header = "<div>Header</div>"; converter.Footer = "<div>Footer</div>"; // IronPDF: HtmlHeaderFooter objects renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = "<div>Header</div>" }; renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter() { HtmlFragment = "<div>Footer</div>" }; // PeachPDF: Simple string properties converter.Header = "<div>Header</div>"; converter.Footer = "<div>Footer</div>"; // IronPDF: HtmlHeaderFooter objects renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = "<div>Header</div>" }; renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter() { HtmlFragment = "<div>Footer</div>" }; $vbLabelText $csharpLabel 方法名稱變更 PeachPDF IronPDF Convert(html) RenderHtmlAsPdf(html) ConvertUrl(url) RenderUrlAsPdf(url) File.WriteAllBytes() SaveAs() 遷移後的新功能 遷移到 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"); var pdf1 = PdfDocument.FromFile("doc1.pdf"); var pdf2 = PdfDocument.FromFile("doc2.pdf"); var merged = PdfDocument.Merge(pdf1, pdf2); merged.SaveAs("merged.pdf"); $vbLabelText $csharpLabel 帶有 HTML 的浮水印 var pdf = PdfDocument.FromFile("document.pdf"); pdf.ApplyWatermark("<div style='color: red; font-size: 48pt;'>DRAFT</div>"); pdf.SaveAs("watermarked.pdf"); var pdf = PdfDocument.FromFile("document.pdf"); pdf.ApplyWatermark("<div style='color: red; font-size: 48pt;'>DRAFT</div>"); pdf.SaveAs("watermarked.pdf"); $vbLabelText $csharpLabel 密碼保護 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"); 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"); $vbLabelText $csharpLabel 數位簽名 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"); 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"); $vbLabelText $csharpLabel 非同步操作 var renderer = new ChromePdfRenderer(); var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Async PDF</h1>"); pdf.SaveAs("async_output.pdf"); var renderer = new ChromePdfRenderer(); var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Async PDF</h1>"); pdf.SaveAs("async_output.pdf"); $vbLabelText $csharpLabel 功能對比總結 特徵 PeachPDF IronPDF HTML 轉 PDF 基本的 全鉻 PDF檔案的URL 有限的 是的 CSS Grid/Flexbox 不 是的 JavaScript 有限的 完整版 ES2024 合併PDF 是的 是的 拆分PDF 有限的 是的 水印 有限的 完整 HTML 頁首/頁尾 基本的 完整 HTML 數位簽名 不 是的 PDF/A 不 是的 表格填寫 有限的 是的 文字擷取 基本的 是的 影像擷取 不 是的 非同步支援 有限的 是的 跨平台 未知 是的 常見的移民問題 問題 1:不同的 API 模式 問題: PeachPDF 使用位元組數組輸出的轉換器模式; IronPDF 使用渲染器模式,輸出為 PdfDocument。 解決方案: // PeachPDF pattern var converter = new HtmlToPdfConverter(); var pdf = converter.Convert(html); File.WriteAllBytes(path, pdf); // IronPDF pattern var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs(path); // PeachPDF pattern var converter = new HtmlToPdfConverter(); var pdf = converter.Convert(html); File.WriteAllBytes(path, pdf); // IronPDF pattern var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs(path); $vbLabelText $csharpLabel 問題 2:保存方法差異 問題: PeachPDF 需要File.WriteAllBytes() ; IronPDF 內建了SaveAs() 。 解決方法:將File.WriteAllBytes("path", pdf)替換為pdf.SaveAs("path") 。 問題 3:頁首/頁尾對象 問題: PeachPDF 使用字串屬性; IronPDF 使用物件屬性。 解決方案:將 HTML 字串包裝在帶有HtmlFragment屬性的HtmlHeaderFooter物件中。 遷移清單 遷移前 審核程式碼庫中 PeachPDF 的使用情況 記錄自訂配置 注意所有頁首/頁尾的實作方式 從ironpdf.com取得 IronPDF 許可證金鑰 先使用 IronPDF 試用許可證進行測試 軟體包變更 刪除PeachPDF NuGet 套件 安裝IronPdf NuGet 套件: dotnet add package IronPdf 程式碼更改 更新命名空間導入( using PeachPDF; → using IronPdf; ) 新增using IronPdf.Rendering;以實現頁首/頁尾功能 將HtmlToPdfConverter替換為ChromePdfRenderer 將converter.Convert(html)替換為renderer.RenderHtmlAsPdf(html) 將converter.ConvertUrl(url)替換為renderer.RenderUrlAsPdf(url) 將File.WriteAllBytes(path, pdf)替換為pdf.SaveAs(path) 將converter.Header / Footer替換為RenderingOptions.HtmlHeader / HtmlFooter對象 在應用程式啟動時新增許可證初始化 移民後 測試 HTML 渲染質量 驗證 PDF 輸出是否符合預期 測試帶有頁碼的頁首/頁尾渲染效果 根據需要新增功能(安全性、浮水印、合併) Curtis Chau 立即與工程團隊聊天 技術撰稿人 Curtis Chau 擁有電腦科學學士學位(卡爾頓大學),專長於前端開發,精通 Node.js、TypeScript、JavaScript 和 React。Curtis 對製作直覺且美觀的使用者介面充滿熱情,他喜歡使用現代化的架構,並製作結構良好且視覺上吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 也有濃厚的興趣,他喜歡探索整合硬體與軟體的創新方式。在空閒時間,他喜歡玩遊戲和建立 Discord bots,將他對技術的熱愛與創意結合。 相關文章 發表日期 2026年2月1日 How to Migrate from ZetPDF to IronPDF in C# Master the migration from ZetPDF to IronPDF with this complete C# guide. Switch from a coordinate-based library to a modern HTML-to-PDF solution. Includes code examples for HTML conversion, merging PDFs, and removing PDFSharp dependencies. 閱讀更多 發表日期 2026年2月1日 How to Migrate from Scryber.Core to IronPDF in C# Master the migration from Scryber.Core to IronPDF with this complete C# guide. Switch from custom XML/HTML parsing to a modern Chromium renderer. Includes code examples for HTML conversion, URL rendering, and replacing proprietary bindings. 閱讀更多 發表日期 2026年2月1日 How to Migrate from XFINIUM.PDF to IronPDF in C# Master the migration from XFINIUM.PDF to IronPDF with this complete C# guide. Switch from manual coordinate-based positioning to declarative HTML/CSS rendering. Includes code examples for replacing graphics primitives and automatic layout. 閱讀更多 How to Migrate from Playwright to IronPDF in C#How to Migrate from PDFView4NET to ...
發表日期 2026年2月1日 How to Migrate from ZetPDF to IronPDF in C# Master the migration from ZetPDF to IronPDF with this complete C# guide. Switch from a coordinate-based library to a modern HTML-to-PDF solution. Includes code examples for HTML conversion, merging PDFs, and removing PDFSharp dependencies. 閱讀更多
發表日期 2026年2月1日 How to Migrate from Scryber.Core to IronPDF in C# Master the migration from Scryber.Core to IronPDF with this complete C# guide. Switch from custom XML/HTML parsing to a modern Chromium renderer. Includes code examples for HTML conversion, URL rendering, and replacing proprietary bindings. 閱讀更多
發表日期 2026年2月1日 How to Migrate from XFINIUM.PDF to IronPDF in C# Master the migration from XFINIUM.PDF to IronPDF with this complete C# guide. Switch from manual coordinate-based positioning to declarative HTML/CSS rendering. Includes code examples for replacing graphics primitives and automatic layout. 閱讀更多