Expert PDF與IronPDF:技術比較指南
當.NET開發者評估HTML轉PDF轉換程式庫時,Expert PDF是一個具有HTML5支援的商業選擇。 然而,其文件自2018年以來未更新,依賴過時的Chrome渲染引擎,而其分散的產品模式讓許多團隊考慮其他選擇。 IronPDF提供了一個現代方法,使用最新的Chromium渲染、持續更新,並將功能整合成一個包的一體化程式庫。
這次比較會從相關技術方面審視這兩個程式庫,以幫助專業開發者和架構師對他們的.NET PDF需求做出明智決策。
了解Expert PDF
Expert PDF (ExpertPdf) 是一個商業HTML到PDF轉換程式庫,幫助將動態網頁轉換成PDF文件。 該程式庫宣稱支援HTML5,這對於在PDF格式中渲染現代網頁內容非常有幫助。
Expert PDF使用GetPdfBytesFromHtmlFile()的各種轉換場景方法。 該程式庫通過PdfFooterOptions屬性在轉換器上組織配置。
Expert PDF的一個重大限制是它依賴於較舊版本的Chrome來渲染PDFs。 隨後的Chromium版本所做的現代網頁標準和渲染改進在Expert PDF的輸出中沒有反映出來,這可能導致在使用如Flexbox和Grid等CSS3功能的現代網頁設計時,渲染不夠準確。
Expert PDF的文件自2018年以來凍結,超過六年沒有更新,這使得開發者越來越難以找到最新的資訊、範例和最佳實踐。 該程式庫作為分散的產品套件(HtmlToPdf、PDFMerge、PDFSecurity、PDFSplit、PdfToImage)銷售,每個需要單獨授權,價格從550美元到1200美元不等。
瞭解IronPDF
IronPDF是以其不斷更新和改進而聞名的.NET PDF程式庫。 該程式庫使用最新的Chromium渲染引擎,確保滿足現代網頁標準,並能準確渲染HTML,具有完全的CSS3支援,包括Flexbox和Grid佈局。
IronPDF使用RenderingOptions 提供頁面大小、方向、邊距、頁眉和頁腳的配置。 該程式庫返回PdfDocument物件,可以在保存之前進一步操作,為後處理操作提供靈活性。
IronPDF提供了詳盡的文件,並有穩定的每月更新,原生支援.NET 6/7/8/9+,以及跨Windows、Linux、macOS和Docker環境的真正跨平台相容性。
架構與產品模型比較
這些.NET PDF程式庫之間的根本區別在於它們的產品組織和渲染技術。
| 方面 | Expert PDF | IronPDF |
|---|---|---|
| 文件資料 | 自2018年以來凍結 | 持續更新 |
| 渲染引擎 | 舊版Chrome | 最新Chromium |
| CSS 支援 | 限制的CSS3 | 完整的CSS3 (Flexbox, Grid) |
| 價格 | $550-$1,200 | 具有競爭力的定價 |
| 更新頻率 | 不頻繁 | 每月版本 |
| 產品模型 | 分散 (5+ DLLs) | 全合一程式庫 |
| 現代 .NET | 有限 | .NET 6/7/8/9+ 原生 |
| Async支持 | 有限 | 完全異步/等待 |
| 安全更新 | 不頻繁 | 常規補丁 |
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的差異。
Expert 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!");
}
}Imports ExpertPdf.HtmlToPdf
Imports System
Module Program
Sub Main()
' Create the PDF converter
Dim pdfConverter As New PdfConverter()
' Convert HTML string to PDF
Dim pdfBytes As Byte() = 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!")
End Sub
End ModuleIronPDF:
// 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!");
}
}Imports IronPdf
Imports System
Class Program
Shared Sub Main()
' Create a PDF from HTML string
Dim renderer = New ChromePdfRenderer()
Dim 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!")
End Sub
End ClassExpert PDF直接從File.WriteAllBytes()手動寫入文件。 IronPDF返回一個SaveAs()方法,提供更簡潔的保存操作並可在保存前進行額外操作。
有關進階HTML渲染選項,請查看HTML到PDF轉換指南。
URL到PDF轉換
將網頁作為PDF文件捕獲展示了配置模式的差異。
Expert 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!");
}
}Imports ExpertPdf.HtmlToPdf
Imports System
Module Program
Sub Main()
' Create the PDF converter
Dim pdfConverter As New PdfConverter()
' Set page size and orientation
pdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4
pdfConverter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait
' Convert URL to PDF
Dim pdfBytes As Byte() = pdfConverter.GetPdfBytesFromUrl("https://www.example.com")
' Save to file
System.IO.File.WriteAllBytes("webpage.pdf", pdfBytes)
Console.WriteLine("PDF from URL created successfully!")
End Sub
End ModuleIronPDF:
// 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!");
}
}Imports IronPdf
Imports System
Class Program
Shared Sub Main()
' Create a PDF renderer
Dim renderer = New ChromePdfRenderer()
' Set page size and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait
' Convert URL to PDF
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
' Save to file
pdf.SaveAs("webpage.pdf")
Console.WriteLine("PDF from URL created successfully!")
End Sub
End Class兩個程式庫都提供頁面大小和方向配置。 Expert PDF使用RenderingOptions.PaperOrientation。 命名遵循相似的模式,但IronPDF使用"Paper"前綴以與打印術語保持一致。
了解有關URL渲染的更多信息,請參見URL to PDF文檔。
帶頁碼的頁眉和頁腳
添加頁眉和頁腳展示了顯著的API設計差異,特別是在頁碼語法上。
Expert 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!");
}
}Imports ExpertPdf.HtmlToPdf
Imports System
Class Program
Shared Sub Main()
' Create the PDF converter
Dim pdfConverter As 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
Dim pdfBytes As Byte() = 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!")
End Sub
End ClassIronPDF:
// 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!");
}
}Imports IronPdf
Imports System
Class Program
Shared Sub Main()
' Create a PDF renderer
Dim renderer = New ChromePdfRenderer()
' Configure header
renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
.CenterText = "Document Header",
.DrawDividerLine = True
}
' Configure footer with page numbers
renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With {
.RightText = "Page {page} of {total-pages}",
.DrawDividerLine = True
}
' Convert HTML file to PDF
Dim pdf = renderer.RenderHtmlFileAsPdf("input.html")
' Save to file
pdf.SaveAs("output-with-header-footer.pdf")
Console.WriteLine("PDF with headers and footers created successfully!")
End Sub
End ClassExpert PDF需要用布林旗標(&P;符號分別代表當前頁和總頁數。 IronPDF使用帶有位置信息屬性(CenterText, {page} / {total-pages}佔位符。 IronPDF也提供DrawDividerLine以實現視覺分隔。
為了完全控制HTML,IronPDF還支援HtmlHeaderFooter,允許在頁眉和頁腳使用完整的HTML/CSS樣式。
方法對應參考
對於評估Expert PDF遷移或比較功能的開發者,這個對照圖顯示了等效操作:
核心類對應
| Expert PDF | IronPDF |
|---|---|
PdfConverter | ChromePdfRenderer |
PdfDocumentOptions | ChromePdfRenderOptions |
PdfSecurityOptions | PdfDocument.SecuritySettings |
PdfHeaderOptions | TextHeaderFooter |
PdfFooterOptions | TextHeaderFooter |
PDFMerge | PdfDocument.Merge() |
方法對照
| Expert 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, path) | renderer.RenderUrlAsPdf(url).SaveAs(path) |
配置映射
| Expert 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 = "..." |
頁碼符號
| Expert PDF | IronPDF |
|---|---|
&p; (當前頁碼) | {page} |
&P; (總頁數) | {total-pages} |
功能比較總結
| 功能 | Expert PDF | IronPDF |
|---|---|---|
| HTML到PDF | 是 | 是 |
| URL到PDF | 是 | 是 |
| HTML文件到PDF | 是 | 是 |
| 頁眉/頁尾 | 是的 (基於文本) | 是的 (HTML或文本) |
| 頁碼 | 是的 (&P;) | 是的 ({total-pages}) |
| PDF合併 | 是的 (獨立包) | 是的 (包含的) |
| PDF安全 | 是的 (獨立包) | 是的 (包含的) |
| PDF拆分 | 是的 (獨立包) | 是的 (包含的) |
| PDF轉為圖像 | 是的 (獨立包) | 是的 (包含的) |
| CSS3 Flexbox/Grid | 否 (有限的) | 是的 (完整支援) |
| 跨平台 | 有限 | 支持 |
團隊考慮從Expert PDF遷移到IronPDF的時候
開發團隊評估從Expert PDF轉向IronPDF有多個原因:
文件時效:Expert PDF的文件自2018年以來凍結,超過六年沒有更新。 尋求最新資訊、範例和最佳實踐的團隊會發現IronPDF的不斷更新文件更適合現代開發工作流程。
現代CSS渲染:Expert PDF依賴於一個傳統的Chrome版本,可能無法正確渲染現代CSS3功能(Flexbox,Grid,CSS變量)。 IronPDF的最新Chromium引擎確保準確渲染當代網頁設計。
封包整合:Expert PDF的分散產品套件(HtmlToPdf,PDFMerge,PDFSecurity,PDFSplit,PdfToImage)需要多個許可證。IronPDF將所有等效功能集合在一個NuGet包中,簡化了依賴管理並降低了許可證的複雜性。
價格與價值評估:每份許可證550美元至1200美元不等,Expert PDF以高價提供過時的渲染技術。 團隊評估這樣的花費是否符合所提供的傳統技術。
現代 .NET 支援:針對.NET 6/7/8/9+的應用程式受益於IronPDF原生支援和完整的async/await模式,而不是Expert PDF的有限現代.NET支援。
更新頻率:Expert PDF的更新不頻繁,而IronPDF每月發行新版本,影響功能的可得性和安全補丁的及時性。
優勢和考量
Expert PDF 優勢
- HTML5 支援:基本的HTML5渲染能力
- 已建立的程式庫: 在生產環境中得到驗證
- 熟悉的API:簡單明了的
PdfConverter模式
Expert PDF 顧慮
- 文件凍結:自2018年以來無更新
- 傳統渲染:舊版Chrome限制了CSS3支援
- 产品分散:需要單獨的套件和許可證
- 高價定價:因為傳統技術定價在$550到$1,200之間
- 有限的現代 .NET:落後於當前的 .NET 版本
- 更新不頻繁:安全和功能更新稀少
IronPDF的優勢
- 現代渲染:最新的Chromium引擎提供像素完美輸出
- 一體包:PDF 生成、合併、加密、提取皆在一個NuGet中
- 積極開發:每月更新新功能並提供安全補丁
- 更好的文檔:綜合教程和範例
- 真正的跨平台:Windows, Linux, macOS, Docker 支援
- 現代 .NET:原生支持.NET 6/7/8/9+
- 完整的異步支援:現代的async/await模式貫穿整個過程
IronPDF的考量
- 兩步保存:渲染返回
SaveAs()(提供靈活性) - 不同的佔位符:使用
&p;
結論
Expert PDF和IronPDF都能為.NET開發者提供HTML轉PDF的轉換,但它們代表了技術時間線上的不同點。Expert PDF提供已確立的功能,但自2018年以來文件凍結,具有限制CSS3支援的舊版Chrome渲染引擎,以及需要多重授權的分散產品模式。
IronPDF提供了一個現代的選擇,使用最新的Chromium渲染,持續的每月更新,綜合的文檔,以及整合功能的一體包。 對於需要現代CSS3支援、主動維護或跨平台部署的團隊而言,IronPDF能滿足這些特定需求。
隨著組織計畫.NET 10、C# 14,並通過2026年的應用開發,選擇取決於具體優先事項。 擁有既有Expert PDF實施和簡單HTML佈局的團隊可能會繼續獲得充足的結果。 對於現代網頁設計、主動安全補丁和整合授權而言,IronPDF提供了更適合的方案。
開始評估IronPDF,通過免費試用,並查看更多詳細文檔,來評估其對您的具體需求是否合適。
