跳至页脚内容
迁移指南

如何用 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对比

功能/特点PeachPDFIronPDF
实施纯 .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
SHELL

许可配置

// 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
$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;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

核心 API 映射

PeachPDFIronPDF备注
<代码>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.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

本例展示了两个库之间的根本区别。PeachPDF使用 HtmlToPdfConverterConvert() 方法,该方法返回 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.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

本例显示了一个关键的架构差异。PeachPDF的页眉和页脚使用简单的字符串属性(converter.Headerconverter.Footer)。 IronPdf 使用分配给 RenderingOptions.HtmlHeaderRenderingOptions.HtmlFooterHtmlHeaderFooter 对象。

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
$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;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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>" 
};
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

方法名称更改

PeachPDFIronPDF
<代码>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
$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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

功能对比摘要

特征PeachPDFIronPDF
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
$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 添加软件包 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 的兼容性。

探索完整的IronPdf文档教程API参考,加速您的PeachPDF迁移。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。