Expert PDF 与 IronPDF:技术比较指南
当 .NET 开发人员评估 HTML 到 PDF 转换库时,Expert PDF 是一个具有成熟 HTML5 支持的商业选项。 然而,它的文档自 2018 年以来就没有更新过,它依赖于过时的 Chrome 渲染引擎,而且其碎片化的产品模型导致许多团队考虑其他替代方案。 IronPdf 采用最新的 Chromium 渲染技术、持续更新以及将功能整合到单个软件包中的一体化库,提供了一种现代化的方法。
本次比较从相关技术方面考察了这两个库,以帮助专业开发人员和架构师针对其 .NET PDF 需求做出明智的决策。
了解专家 PDF.
Expert PDF (ExpertPdf) 是一个商业的 HTML 转 PDF 转换库,可帮助将动态网页转换为 PDF 文档。 该库声称支持 HTML5,这有利于以 PDF 格式呈现现代网络内容。
Expert PDF 使用<代码>PDFConverter</代码类作为其主要转换接口,为各种转换场景提供了 GetPdfBytesFromHtmlString(), GetPdfBytesFromUrl() 和 GetPdfBytesFromHtmlFile() 等方法。 该库通过转换器上的 PdfDocumentOptions,<代码>PdfHeaderOptions</代码和<代码>PdfFooterOptions</代码属性组织配置。
Expert PDF 的一个重要局限是它依赖于旧版本的 Chrome 浏览器来渲染 PDF。 现代网络标准和后续 Chromium 版本中的渲染改进并未反映在专家 PDF的输出中,这可能会导致在使用 CSS3 功能(如 Flexbox 和 Grid)的现代网页设计时渲染精度降低。
Expert PDF 的文档自 2018 年以来一直处于冻结状态,超过六年没有更新,这使得开发人员越来越难以找到最新的信息、示例和最佳实践。 该库作为一个分散的产品套件出售,每个套件(HtmlToPdf、PDFMerge、PDFSecurity、PDFSplit、PdfToImage)都需要单独授权,价格从 550 美元到 1200 美元不等。
了解IronPDF
IronPDF 是一个以持续更新和改进而著称的 .NET PDF 库。 该库使用最新的 Chromium 渲染引擎,确保符合现代网络标准,并能准确渲染 HTML,同时完全支持 CSS3,包括 Flexbox 和网格布局。
IronPDF 使用<代码>ChromePdfRenderer</代码作为其主要转换类,RenderingOptions 为页面大小、方向、页边距、页眉和页脚提供配置。 该库返回的 PdfDocument 对象可在保存前进行进一步操作,为后处理操作提供了灵活性。
IronPDF 提供详尽的文档,每月持续发布新版本,原生支持 .NET 6/7/8/9+,并真正实现跨 Windows、Linux、macOS 和 Docker 环境的跨平台兼容性。
架构和产品模型比较
这些 .NET PDF 库的根本区别在于它们的产品组织和渲染技术。
| 方面 | 专家 PDF | IronPDF |
|---|---|---|
| 文档 | 自 2018 年起冻结 | 持续更新 |
| 渲染引擎 | 传统 Chrome 浏览器 | 最新 Chromium |
| CSS支持 | 有限的 CSS3 | 完整的 CSS3(Flexbox、网格) |
| 价格 | $550-$1,200 | 有竞争力的定价 |
| 更新频率 | 不经常 | 每月发布 |
| 产品模型 | 零散(5 个以上 DLL) | 一体化库 |
| 现代.NET | 有限的 | .NET 6/7/8/9+ 原生语言 |
| 支持同步 | 有限的 | 完整的异步/等待 |
| 安全更新 | 不经常 | 常规补丁 |
Expert PDF 的零散产品套件包括
- ExpertPdf.HtmlToPdf: HTML 转 PDF 转换
- ExpertPdf.PDFMerge: PDF 合并 ExpertPdf.PDFSecurity:加密和密码 ExpertPdf.PDFSplit: PDF 分割
- ExpertPdf.PdfToImage: PDF 转图像
每个软件包都需要单独授权。IronPDF将所有同等功能整合到一个 NuGet 包中。
代码比较:常见的 PDF 操作
HTML 到 PDF 转换
将 HTML 内容转换为 PDF 演示了 API 的基本差异。
专家级 PDF:
// NuGet: Install-Package ExpertPdf.HtmlToPdf
using ExpertPdf.HtmlToPdf;
using System;
class Program
{
static void Main()
{
// Create the PDF converter
PdfConverter pdfConverter = new PdfConverter();
// Convert HTML string to PDF
byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlString("<h1>Hello World</h1><p>This is a PDF document.</p>");
// Save to file
System.IO.File.WriteAllBytes("output.pdf", pdfBytes);
Console.WriteLine("PDF created successfully!");
}
}// NuGet: Install-Package ExpertPdf.HtmlToPdf
using ExpertPdf.HtmlToPdf;
using System;
class Program
{
static void Main()
{
// Create the PDF converter
PdfConverter pdfConverter = new PdfConverter();
// Convert HTML string to PDF
byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlString("<h1>Hello World</h1><p>This is a PDF document.</p>");
// Save to file
System.IO.File.WriteAllBytes("output.pdf", pdfBytes);
Console.WriteLine("PDF created successfully!");
}
}IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
// Create a PDF from HTML string
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF document.</p>");
// Save to file
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully!");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
// Create a PDF from HTML string
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF document.</p>");
// Save to file
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully!");
}
}Expert PDF 直接从 GetPdfBytesFromHtmlString() 返回 byte[] 字节,需要使用 File.WriteAllBytes() 手动编写文件。IronPDF返回一个带有SaveAs()方法的PdfDocument对象,提供更简洁的保存操作,并可在保存前进行其他操作。
有关高级 HTML 渲染选项,请浏览 HTML 到 PDF 转换指南。
URL到PDF转换
将网页截取为 PDF 文档可显示配置模式差异。
专家级 PDF:
// NuGet: Install-Package ExpertPdf.HtmlToPdf
using ExpertPdf.HtmlToPdf;
using System;
class Program
{
static void Main()
{
// Create the PDF converter
PdfConverter pdfConverter = new PdfConverter();
// Set page size and orientation
pdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4;
pdfConverter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait;
// Convert URL to PDF
byte[] pdfBytes = pdfConverter.GetPdfBytesFromUrl("https://www.example.com");
// Save to file
System.IO.File.WriteAllBytes("webpage.pdf", pdfBytes);
Console.WriteLine("PDF from URL created successfully!");
}
}// NuGet: Install-Package ExpertPdf.HtmlToPdf
using ExpertPdf.HtmlToPdf;
using System;
class Program
{
static void Main()
{
// Create the PDF converter
PdfConverter pdfConverter = new PdfConverter();
// Set page size and orientation
pdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4;
pdfConverter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait;
// Convert URL to PDF
byte[] pdfBytes = pdfConverter.GetPdfBytesFromUrl("https://www.example.com");
// Save to file
System.IO.File.WriteAllBytes("webpage.pdf", pdfBytes);
Console.WriteLine("PDF from URL created successfully!");
}
}IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Set page size and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;
// Convert URL to PDF
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
// Save to file
pdf.SaveAs("webpage.pdf");
Console.WriteLine("PDF from URL created successfully!");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Set page size and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;
// Convert URL to PDF
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
// Save to file
pdf.SaveAs("webpage.pdf");
Console.WriteLine("PDF from URL created successfully!");
}
}这两个库都提供页面大小和方向配置。专家 PDF使用 PdfDocumentOptions.PdfPageSize 和 PdfDocumentOptions.PdfPageOrientation ,而IronPDF使用 RenderingOptions.PaperSize 和 RenderingOptions.PaperOrientation 。 命名遵循类似模式,但IronPDF使用 "Paper "前缀,以便与印刷术语保持一致。
在 URL to PDF 文档中了解有关 URL 呈现的更多信息。
带页码的页眉和页脚
添加页眉和页脚显示了 API 设计上的显著差异,特别是在页码语法方面。
专家级 PDF:
// NuGet: Install-Package ExpertPdf.HtmlToPdf
using ExpertPdf.HtmlToPdf;
using System;
class Program
{
static void Main()
{
// Create the PDF converter
PdfConverter pdfConverter = new PdfConverter();
// Enable header
pdfConverter.PdfHeaderOptions.ShowHeader = true;
pdfConverter.PdfHeaderOptions.HeaderText = "Document Header";
pdfConverter.PdfHeaderOptions.HeaderTextAlignment = HorizontalTextAlign.Center;
// Enable footer with page numbers
pdfConverter.PdfFooterOptions.ShowFooter = true;
pdfConverter.PdfFooterOptions.FooterText = "Page &p; of &P;";
pdfConverter.PdfFooterOptions.FooterTextAlignment = HorizontalTextAlign.Right;
// Convert HTML file to PDF
byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlFile("input.html");
// Save to file
System.IO.File.WriteAllBytes("output-with-header-footer.pdf", pdfBytes);
Console.WriteLine("PDF with headers and footers created successfully!");
}
}// NuGet: Install-Package ExpertPdf.HtmlToPdf
using ExpertPdf.HtmlToPdf;
using System;
class Program
{
static void Main()
{
// Create the PDF converter
PdfConverter pdfConverter = new PdfConverter();
// Enable header
pdfConverter.PdfHeaderOptions.ShowHeader = true;
pdfConverter.PdfHeaderOptions.HeaderText = "Document Header";
pdfConverter.PdfHeaderOptions.HeaderTextAlignment = HorizontalTextAlign.Center;
// Enable footer with page numbers
pdfConverter.PdfFooterOptions.ShowFooter = true;
pdfConverter.PdfFooterOptions.FooterText = "Page &p; of &P;";
pdfConverter.PdfFooterOptions.FooterTextAlignment = HorizontalTextAlign.Right;
// Convert HTML file to PDF
byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlFile("input.html");
// Save to file
System.IO.File.WriteAllBytes("output-with-header-footer.pdf", pdfBytes);
Console.WriteLine("PDF with headers and footers created successfully!");
}
}IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Configure header
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "Document Header",
DrawDividerLine = true
};
// Configure footer with page numbers
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
RightText = "Page {page} of {total-pages}",
DrawDividerLine = true
};
// Convert HTML file to PDF
var pdf = renderer.RenderHtmlFileAsPdf("input.html");
// Save to file
pdf.SaveAs("output-with-header-footer.pdf");
Console.WriteLine("PDF with headers and footers created successfully!");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Configure header
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "Document Header",
DrawDividerLine = true
};
// Configure footer with page numbers
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
RightText = "Page {page} of {total-pages}",
DrawDividerLine = true
};
// Convert HTML file to PDF
var pdf = renderer.RenderHtmlFileAsPdf("input.html");
// Save to file
pdf.SaveAs("output-with-header-footer.pdf");
Console.WriteLine("PDF with headers and footers created successfully!");
}
}Expert PDF 要求使用布尔标志(ShowHeader = true)启用页眉/页脚,并使用基于文本的配置,即使用 &p; 和 &P; 标记分别表示当前页和总页数。 IronPdf 使用带有特定位置属性(CenterText, RightText)和{page}/<代码>{总页数}</代码占位符的 TextHeaderFooter 对象。IronPDF还提供 DrawDividerLine 以实现可视化分隔。
为了实现完全的 HTML 控制,IronPDF 还支持 HtmlHeaderFooter 允许在页眉和页脚中使用完整的 HTML/CSS 样式。
方法映射参考
对于评估专家 PDF 迁移或比较功能的开发人员,本映射显示了等效操作:
核心类映射
| 专家 PDF | IronPDF |
|---|---|
| <代码>PDFConverter</代码 | <代码>ChromePdfRenderer</代码 |
| <代码>PdfDocumentOptions</代码 | <代码>ChromePdfRenderOptions</代码 |
| <代码>PdfSecurityOptions</代码 | <代码>PdfDocument.SecuritySettings</代码 |
| <代码>PdfHeaderOptions</代码 | <代码>HtmlHeaderFooter</代码>或<代码>TextHeaderFooter</代码 |
| <代码>PdfFooterOptions</代码 | <代码>HtmlHeaderFooter</代码>或<代码>TextHeaderFooter</代码 |
| <代码>PDFMerge</代码 | <代码>PdfDocument.Merge()</代码 |
方法映射
| 专家 PDF | IronPDF |
|---|---|
| <代码>pdfConverter.GetPdfBytesFromHtmlString(html)</代码 | <代码>renderer.RenderHtmlAsPdf(html).BinaryData</代码 |
| <代码>pdfConverter.GetPdfBytesFromUrl(url)</代码 | <代码>renderer.RenderUrlAsPdf(url).BinaryData</代码 |
| <代码>pdfConverter.GetPdfBytesFromHtmlFile(path)</代码 | <代码>renderer.RenderHtmlFileAsPdf(path).BinaryData</代码 |
| <代码>pdfConverter.SavePdfFromUrlToFile(url,路径)</代码 | <代码>renderer.RenderUrlAsPdf(url).SaveAs(path)</代码 |
配置映射
| 专家 PDF | IronPDF |
|---|---|
| <代码>PdfDocumentOptions.PdfPageSize = PdfPageSize.A4</ 代码 | <代码>RenderingOptions.PaperSize = PdfPaperSize.A4</ 代码 |
| <代码>PdfDocumentOptions.PdfPageOrientation = Portrait</代码 | <代码>RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait</ 代码 |
| <代码>PdfDocumentOptions.MarginTop</代码 | <代码>RenderingOptions.MarginTop</代码 |
| <代码>pdfConverter.LicenseKey = "..."</ 代码 | <代码>IronPDF.License.LicenseKey = "..."</ 代码 |
页面编号标记
| 专家 PDF | IronPDF |
|---|---|
&p; (当前页) | {page} |
&P; (共页) | <代码>{总页数}</代码 |
功能对比摘要
| 特征 | 专家 PDF | IronPDF |
|---|---|---|
| HTML 至 PDF | ✅ | ✅ |
| URL 至 PDF | ✅ | ✅ |
| HTML 文件到 PDF | ✅ | ✅ |
| 页眉/页脚 | ✅(基于文本) | ✅(HTML 或文本) |
| 页码 | ✅ (&p;/&P;) | ✅ ({page}/{total-pages}) |
| PDF 合并 | ✅(单独软件包) | ✅(包括) |
| PDF 安全 | ✅(单独软件包) | ✅(包括) |
| PDF 分割 | ✅(单独软件包) | ✅(包括) |
| 将 PDF 转换为图像 | ✅(单独软件包) | ✅(包括) |
| CSS3 Flexbox/网格 | ❌(有限) | ✅(完全支持) |
| 跨平台 | 有限的 | 支持 |
团队何时考虑从专家 PDF迁移到 IronPDF?
开发团队评估从专家 PDF过渡到IronPDF有几个原因:
文档时效性:专家 PDF的文档自 2018 年以来一直处于冻结状态——超过六年没有更新。 寻求最新信息、示例和最佳实践的团队发现IronPDF不断更新的文档更适合现代开发工作流程。
现代 CSS 渲染:专家 PDF依赖于旧版 Chrome,可能无法正确渲染现代 CSS3 功能(Flexbox、Grid、CSS 变量)。IronPDF最新的 Chromium 引擎可确保准确呈现当代网页设计。
软件包整合:专家 PDF的分散产品套件(HtmlToPdf、PDFMerge、PDFSecurity、PDFSplit、PdfToImage)需要多个许可证。 IronPdf 将所有同等功能整合到一个 NuGet 包中,简化了依赖关系管理,降低了许可复杂性。
性价比评估:专家 PDF的许可费用为 550 美元至 1200 美元,价格过高,但提供的却是过时的渲染技术。 团队会评估成本是否与所提供的传统技术相符。
现代 .NET 支持:面向 .NET 6/7/8/9+ 的应用程序可受益于IronPDF的原生支持和完整的 async/await 模式,而专家 PDF的现代 .NET 支持则较为有限。
更新频率:专家 PDF的更新频率较低,而IronPDF则每月发布一次,这影响了功能可用性和安全补丁的及时性。
优势和考虑因素
专家 PDF的优势
- HTML5 支持:具备基本的 HTML5 渲染能力 -已建立的库:已在生产环境中验证 -熟悉的 API:简洁的
PdfConverter模式
PDF 专家注意事项
-文档已冻结:自 2018 年以来未更新 -旧版渲染:旧版 Chrome 浏览器对 CSS3 的支持有限 -产品分散:需要单独的软件包和许可证。 -高级定价:传统技术定价为 550 美元至 1200 美元 -现代 .NET 功能有限:落后于当前的 .NET 版本 -更新频率低:安全更新和功能更新很少。
IronPDF的优势
-现代渲染:采用最新的 Chromium 引擎,实现像素级完美输出 -一体化软件包:在一个 NuGet 包中完成 PDF 生成、合并、安全保护和提取。 -积极开发:每月更新,包含新功能和安全补丁 -更完善的文档:全面的教程和示例 -真正的跨平台:支持 Windows、Linux、macOS 和 Docker -现代 .NET:原生支持 .NET 6/7/8/9+ -完全支持异步:全面采用现代 async/await 模式
IronPDF注意事项
-两步保存:渲染返回PdfDocument ,然后调用SaveAs() (提供灵活性) -不同的占位符:使用{page}语法而不是&p;
结论
Expert PDF 和IronPDF都为 .NET 开发人员提供 HTML 到 PDF 的转换,但它们代表了技术时间轴上的不同点。Expert PDF 提供了成熟的功能,但自 2018 年以来文档一直处于冻结状态,传统的 Chrome 渲染引擎限制了 CSS3 支持,而且产品模式分散,需要多个许可证。
IronPdf 通过最新的 Chromium 渲染、持续的月度更新、全面的文档以及整合功能的一体化软件包,提供了一个现代化的替代方案。 对于需要当前 CSS3 支持、主动维护或跨平台部署的团队,IronPDF 可以满足这些特定要求。
随着企业对 .NET 10、C# 14 以及 2026 年之前的应用程序开发进行规划,选择取决于具体的优先事项。 拥有成熟的专家 PDF实现和简单的 HTML 布局的团队可以继续找到适当的结果。 对于现代网页设计、主动安全补丁和合并许可,IronPdf 提供了更合适的方法。