如何用 C# 从 PeachPDF 迁移到 IronPDF
从PeachPDF迁移到 IronPdf:完整的 C# 迁移指南。
从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 的兼容性。
开始之前
前提条件
1..NET环境:.NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+ 2.NuGet 访问:安装 NuGet 软件包的能力 3.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许可配置
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IRON VB CONVERTER ERROR developers@ironsoftware.com确定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" .完整的 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;IRON VB CONVERTER ERROR developers@ironsoftware.com核心 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);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com本例展示了两个库之间的根本区别。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);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comPeachPDF 使用 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);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com本例显示了一个关键的架构差异。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();IRON VB CONVERTER ERROR developers@ironsoftware.com返回类型更改
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;IRON VB CONVERTER ERROR developers@ironsoftware.com页眉/页脚属性更改
// 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>"
};IRON VB CONVERTER ERROR developers@ironsoftware.com方法名称更改
| 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");CONVERTER NOT RUNNING使用 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");IRON VB CONVERTER ERROR developers@ironsoftware.com密码保护
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");IRON VB CONVERTER ERROR developers@ironsoftware.com数字签名
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");IRON VB CONVERTER ERROR developers@ironsoftware.com异步操作
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");IRON VB CONVERTER ERROR developers@ironsoftware.com功能对比摘要
| 特征 | 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);IRON VB CONVERTER ERROR developers@ironsoftware.com问题 2:保存方法差异
问题:PeachPDF需要 File.WriteAllBytes();IronPDF内置<代码>SaveAs()</代码功能。
解决方案:将 File.WriteAllBytes("path", pdf) 替换为 pdf.SaveAs("path") 。
问题 3:页眉/页脚对象
问题:PeachPDF使用字符串属性; IronPdf 使用对象属性。
解决方案:使用 HtmlFragment 属性将 HTML 字符串包裹在 HtmlHeaderFooter 对象中。
迁移清单
迁移前
- [审核PeachPDF在代码库中的使用情况
- [ ] 记录自定义配置
- [ ] 注意所有页眉/页脚的实现
- [ ] 从 ironpdf.com 获取IronPDF许可证密钥
- [ ] 先使用 IronPdf 试用版许可证进行测试
软件包变更
- [ ] 删除
PeachPDFNuGet 软件包 - [ ] 安装
IronPDFNuGet 软件包:<代码>dotnet 添加软件包 IronPdf
代码更改
- [ ] 更新命名空间导入(
使用 PeachPDF;→使用 IronPdf;) - [ ] 为页眉/页脚功能添加
using IronPdf.Rendering; - [ ] 将
HtmlToPdfConverter替换为ChromePdfRenderer - [ ] 将<代码>converter.Convert(html)</代码替换为<代码>renderer.RenderHtmlAsPdf(html)</代码。
- [ ] 将<代码>converter.ConvertUrl(url)</代码替换为<代码>renderer.RenderUrlAsPdf(url)</代码。
- [ ] 将<代码>File.WriteAllBytes(path,pdf)</代码替换为<代码>pdf.SaveAs(路径)</代码。
- [ ] 将
converter.Header/Footer替换为RenderingOptions.HtmlHeader/HtmlFooter对象。 - [ ] 在应用程序启动时添加许可证初始化
后迁移
- [ ] 测试 HTML 渲染质量
- [ ] 验证 PDF 输出是否符合预期
- [ ] 测试带页码的页眉/页脚渲染
- [ ] 根据需要添加新功能(安全、水印、合并
结论
在PeachPDF和IronPDF之间做出选择时,最终取决于项目的具体需求。PeachPDF采用纯 .NET 实现,是需要轻量级开源解决方案的项目的理想选择,无需大量功能集或支持。 不过,IronPDF 在更广泛的功能、重要的社区支持和专业协助方面具有明显的优势,是希望获得可靠、商业解决方案和持续支持的企业的最佳选择。
本次迁移的主要变化有 1.转换器类:<代码>HtmlToPdfConverter</代码> → <代码>ChromePdfRenderer</代码 2.HTML 方法:<代码>Convert(html)</代码> → <代码>RenderHtmlAsPdf(html)</代码 3.URL 方法:<代码>ConvertUrl(url)</代码> → <代码>RenderUrlAsPdf(url)</代码 4.返回类型:byte[] → PdfDocument 5.保存方法:<代码>File.WriteAllBytes()</代码> → <代码>pdf.SaveAs()</代码 6.页眉/页脚:字符串属性 → HtmlHeaderFooter 对象 7.命名空间:using PeachPDF; → using IronPdf; + using IronPdf.Rendering; 8.新功能:数字签名、PDF/A 合规性、完全 CSS3/JavaScript 支持等
IronPDF 可提供企业级 PDF 生成功能,其全面的功能、积极的开发和专业的支持是PeachPDF无法提供的。IronPDF 拥有庞大的用户群和丰富的文档,可确保长期稳定性以及与现代 .NET Framework 的兼容性。






