如何用 C# 从 PeachPDF 迁移到 IronPDF
从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许可配置
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";确定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;核心 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);
}
}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");
}
}本例展示了两个库之间的根本区别。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);
}
}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");
}
}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);
}
}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");
}
}本例显示了一个关键的架构差异。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();返回类型更改
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;页眉/页脚属性更改
// 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>"
};方法名称更改
| 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");使用 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");密码保护
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");数字签名
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");异步操作
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");功能对比摘要
| 特征 | 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);问题 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 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 输出是否符合预期
- 测试带有页码的页眉/页脚渲染效果
- 根据需要添加新功能(安全、水印、合并)






