如何用 C# 从 ZetPDF 迁移到 IronPDF
从ZetPDF迁移到 IronPDF:完整的 C# 开发人员指南。
ZetPDF 是一个用于 C# 应用程序的商业授权 PDF 库,建立在广泛使用的开源 PDFSharp 库的基础之上。 虽然ZetPDF提供了商业支持和基本的 PDF 操作功能,但它继承了 PDFSharp 基础的重大局限性。 最值得注意的是,该库依赖于基于坐标的图形编程,与现代替代工具相比,其 HTML 到 PDF 的转换能力有限。
本指南提供了从ZetPDF到IronPDF的完整迁移路径,为评估这一过渡的 .NET 专业开发人员提供了分步说明、代码比较和实用示例。
为什么要从ZetPDF迁移
ZetPDF 作为 PDFSharp 的一个分叉,继承了同样的架构限制,这限制了其在现代文档生成工作流中的有效性。 开发团队考虑迁移的主要原因包括
基于坐标的 API:ZetPDF 迫使开发人员使用精确坐标定位每个元素。 随着需求的变化,每个元素的复杂手动定位给维护带来了挑战。
有限的 CSS 支持:没有样式系统意味着每个元素都需要手动进行字体和颜色管理。
无 JavaScript 渲染功能:生成 PDF 时不能呈现动态网页内容或执行 JavaScript。
有限的独特产品:与直接免费使用 PDFSharp 相比,ZetPDF 提供的商业许可几乎没有任何令人信服的理由。
手动分页:必须手动计算和管理页面溢出,而不是依赖自动分页。
需要文本测量:手动计算文本包装会产生额外的开发开销。
基本问题
ZetPDF 和 PDFSharp 迫使您以精确的坐标定位每个元素:
// ZetPDF: 手册 positioning nightmare
graphics.DrawString("Name:", font, brush, new XPoint(50, 100));
graphics.DrawString("John Doe", font, brush, new XPoint(100, 100));
graphics.DrawString("Address:", font, brush, new XPoint(50, 120));
graphics.DrawString("123 Main St", font, brush, new XPoint(100, 120));
// ... hundreds of lines for a simple form// ZetPDF: 手册 positioning nightmare
graphics.DrawString("Name:", font, brush, new XPoint(50, 100));
graphics.DrawString("John Doe", font, brush, new XPoint(100, 100));
graphics.DrawString("Address:", font, brush, new XPoint(50, 120));
graphics.DrawString("123 Main St", font, brush, new XPoint(100, 120));
// ... hundreds of lines for a simple formIRON VB CONVERTER ERROR developers@ironsoftware.comIronPdf 使用 HTML/CSS--布局引擎处理一切:
// IronPDF: Simple HTML
var html = @"
<p><strong>Name:</strong> John Doe</p>
<p><strong>Address:</strong> 123 Main St</p>";
var pdf = renderer.RenderHtmlAsPdf(html);// IronPDF: Simple HTML
var html = @"
<p><strong>Name:</strong> John Doe</p>
<p><strong>Address:</strong> 123 Main St</p>";
var pdf = renderer.RenderHtmlAsPdf(html);IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDF与 ZetPDF:功能比较
了解架构差异有助于技术决策者评估迁移投资:
| 特征 | ZetPDF | IronPDF |
|---|---|---|
| 基于 PDFSharp | 是 | 否 |
| HTML-PDF 转换 | 有限的 | 是(全 Chromium) |
| 商业许可 | 是,永久 | 是 |
| 开源基金会 | PDFSharp(MIT 许可) | 基于 Chromium |
| CSS支持 | 否 | 完整的 CSS3 |
| JavaScript语言 | 否 | 完整的 ES2024 |
| 自动排版 | 否 | 是 |
| 自动分页 | 否 | 是 |
| 表格 | 手工绘图 | HTML <table> |
| 页眉/页脚 | 手册 | HTML/CSS |
| 水印。 | 手册代码 | 内置 |
| 合并 PDF 文件 | 有限的 | 是 |
| 拆分 PDF 文件 | 有限的 | 是 |
| 数字签名 | 否 | 是 |
| PDF/A。 | 否 | 是 |
| 简单易用 | 缓和 | 高的 |
快速入门:ZetPDF 向IronPDF迁移。
迁移工作可以通过以下基本步骤立即开始。
步骤 1:替换 NuGet 软件包
移除 ZetPDF:
# Remove ZetPDF
dotnet remove package ZetPDF# Remove ZetPDF
dotnet remove package ZetPDF安装 IronPDF:
# Install IronPDF
dotnet add package IronPdf# Install IronPDF
dotnet add package IronPdf步骤 2:更新命名空间
用 IronPdf 命名空间替换ZetPDF命名空间:
// Before (ZetPDF)
using ZetPdf;
using ZetPdf.Drawing;
using ZetPdf.Fonts;
// After (IronPDF)
using IronPdf;// Before (ZetPDF)
using ZetPdf;
using ZetPdf.Drawing;
using ZetPdf.Fonts;
// After (IronPDF)
using IronPdf;IRON VB CONVERTER ERROR developers@ironsoftware.com步骤 3:初始化许可证
在应用程序启动时添加许可证初始化:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"代码迁移示例
将HTML转换为PDF
HTML 转 PDF 操作演示了这些 .NET PDF 库之间的 API 差异。
ZetPDF方法:
// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
converter.ConvertHtmlToPdf(htmlContent, "output.pdf");
Console.WriteLine("PDF created successfully");
}
}// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
converter.ConvertHtmlToPdf(htmlContent, "output.pdf");
Console.WriteLine("PDF created successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPdf 方法:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comZetPDF 使用<代码>HtmlToPdfConverter</代码和<代码>ConvertHtmlToPdf()</代码直接写入文件路径。IronPDF提供了<代码>ChromePdfRenderer</代码与<代码>RenderHtmlAsPdf()</代码,后者返回一个 PdfDocument 对象,使您可以更灵活地处理输出--您可以保存到文件、获取二进制数据或在保存前执行其他操作。
有关 HTML 转 PDF 的高级应用场景,请参阅 HTML 转 PDF 指南。
将 URL 转换为 PDF
URL 到 PDF 的转换清楚地显示了模式差异。
ZetPDF方法:
// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var url = "https://www.example.com";
converter.ConvertUrlToPdf(url, "webpage.pdf");
Console.WriteLine("PDF from URL created successfully");
}
}// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var url = "https://www.example.com";
converter.ConvertUrlToPdf(url, "webpage.pdf");
Console.WriteLine("PDF from URL created successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPdf 方法:
// 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");
Console.WriteLine("PDF from URL created successfully");
}
}// 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");
Console.WriteLine("PDF from URL created successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comZetPDF 使用与<代码>ConvertUrlToPdf()</代码相同的<代码>HtmlToPdfConverter</代码类。IronPDF在<代码>ChromePdfRenderer</代码上提供了<代码>RenderUrlAsPdf()</代码功能,该功能利用完整的 Chromium 渲染引擎实现精确的网页捕获,包括 JavaScript 执行和现代 CSS。
请浏览 URL to PDF 文档,了解身份验证和自定义页眉选项。
合并多个 PDF 文件
PDF 合并显示了文档处理方式上的重大 API 差异。
ZetPDF方法:
// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var merger = new PdfMerger();
var files = new List<string> { "document1.pdf", "document2.pdf" };
merger.MergeFiles(files, "merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var merger = new PdfMerger();
var files = new List<string> { "document1.pdf", "document2.pdf" };
merger.MergeFiles(files, "merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPdf 方法:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdfs = new List<PdfDocument>
{
PdfDocument.FromFile("document1.pdf"),
PdfDocument.FromFile("document2.pdf")
};
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdfs = new List<PdfDocument>
{
PdfDocument.FromFile("document1.pdf"),
PdfDocument.FromFile("document2.pdf")
};
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comZetPDF 使用专门的<代码>PDFMerger</代码类,该类可通过 MergeFiles() 对文件路径进行操作。IronPDF使用<代码>PdfDocument.FromFile()</代码将文档加载为 PdfDocument 对象,然后使用静态<代码>PdfDocument.Merge()</代码方法将其合并。 这种面向对象的方法可以在保存之前对合并后的文档进行其他操作。
探索 IronPDF合并文档,了解更多合并选项。
基于坐标的绘图与 HTML 的对比
对于使用基于坐标图形的现有ZetPDF代码的开发人员,迁移路径包括将绘图命令转换为 HTML/CSS。
基于坐标的ZetPDF方法:
using ZetPdf;
using ZetPdf.Drawing;
var document = new PdfDocument();
var page = document.AddPage();
page.Width = XUnit.FromMillimeter(210);
page.Height = XUnit.FromMillimeter(297);
var graphics = XGraphics.FromPdfPage(page);
var titleFont = new XFont("Arial", 24, XFontStyle.Bold);
var bodyFont = new XFont("Arial", 12);
graphics.DrawString("Company Report", titleFont, XBrushes.Navy,
new XPoint(50, 50));
graphics.DrawString("This is the introduction paragraph.", bodyFont, XBrushes.Black,
new XPoint(50, 80));
graphics.DrawString("Generated: " + DateTime.Now.ToString(), bodyFont, XBrushes.Gray,
new XPoint(50, 100));
document.Save("report.pdf");using ZetPdf;
using ZetPdf.Drawing;
var document = new PdfDocument();
var page = document.AddPage();
page.Width = XUnit.FromMillimeter(210);
page.Height = XUnit.FromMillimeter(297);
var graphics = XGraphics.FromPdfPage(page);
var titleFont = new XFont("Arial", 24, XFontStyle.Bold);
var bodyFont = new XFont("Arial", 12);
graphics.DrawString("Company Report", titleFont, XBrushes.Navy,
new XPoint(50, 50));
graphics.DrawString("This is the introduction paragraph.", bodyFont, XBrushes.Black,
new XPoint(50, 80));
graphics.DrawString("Generated: " + DateTime.Now.ToString(), bodyFont, XBrushes.Gray,
new XPoint(50, 100));
document.Save("report.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDF HTML 方法:
using IronPdf;
var html = $@"
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; padding: 50px; }}
h1 {{ color: navy; }}
.date {{ color: gray; }}
</style>
</head>
<body>
<h1>Company Report</h1>
<p>This is the introduction paragraph.</p>
<p class='date'>Generated: {DateTime.Now}</p>
</body>
</html>";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("report.pdf");using IronPdf;
var html = $@"
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; padding: 50px; }}
h1 {{ color: navy; }}
.date {{ color: gray; }}
</style>
</head>
<body>
<h1>Company Report</h1>
<p>This is the introduction paragraph.</p>
<p class='date'>Generated: {DateTime.Now}</p>
</body>
</html>";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("report.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.comZetPDF 方法需要创建字体对象、计算精确的像素位置并手动管理图形上下文。 IronPdf 的方法使用网络开发人员已经熟悉的标准 HTML 和 CSS--字体、颜色和布局都通过熟悉的 CSS 属性来处理。
ZetPDFAPI 到IronPDF映射参考
这种映射通过显示直接的 API 对应关系来加速迁移:
| ZetPDF | IronPDF | 备注 |
|---|---|---|
| <代码>new PdfDocument()</ 代码 | <代码>new ChromePdfRenderer()</ 代码 | 创建呈现器 |
| <代码>document.AddPage()</代码 | 自动翻译 | 根据 HTML 创建的页面 |
| <代码>XGraphics.FromPdfPage(page)</代码 | 不适用 | 使用HTML/CSS代替 |
| <代码>graphics.DrawString()</代码 | HTML 文本元素 | <p>、<h1>等。 |
| <代码>graphics.DrawImage()</代码 | <img> 标记 | HTML 图像 |
| <代码>graphics.DrawLine()</代码 | CSS 边框 | 或 <hr> |
| <代码>graphics.DrawRectangle()</代码 | CSS border + div | HTML 框 |
| <代码>new XFont()</ 代码 | CSS font-family | 支持的网络字体 |
| <代码>XBrushes.Black</代码 | CSS <代码>颜色</代码 | 全彩支持 |
| <代码>document.Save()</代码 | <代码>pdf.SaveAs()</代码 | 保存到文件 |
| <代码>PdfReader.Open()</代码 | <代码>PdfDocument.FromFile()</代码 | 加载现有 PDF |
| <代码>HtmlToPdfConverter</代码 | <代码>ChromePdfRenderer</代码 | HTML 转换 |
| <代码>ConvertHtmlToPdf()</代码 | <代码>RenderHtmlAsPdf()</代码 | HTML 字符串到 PDF |
| <代码>ConvertUrlToPdf()</代码 | <代码>RenderUrlAsPdf()</代码 | URL 至 PDF |
| <代码>PDFMerger</代码 | <代码>PdfDocument.Merge()</代码 | 合并 PDF |
常见迁移问题和解决方案
问题 1:基于坐标的布局
ZetPDF:所有内容都需要精确的 X、Y 坐标和手动定位。
解决方案: 使用HTML/CSS流程布局。 需要绝对定位时,请使用 CSS:
.positioned-element {
position: absolute;
top: 100px;
left: 50px;
}问题 2:字体对象管理
ZetPDF: 为每个字体变体创建 XFont 对象。
解决方案:使用 CSS 字体-family-字体自动处理:
<style>
body { font-family: Arial, sans-serif; }
h1 { font-family: 'Times New Roman', serif; font-size: 24px; font-weight: bold; }
</style><style>
body { font-family: Arial, sans-serif; }
h1 { font-family: 'Times New Roman', serif; font-size: 24px; font-weight: bold; }
</style>问题 3:颜色处理
ZetPDF: 使用 XBrushes 和颜色对象。
解决方案:使用标准 CSS 颜色:
.header { color: navy; background-color: #f5f5f5; }
.warning { color: rgb(255, 0, 0); }问题 4:手动分页
ZetPDF: 跟踪 Y 位置并在内容溢出时手动创建新页面。
解决方案:IronPDF可处理自动分页。 如需明确控制,请使用 CSS:
.section { page-break-after: always; }
.keep-together { page-break-inside: avoid; }问题 5:表格创建
ZetPDF: 需要手动绘制矩形、线条和文本定位。
解决方案:使用标准的 HTML 表格和 CSS 样式:
<table style="border-collapse: collapse; width: 100%;">
<tr>
<th style="border: 1px solid black; padding: 8px;">Header</th>
</tr>
<tr>
<td style="border: 1px solid black; padding: 8px;">Data</td>
</tr>
</table><table style="border-collapse: collapse; width: 100%;">
<tr>
<th style="border: 1px solid black; padding: 8px;">Header</th>
</tr>
<tr>
<td style="border: 1px solid black; padding: 8px;">Data</td>
</tr>
</table>ZetPDF迁移清单
迁移前任务
审核您的代码库,确定所有ZetPDF使用情况:
grep -r "using ZetPDF" --include="*.cs" .
grep -r "HtmlToPdfConverter\|PdfMerger\|XGraphics" --include="*.cs" .grep -r "using ZetPDF" --include="*.cs" .
grep -r "HtmlToPdfConverter\|PdfMerger\|XGraphics" --include="*.cs" .需要转换为 HTML 的基于坐标的绘图代码文档。 注意字体和颜色的使用模式。 将布局结构映射为 HTML 对应内容。
代码更新任务
1.删除ZetPDFNuGet 软件包 2.安装 IronPdf NuGet 软件包 3.将名称空间导入从 ZetPDF 更新为 IronPdf 4.将<代码>HtmlToPdfConverter</代码替换为 ChromePdfRenderer 5.将<代码>ConvertHtmlToPdf()</代码调用转换为<代码>RenderHtmlAsPdf()</代码+ SaveAs() 6.将<代码>ConvertUrlToPdf()</代码调用转换为<代码>RenderUrlAsPdf()</代码+ SaveAs() 7.将 PdfMerger.MergeFiles() 替换为<代码>PdfDocument.Merge()</代码。 8.将 DrawString() 调用转换为 HTML 文本元素 9.将 XFont 转换为 CSS font-family 10.用 CSS 颜色替换 XBrushes 11.在启动时添加 IronPdf 许可证初始化功能
迁移后测试
迁移后,验证这些方面:
- 比较可视化输出,确保外观匹配或改进
- 通过 CSS 样式验证字体是否达到预期效果
- 测试自动分页是否正确分页
- 验证图片的位置和显示是否正确
- 测试 PDF 合并操作产生正确的输出
- 确认所有现有功能都能在新实施中使用
迁移到IronPDF的主要优势
从ZetPDF迁移到IronPDF有几个关键优势:
现代 Chromium 渲染引擎:IronPDF 使用 Chromium 进行 HTML 到 PDF 的转换,确保完全支持 CSS3 和 ES2024 JavaScript。 正确呈现现代框架和响应式设计。
基于 HTML 的内容创建:网络开发人员可以利用现有的 HTML 和 CSS 技能。 无需学习基于坐标的绘图 API 或管理字体对象。
自动布局和分页:自动进行文本换行、分页和流程布局。 无需手动计算元素位置。
简化的 API:常用操作的单一方法调用。<代码>PdfDocument.Merge()</代码取代了复杂的文件路径处理模式。
主动开发:随着 .NET 10 和 C# 14 在 2026 年之前的采用率不断提高,IronPDF 的定期更新可确保与当前和未来的 .NET 版本兼容。
全面的功能集:内置水印、数字签名、PDF/A 合规性以及ZetPDF缺乏的高级 PDF 操作功能。
结论
ZetPDF 通过其 PDFSharp 基础提供基本的 PDF 操作功能。 然而,其基于坐标的图形编程方法、有限的 HTML 支持以及现代功能的缺乏为文档生成任务带来了不必要的复杂性。
IronPDF 将 PDF 生成从图形编程练习转变为熟悉的HTML/CSS开发。 迁移路径简单明了:替换 NuGet 包,更新转换器类,利用 HTML 创建内容。
立即开始迁移,免费试用 IronPDF,体验基于 Chromium 的简单文档生成。
有关全面的实施指导,请浏览 IronPDF 文档和 教程。






