迁移指南 如何用 C# 从 PeachPDF 迁移到 IronPDF 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 工作流程转换为一个全功能的 PDF 解决方案,该解决方案具有现代 Chromium 渲染、高级安全选项和广泛的操作功能。 为什么要从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 条款) 商业翻译 用户群 小型项目 大型(下载量超过 40M) 支持 社区驱动 专业,提供专门支持 HTML 渲染 基本的 完整的 Chromium CSS支持 有限的 完整的 CSS3 JavaScript语言 基本的 完整的 ES2024 数字签名 否 是 PDF/A合规性 否 是 文档 有限的 广泛 开发状态 开发中 成熟、稳定的版本 IronPDF 凭借更广泛的功能脱颖而出,不仅支持 HTML 到 PDF 的转换,还支持 OCR、水印和其他高级功能。 其专业的支持结构是一个绝对优势,可以快速解决开发人员面临的问题。 对于计划在 2025 年和 2026 年之前采用 .NET 10 和 C# 14 的团队,IronPDF 可提供全面的功能和积极的维护,确保长期稳定性和与现代 .NET Framework 的兼容性。 开始之前 前提条件 .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的用途 # AuditPeachPDFusage in codebase grep -r "using PeachPDF" --include="*.cs" . grep -r "HtmlToPdfConverter\|Convert\|ConvertUrl" --include="*.cs" . # AuditPeachPDFusage 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) URL 至 PDF converter.Header renderer.RenderingOptions.HtmlHeader 标题内容 converter.Footer renderer.RenderingOptions.HtmlFooter 页脚内容 File.WriteAllBytes(path,pdf) pdf.SaveAs(路径) 保存文件 pdf (byte[]) pdf.BinaryData 获取字节 PdfReader.LoadFromFile(path) PdfDocument.FromFile(路径) 加载 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 After (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使用带有 RenderHtmlAsPdf() 的 ChromePdfRenderer 对象,该对象返回一个带有内置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 After (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 After (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 类需要使用 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 基本的 完整的 Chromium URL 至 PDF 有限的 是 CSS 网格/Flexbox 否 是 JavaScript 有限的 完整的 ES2024 合并 PDF 是 是 拆分 PDF 有限的 是 水印 有限的 完整的 HTML 页眉/页脚 基本的 完整的 HTML 数字签名 否 是 PDF/A 否 是 表格填写 有限的 是 文本提取 基本的 是 图像提取 否 是 异步支持 有限的 是 跨平台 未知 是 常见迁移问题 问题 1:不同的 API 模式 问题:PeachPDF 使用字节数组输出的转换器模式;IronPDF使用 PdfDocument 输出的呈现器模式。 解决方案: //PeachPDFpattern var converter = new HtmlToPdfConverter(); var pdf = converter.Convert(html); File.WriteAllBytes(path, pdf); //IronPDFpattern var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs(path); //PeachPDFpattern var converter = new HtmlToPdfConverter(); var pdf = converter.Convert(html); File.WriteAllBytes(path, pdf); //IronPDFpattern 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 使用对象属性。 解决方案:使用 HtmlFragment 属性将 HTML 字符串包裹在 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 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已发布2026年2月1日 如何用 C# 从 ZetPDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 ZetPDF 到 IronPDF 的迁移。从基于坐标的库转换到现代的 HTML 到 PDF 解决方案。包括 HTML 转换、合并 PDF 和移除 PDFSharp 依赖性的代码示例。 阅读更多 已发布2026年2月1日 如何用 C# 从 Scryber.Core 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 Scryber.Core 迁移到 IronPDF 的方法。从自定义 XML/HTML 解析转换到现代 Chromium 渲染器。包括 HTML 转换、URL 呈现和替换专有绑定的代码示例。 阅读更多 已发布2026年2月1日 如何用 C# 从 XFINIUM.PDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 XFINIUM.PDF 到 IronPDF 的迁移。从基于坐标的手动定位切换到声明式 HTML/CSS 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多 如何用 C# 从 Playwright 迁移到 IronPDF如何用 C# 从 PDFView4NET 迁移...
已发布2026年2月1日 如何用 C# 从 ZetPDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 ZetPDF 到 IronPDF 的迁移。从基于坐标的库转换到现代的 HTML 到 PDF 解决方案。包括 HTML 转换、合并 PDF 和移除 PDFSharp 依赖性的代码示例。 阅读更多
已发布2026年2月1日 如何用 C# 从 Scryber.Core 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 Scryber.Core 迁移到 IronPDF 的方法。从自定义 XML/HTML 解析转换到现代 Chromium 渲染器。包括 HTML 转换、URL 呈现和替换专有绑定的代码示例。 阅读更多
已发布2026年2月1日 如何用 C# 从 XFINIUM.PDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 XFINIUM.PDF 到 IronPDF 的迁移。从基于坐标的手动定位切换到声明式 HTML/CSS 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多