IRONSOFTWAREHOME
视频

如何在 .NET 10 中用 C# 将 HTML 转换为 PDF | IronPDF for .NET

Curtis Chau
Curtis Chau
Updated: 2026年7月19日

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

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与 ZetPDF:功能比较

了解架构差异有助于技术决策者评估迁移投资:

特征ZetPDFIronPDF
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
SHELL

步骤 2:更新命名空间

用IronPDF命名空间替换ZetPDF命名空间:

// Before (ZetPDF)
using ZetPDF;
using ZetPDF.Drawing;
using ZetPDF.Fonts;

// After (IronPDF)
using IronPdf;

步骤 3:初始化许可证

在应用程序启动时添加许可证初始化:

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");
    }
}
C#

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");
    }
}

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");
    }
}
C#

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");
    }
}

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");
    }
}
C#

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");
    }
}

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");

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");
C#

ZetPDF 方法需要创建字体对象、计算精确的像素位置并手动管理图形上下文。IronPDF的方法使用网络开发人员已经熟悉的标准 HTML 和 CSS--字体、颜色和布局都通过熟悉的 CSS 属性来处理。

##ZetPDFAPI 到IronPDF映射参考

这种映射通过显示直接的 API 对应关系来加速迁移:

ZetPDFIronPDF
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.BlackCSS 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;
}
Text

问题 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>
HTML

问题 3:颜色处理

**ZetPDF:**使用XBrushes和颜色对象。

**解决方案:**使用标准 CSS 颜色:

.header { color: navy; background-color: #f5f5f5; }
.warning { color: rgb(255, 0, 0); }
Text

问题 4:手动分页

ZetPDF: 跟踪 Y 位置并在内容溢出时手动创建新页面。

**解决方案:**IronPDF可处理自动分页。 如需明确控制,请使用 CSS:

.section { page-break-after: always; }
.keep-together { page-break-inside: avoid; }
Text

问题 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>
HTML

ZetPDF迁移清单

迁移前任务

审核您的代码库,确定所有ZetPDF使用情况:

grep -r "using ZetPDF" --include="*.cs" .
grep -r "XGraphics\|XFont\|XBrushes\|PdfReader" --include="*.cs" .
SHELL

需要转换为 HTML 的基于坐标的绘图代码文档。 注意字体和颜色的使用模式。 将布局结构映射为 HTML 对应内容。

代码更新任务

  1. 从您的ZetPDF.dll引用
  2. 安装IronPDF NuGet包(dotnet add package IronPdf)
  3. 将命名空间导入从IronPdf
  4. ChromePdfRenderer.RenderHtmlAsPdf()替换任何围绕ZetPDF的内部HTML到PDF包装器
  5. ChromePdfRenderer.RenderUrlAsPdf()替换任何URL到PDF包装器
  6. PdfDocument.Merge()替换手动页面复制合并循环
  7. DrawString()调用转换为HTML文本元素
  8. XFont转换为CSS font-family
  9. 用CSS颜色替换XBrushes
  10. 在启动时添加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操作功能。

请注意: PDFSharp和ZetPDF是各自所有者的注册商标。 本网站与ZetPDF或empira Software GmbH没有关联、认可或赞助。 所有产品名称、徽标和品牌均为各自所有者的财产。 比较仅供参考,反映撰写时公开可用的信息。
Curtis Chau
技术作家

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

...
阅读更多

相关文章

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户