Expert PDF 与 IronPDF:技术比较指南
专家 PDF与 IronPDF:面向 .NET 开发人员的技术比较
.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。专家 PDF的输出中没有反映现代网络标准和后续 Chromium 版本的渲染改进,在处理使用 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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDF:
// 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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comExpert 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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDF:
// 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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com这两个库都提供页面大小和方向配置。专家 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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDF:
// 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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comExpert PDF 要求使用布尔标志(ShowHeader = true)启用页眉/页脚,并使用基于文本的配置,即使用 &p; 和 &P; 标记分别表示当前页和总页数。 IronPdf 使用带有特定位置属性(CenterText, RightText)和{page}/<代码>{总页数}</代码占位符的 TextHeaderFooter 对象。IronPDF还提供 DrawDividerLine 以实现可视化分隔。
为了实现完全的 HTML 控制,IronPDF 还支持 HtmlHeaderFooter 允许在页眉和页脚中使用完整的 HTML/CSS 样式。
方法映射参考
对于评估专家 PDF 迁移或比较功能的开发人员,本映射显示了等效操作:
核心类映射
| 专家 PDF | IronPDF | 备注 |
|---|---|---|
| <代码>PDFConverter</代码 | <代码>ChromePdfRenderer</代码 | 主要转换类 |
| <代码>PdfDocumentOptions</代码 | <代码>ChromePdfRenderOptions</代码 | 通过 RenderingOptions |
| <代码>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有几个原因:
Documentation Currency:Expert PDF 的文档自 2018 年以来一直处于冻结状态,超过六年没有更新。 寻求最新信息、示例和最佳实践的团队发现IronPDF不断更新的文档更适合现代开发工作流程。
现代 CSS 渲染:Expert PDF 依赖于旧版 Chrome 浏览器,可能无法正确渲染现代 CSS3 功能(Flexbox、网格、CSS 变量)。IronPDF最新的 Chromium 引擎可确保准确呈现当代网页设计。
软件包整合:Expert PDF 的零散产品套件(HtmlToPdf、PDFMerge、PDFSecurity、PDFSplit、PdfToImage)需要多个许可证。 IronPdf 将所有同等功能整合到一个 NuGet 包中,简化了依赖关系管理,降低了许可复杂性。
价格价值评估:Expert PDF 每个许可证的价格在 550 美元至 1,200 美元之间,在提供过时的呈现技术的同时却收取高昂的费用。 团队会评估成本是否与所提供的传统技术相符。
现代 .NET 支持:与专家 PDF有限的现代 .NET 支持相比,IronPDF for .NET 6/7/8/9+ 的应用程序将受益于IronPDF的本地支持和完整的异步/等待模式。
更新频率:Expert PDF 的更新频率较低,而IronPDF的更新频率为每月一次,这影响了功能的可用性和安全补丁的及时性。
优势和考虑因素
专家 PDF的优势
- HTML5支持:基本的HTML5呈现能力
- 成熟的库:经生产环境验证
- 熟悉的 API:直观的<代码>PDFConverter</代码模式
PDF 专家注意事项
- 文档冻结:自 2018 年以来无更新
- 传统渲染:较旧的 Chrome 浏览器版本限制了 CSS3 支持
- 碎片化产品:需要单独的软件包和许可证
- 高级定价:传统技术 550 美元至 1,200 美元
- 有限的现代 .NET:落后于当前的 .NET 版本
- 更新不频繁:安全和功能更新很少
IronPDF的优势
- 现代渲染:最新 Chromium 引擎实现完美像素输出
- 一体化软件包:集 PDF 生成、合并、安全、提取于一体的 NuGet
- 主动开发:每月更新新功能和安全补丁
- 更好的文档:全面的 教程和示例
- 真正的跨平台:支持 Windows、Linux、macOS 和 Docker
- Modern .NET:本地支持 .NET 6/7/8/9+
- 完全支持异步:现代异步/等待模式贯穿始终
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 提供了更合适的方法。