如何在 .NET 10 中用 C# 将 HTML 转换为 PDF | IronPDF for .NET
ZetPDF(zetpdf.com)是一种商业许可的.NET PDF SDK,其API界面与PDFsharp极为相似,甚至以至于PDFsharp社区质疑其是否为封闭分支。 供应商将其定位为专有的,100%托管代码引擎。ZetPDF不通过NuGet分发 — 安装是从https://zetpdf.com/download/下载的ZIP,并且该项目自2021年以来没有公共发布活动。定价是永久的:$299单项目 / $449多项目 / $599 OEM。
该指南提供了从ZetPDF迁移到IronPDF的路径,包含逐步的说明、代码比较和实例,供评估此转换的.NET开发人员使用。
为什么要从ZetPDF迁移
ZetPDF的PDFsharp形状坐标绘图API具有架构限制,这限制了现代文档生成工作流。 团队考虑迁移的常见原因:
基于坐标的API: ZetPDF通过精确的XGraphics坐标定位每个元素。 手动定位在需求变化时造成维护负担。
没有CSS支持:没有样式系统 - 字体和颜色在代码中按元素管理。
不支持 JavaScript 渲染:在生成 PDF 期间无法渲染动态网页内容或执行 JavaScript。
没有原生的HTML到PDF转换:ZetPDF的记录功能列表不包含HTML到PDF或URL到PDF转换器; 渲染仅限于低级XGraphics绘图。
没有NuGet,无发布活动:分发是来自https://zetpdf.com/download/的供应商ZIP,自2021年以来没有公共发布活动。
手动分页断点:页面溢出必须手动计算和管理,而不是通过自动分页。
需要文本测量:需要手动计算文本换行,增加开发负担。
基本问题
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 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 form
IronPDF 使用 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);
' IronPDF: Simple HTML
Dim html As String = "
<p><strong>Name:</strong> John Doe</p>
<p><strong>Address:</strong> 123 Main St</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
IronPDF与 ZetPDF:功能比较
了解架构差异有助于技术决策者评估迁移投资:
| 特征 | ZetPDF | IronPDF |
|---|---|---|
| API 风格 | PDFsharp 风格的XGraphics绘图 |
高水平的HTML渲染 |
| HTML-PDF 转换 | 未在记录的功能列表中 | 是(全 Chromium) |
| 商业许可 | 是的,永久的($299 / $449 / $599) | 是 |
| 分配 | ZIP下载(没有NuGet包) | NuGet (IronPdf) |
| 最后的公共活动 | 自2021年以来没有发布记录 | 活跃,频繁发布 |
| CSS支持 | 否 | 完整的 CSS3 |
| JavaScript语言 | 否 | 完整的 ES2024 |
| 自动排版 | 否 | 是 |
| 自动分页 | 否 | 是 |
| 表格 | 手工绘图 | HTML <table> |
| 页眉/页脚 | 手册 | HTML/CSS |
| 水印。 | 手册代码 | 内置 |
| 合并 PDF 文件 | 没有一流的助手 | 是 |
| 拆分 PDF 文件 | 没有一流的助手 | 是 |
| 数字签名 | 否 | 是 |
| PDF/A。 | 否 | 是 |
快速入门:ZetPDF 向IronPDF迁移
迁移工作可以通过以下基本步骤立即开始。
步骤1:用IronPDF NuGet包替换ZetPDF引用
ZetPDF不在NuGet上——它以ZIP格式从https://zetpdf.com/download/下载,并通过将ZetPDF.dll添加到您的项目中进行引用。 迁移后,您删除该DLL引用并从NuGet安装IronPDF:
# Remove the ZetPDF.dll reference from your csproj manually, then:
dotnet add package IronPdf
# Remove the ZetPDF.dll reference from your csproj manually, then:
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;
Imports IronPdf
步骤 3:初始化许可证
在应用程序启动时添加许可证初始化:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
代码迁移示例
将HTML转换为PDF
ZetPDF的发布功能列表不包括原生的HTML到PDF或URL到PDF转换器,其记录的界面涵盖PDF查看/打印、注释、AES256加密、表单域和文本提取。 下面的伪包装器是一些团队将通常在ZetPDF基础上实现HTML到PDF入口点的示例; 实际上工作要回落到外部HTML渲染器或低级XGraphics绘图。
ZetPDF方法(例示 — 没有原生HTML到PDF):
//ZetPDFis NOT on NuGet — install via SDK ZIP from https://zetpdf.com/download/
using ZetPDF;
using System;
class Program
{
static void Main()
{
// 否 native HtmlToPdfConverter exists inZetPDF— illustrative call only.
var converter = new HtmlToPdfConverter();
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
converter.ConvertHtmlToPdf(htmlContent, "output.pdf");
Console.WriteLine("PDF created successfully");
}
}
//ZetPDFis NOT on NuGet — install via SDK ZIP from https://zetpdf.com/download/
using ZetPDF;
using System;
class Program
{
static void Main()
{
// 否 native HtmlToPdfConverter exists inZetPDF— illustrative call only.
var converter = new HtmlToPdfConverter();
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
converter.ConvertHtmlToPdf(htmlContent, "output.pdf");
Console.WriteLine("PDF created successfully");
}
}
Imports ZetPDF
Imports System
Class Program
Shared Sub Main()
' 否 native HtmlToPdfConverter exists inZetPDF— illustrative call only.
Dim converter As New HtmlToPdfConverter()
Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
converter.ConvertHtmlToPdf(htmlContent, "output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End Class
IronPDF 方法:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
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()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
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");
}
}
Imports IronPdf
Imports System
Module Program
Sub Main()
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim renderer As New ChromePdfRenderer()
Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End Module
IronPDF提供PdfDocument对象——您可以保存到文件,检索二进制数据,或在保存前执行其他操作。
有关 HTML 转 PDF 的高级应用场景,请参阅 HTML 转 PDF 指南。
将 URL 转换为 PDF
ZetPDF也没有原生的URL到PDF转换器; HTML/URL渲染不是记录的功能列表的一部分。实际的迁移路径通常将ZetPDF与外部HTML渲染器配对或迁移到像IronPDF这样的基于Chromium的库。
ZetPDF方法(例示 — 没有原生URL到PDF):
//ZetPDFis NOT on NuGet — install via SDK ZIP from https://zetpdf.com/download/
using ZetPDF;
using System;
class Program
{
static void Main()
{
// 否 native ConvertUrlToPdf exists inZetPDF— illustrative call only.
var converter = new HtmlToPdfConverter();
var url = "https://www.example.com";
converter.ConvertUrlToPdf(url, "webpage.pdf");
Console.WriteLine("PDF from URL created successfully");
}
}
//ZetPDFis NOT on NuGet — install via SDK ZIP from https://zetpdf.com/download/
using ZetPDF;
using System;
class Program
{
static void Main()
{
// 否 native ConvertUrlToPdf exists inZetPDF— illustrative call only.
var converter = new HtmlToPdfConverter();
var url = "https://www.example.com";
converter.ConvertUrlToPdf(url, "webpage.pdf");
Console.WriteLine("PDF from URL created successfully");
}
}
Imports ZetPDF
Imports System
Class Program
Shared Sub Main()
' 否 native ConvertUrlToPdf exists inZetPDF— illustrative call only.
Dim converter As New HtmlToPdfConverter()
Dim url As String = "https://www.example.com"
converter.ConvertUrlToPdf(url, "webpage.pdf")
Console.WriteLine("PDF from URL created successfully")
End Sub
End Class
IronPDF 方法:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
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()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
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");
}
}
Imports IronPdf
Imports System
Module Program
Sub Main()
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim renderer As New ChromePdfRenderer()
Dim url As String = "https://www.example.com"
Dim pdf = renderer.RenderUrlAsPdf(url)
pdf.SaveAs("webpage.pdf")
Console.WriteLine("PDF from URL created successfully")
End Sub
End Module
IronPDF的ChromePdfRenderer上,利用完整的Chromium渲染引擎进行网页捕获,包括JavaScript执行和现代CSS。
请浏览 URL to PDF 文档,了解身份验证和自定义页眉选项。
合并多个 PDF 文件
ZetPDF不提供一行PdfMerger.MergeFiles()帮助器。 合并遵循与PDFsharp相同的模式(ZetPDF类似于此):用Save()中。 下面的例示包装器反映了IronPDF的界面以供比较; 在实际的ZetPDF代码中,您编写手动循环。
ZetPDF方法(例示 — 没有内置PdfMerger):
//ZetPDFis NOT on NuGet — install via SDK ZIP from https://zetpdf.com/download/
using ZetPDF;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
//ZetPDFhas no built-in PdfMerger — illustrative call only.
var merger = new PdfMerger();
var files = new List<string> { "document1.pdf", "document2.pdf" };
merger.MergeFiles(files, "merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}
//ZetPDFis NOT on NuGet — install via SDK ZIP from https://zetpdf.com/download/
using ZetPDF;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
//ZetPDFhas no built-in PdfMerger — illustrative call only.
var merger = new PdfMerger();
var files = new List<string> { "document1.pdf", "document2.pdf" };
merger.MergeFiles(files, "merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}
Imports ZetPDF
Imports System
Imports System.Collections.Generic
Module Program
Sub Main()
' ZetPDFhas no built-in PdfMerger — illustrative call only.
Dim merger As New PdfMerger()
Dim files As New List(Of String) From {"document1.pdf", "document2.pdf"}
merger.MergeFiles(files, "merged.pdf")
Console.WriteLine("PDFs merged successfully")
End Sub
End Module
IronPDF 方法:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
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()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
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");
}
}
Imports IronPdf
Imports System
Imports System.Collections.Generic
Module Program
Sub Main()
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim pdfs As New List(Of PdfDocument) From {
PdfDocument.FromFile("document1.pdf"),
PdfDocument.FromFile("document2.pdf")
}
Dim merged As PdfDocument = PdfDocument.Merge(pdfs)
merged.SaveAs("merged.pdf")
Console.WriteLine("PDFs merged successfully")
End Sub
End Module
IronPDF使用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");
Imports ZetPDF
Imports ZetPDF.Drawing
Dim document As New PdfDocument()
Dim page = document.AddPage()
page.Width = XUnit.FromMillimeter(210)
page.Height = XUnit.FromMillimeter(297)
Dim graphics = XGraphics.FromPdfPage(page)
Dim titleFont As New XFont("Arial", 24, XFontStyle.Bold)
Dim bodyFont As 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")
IronPDF 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");
Imports IronPdf
Dim html As String = $"
<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>"
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("report.pdf")
ZetPDF 方法需要创建字体对象、计算精确的像素位置并手动管理图形上下文。IronPDF的方法使用网络开发人员已经熟悉的标准 HTML 和 CSS--字体、颜色和布局都通过熟悉的 CSS 属性来处理。
ZetPDFAPI 到IronPDF映射参考
这种映射通过显示直接的 API 对应关系来加速迁移:
| ZetPDF | IronPDF |
|---|---|
new PdfDocument() |
new ChromePdfRenderer() |
document.AddPage() |
自动翻译 |
XGraphics.FromPdfPage(page) |
N/A(HTML/CSS取代) |
graphics.DrawString() |
HTML 文本元素 |
graphics.DrawImage() |
<img>标签 |
graphics.DrawLine() |
CSS边框 / <hr> |
graphics.DrawRectangle() |
CSS border + div |
new XFont() |
CSS font-family |
XBrushes.Black |
CSS color |
document.Save() |
pdf.SaveAs() |
PdfReader.Open() |
PdfDocument.FromFile() |
| (no native HTML-to-PDF) | ChromePdfRenderer.RenderHtmlAsPdf() |
| (no native URL-to-PDF) | ChromePdfRenderer.RenderUrlAsPdf() |
| (manual page-copy loop) | PdfDocument.Merge() |
常见迁移问题和解决方案
问题 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 "XGraphics\|XFont\|XBrushes\|PdfReader" --include="*.cs" .
grep -r "using ZetPDF" --include="*.cs" .
grep -r "XGraphics\|XFont\|XBrushes\|PdfReader" --include="*.cs" .
需要转换为 HTML 的基于坐标的绘图代码文档。 注意字体和颜色的使用模式。 将布局结构映射为 HTML 对应内容。
代码更新任务
- 从您的
ZetPDF.dll引用 - 安装IronPDF NuGet包(
dotnet add package IronPdf) - 将命名空间导入从
IronPdf - 用
ChromePdfRenderer.RenderHtmlAsPdf()替换任何围绕ZetPDF的内部HTML到PDF包装器 - 用
ChromePdfRenderer.RenderUrlAsPdf()替换任何URL到PDF包装器 - 用
PdfDocument.Merge()替换手动页面复制合并循环 - 将
DrawString()调用转换为HTML文本元素 - 将
XFont转换为CSSfont-family - 用CSS颜色替换
XBrushes - 在启动时添加IronPDF许可证初始化(
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";)
迁移后测试
迁移后,验证这些方面:
- 比较可视化输出,确保外观匹配或改进
- 通过 CSS 样式验证字体是否达到预期效果
- 测试自动分页是否正确分页
- 验证图片的位置和显示是否正确
- 测试 PDF 合并操作产生正确的输出
- 确认所有现有功能都能在新实施中使用
迁移到IronPDF的主要优势
从ZetPDF迁移到IronPDF有几个关键优势:
现代 Chromium 渲染引擎:IronPDF使用 Chromium 进行 HTML 到 PDF 的转换,确保完全支持 CSS3 和 ES2024 JavaScript。 正确呈现现代框架和响应式设计。
基于 HTML 的内容创建: Web 开发人员可以利用现有的 HTML 和 CSS 技能。 无需学习基于坐标的绘图 API 或管理字体对象。
自动布局和分页:文本换行、分页符和流式布局自动完成。 无需手动计算元素位置。
简化 API:常用操作只需调用一个方法即可完成。 PdfDocument.Merge()替换复杂的文件路径处理模式。
积极开发:IronPDF的定期发布节奏使库与现代.NET版本保持同步,与ZetPDF自2021年以来缺乏公共发布活动形成对比。
全面的功能集:内置水印,数字签名,PDF/A合规性和ZetPDF记录界面中缺乏的高级PDF操作功能。

