ZetPDF vs IronPDF:技術比較指南
ZetPDFvs IronPDF:.NET PDF 生成的技術比較
當 .NET 開發人員評估用於文件產生與處理的 PDF 函式庫時,ZetPDF 會以建立在 PDFSharp 基礎上的商業授權選項出現。 然而,其繼承的架構和限制為建立現代應用程式的團隊提出了重要的考量。 本技術比較將ZetPDF與IronPDF一併檢視,以協助架構師和開發人員瞭解兩者在渲染技術、API 設計和功能完整性上的根本差異。
瞭解 ZetPDF
ZetPDF 是一個商業授權的 PDF 函式庫,專為在 C# 應用程式中處理 PDF 檔案而設計。ZetPDF建立在廣泛使用的開放原始碼 PDFSharp 函式庫的基礎上,為建立、修改和管理 PDF 文件提供強大的解決方案,並提供商業支援和授權選項。
身為基於 PDFSharp 的函式庫,ZetPDF 繼承了其基礎的功能與限制:
- PDFSharp Foundation:利用 PDFSharp 的核心功能與商業授權
- 基於座標的 API:需要以精確的座標手動定位元素
- 商業支援:透過商業授權提供優先支援
- 彈性授權:提供開發人員、專案或 OEM 授權模式
- 繼承限制:繼承 PDFSharp 的限制,包括有限的 HTML-to-PDF 功能。
PDFSharp 傳承
ZetPDF 基於坐標的程式模型迫使開發人員手動定位每個元素:
// ZetPDF: 手動的 positioning with coordinates
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 with coordinates
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 formIRON VB CONVERTER ERROR developers@ironsoftware.com對於需要適應不同內容長度或需要回應式設計模式的文件佈局,這種方法可能會變得複雜。
了解 IronPDF
IronPDF 採用了根本不同的方法,使用基於 Chromium 的技術提供 HTML 到 PDF 的轉換,並支援完整的網頁標準。 IronPDF不是基於坐標的圖形編程,而是讓開發人員使用熟悉的 HTML 和 CSS 來建立文件。
主要特點包括
- Chromium 渲染引擎:使用現代瀏覽器技術進行精確的HTML/CSS呈現
- 基於HTML/CSS的設計:利用網頁開發技能進行文件排版
- FullJavaScriptSupport:使用 ES2024JavaScript渲染動態網頁內容
- 自動排版:內容自然流暢,無需手動計算坐標
- 進階 PDF 功能:內建支援水印、頁首/頁腳、合併等功能
功能比較
下表根據ZetPDF和IronPDF的架構方法,重點列出兩者的主要差異:
| 特點 | ZetPDF | IronPDF |
|---|---|---|
| 以 PDFSharp 為基礎 | 是 | 無 |
| HTML 至 PDF 轉檔 | 限額 | 是 (完整 Chromium 渲染) |
| 商業授權 | 是的,永久 | 是 |
| 開放原始碼基金會 | PDFSharp (MIT 授權) | 基於 Chromium |
| 與 PDFSharp 的差異 | 限額 | 完整的 HTML 至 PDF,獨特的功能 |
| 簡單易用 | 緩和 | 高的 |
| 支援 PDF 註解。 | 是 | 是 |
| 文字萃取 | 標準 | 進階 |
| 水印支援 | 是 | 是 |
詳細功能比較
| 特點 | ZetPDF | IronPDF |
|---|---|---|
| 內容創作 | ||
| HTML 至 PDF | 限額 | 是 |
| URL 至 PDF | 限額 | 是 |
| CSS 支援 | 無 | 完整的 CSS3 |
| JavaScript | 無 | 完整的 ES2024 |
| 版面設計 | ||
| 自動排版 | 無 | 是 |
| 自動分頁 | 無 | 是 |
| 表格 | 手繪 | HTML <table> |
| 圖片 | 手動放置 | <img> 標籤 |
| PDF作業 | ||
| 頁首/頁尾 | 手動的 | HTML/CSS |
| 水印 | 手冊程式碼 | 內建 |
| 合併 PDF | 是 | 是 |
| 分割 PDF | 限額 | 是 |
| 數位簽名 | 無 | 是 |
| PDF/A | 無 | 是 |
| 開發 | ||
| 跨平台 | 是 | 是 |
API 架構差異
ZetPDF 和IronPDF之間的 API 模式揭示了圍繞 PDF 生成的不同設計理念。
ZetPDFHtmlToPdfConverter 模式
ZetPDF 提供了一個 HtmlToPdfConverter 類,用於 HTML 到 PDF 的轉換:
// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
converter.ConvertHtmlToPdf(htmlContent, "output.pdf");
Console.WriteLine("PDF created successfully");
}
}// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
converter.ConvertHtmlToPdf(htmlContent, "output.pdf");
Console.WriteLine("PDF created successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comConvertHtmlToPdf 方法接收 HTML 內容和輸出檔案路徑,將結果直接寫入磁碟。
IronPDFChromePdfRenderer 模式
IronPDF 使用 ChromePdfRenderer 類與基於 Chromium 的渲染:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
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()
{
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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comChromePdfRenderer會返回一個 PdfDocument 物件,在儲存之前提供額外的操作功能。 如需全面的 HTML 轉換指南,請參閱 HTML to PDF 教學。
URL 至 PDF 轉換
將實際網頁轉換成 PDF 文件,可展示每個函式庫的網頁呈現方式的功能。
ZetPDF實作
ZetPDF 透過其 HtmlToPdfConverter 類提供 URL 轉換功能:
// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var url = "https://www.example.com";
converter.ConvertUrlToPdf(url, "webpage.pdf");
Console.WriteLine("PDF from URL created successfully");
}
}// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var url = "https://www.example.com";
converter.ConvertUrlToPdf(url, "webpage.pdf");
Console.WriteLine("PDF from URL created successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDF實作。
IronPdf 使用 Chromium 提供專用的 URL 渲染功能:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
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()
{
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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comRenderUrlAsPdf 方法利用 Chromium 的渲染引擎,以完整的JavaScript執行和現代 CSS 支援來處理網頁,產生與使用者在現代瀏覽器中看到的內容相符的輸出。
PDF 合併作業
結合多個 PDF 文件是文件組裝工作流程的常見需求。
ZetPDF合併模式
ZetPDF 提供了一個 PdfMerger 類,用於合併文件:
// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var merger = new PdfMerger();
var files = new List<string> { "document1.pdf", "document2.pdf" };
merger.MergeFiles(files, "merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var merger = new PdfMerger();
var files = new List<string> { "document1.pdf", "document2.pdf" };
merger.MergeFiles(files, "merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comMergeFiles 方法接受檔案路徑清單和輸出路徑,將合併結果直接寫入磁碟。
IronPDF的靜態合併模式
IronPDF 在 PdfDocument 類上提供了一個靜態 Merge 方法:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
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()
{
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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comPdfDocument.Merge 方法會傳回一個 PdfDocument 物件,可在儲存之前進行其他操作,例如水印、安全設定或修改元資料。
API 對應參考。
正在評估從ZetPDF轉換到IronPDF的團隊會發現此對應表有助於理解等同的概念:
| ZetPDF | IronPDF | 筆記 |
|---|---|---|
新的 HtmlToPdfConverter() | 新的 ChromePdfRenderer() | 主要呈現器類 |
converter.ConvertHtmlToPdf()。 | <編碼>renderer.RenderHtmlAsPdf()</編碼 | HTML 字串轉換 |
converter.ConvertUrlToPdf()。 | renderer.RenderUrlAsPdf()。 | URL 轉換 |
| <代碼>new PdfMerger()</ 代碼 | <代碼>PdfDocument.Merge()</代碼 | PDF 合併 |
| <代碼>merger.MergeFiles()</代碼 | <代碼>PdfDocument.Merge(list)</代碼 | 結合多個 PDF |
new PdfDocument() | 新的 ChromePdfRenderer() | 建立呈現器 |
| <編碼>document.AddPage()</編碼 | 自動化 | 從 HTML 建立的頁面 |
XGraphics.FromPdfPage(page)。 | 不適用 | 改用 HTML/CSS |
| <代碼>graphics.DrawString()</代碼 | HTML 文字元素 | <p>、<h1>等。 |
| <代碼>graphics.DrawImage()</代碼 | <img> 標籤 | HTML 影像 |
| <代碼>graphics.DrawLine()</代碼 | CSS 邊框 | 或 <hr> |
| <代碼>graphics.DrawRectangle()</代碼 | CSS border + div | HTML 方塊 |
new XFont() | CSS font-family | 支援的網頁字型 |
| <編碼>XBrushes.Black</編碼 | CSS 顏色 | 全彩支援 |
| <編碼>document.Save()</編碼 | <代碼>pdf.SaveAs()</代碼 | 儲存至檔案 |
| <代碼>PdfReader.Open()</代碼 | <代碼>PdfDocument.FromFile()</代碼 | 載入現有 PDF |
基於座標的設計 vs 基於 HTML 的設計
ZetPDF 與IronPDF在架構上的根本差異在於他們的文件排版方式。
ZetPDF圖形編程
ZetPDF 的 PDFSharp 基礎需要基於座標的定位:
using ZetPdf;
using ZetPdf.Drawing;
var document = new PdfDocument();
var page = document.AddPage();
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();
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");IRON VB CONVERTER ERROR developers@ironsoftware.com此方法需要建立字型物件、筆刷物件,並為每個元素指定精確的 X、Y 座標。
IronPdfHTML/CSS設計
IronPdf 使用熟悉的網路技術:
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");IRON VB CONVERTER ERROR developers@ironsoftware.comHTML 可自動處理版面設計-CSS 可提供樣式設計,無需字型物件管理,內容可在頁面間自然流動。
當團隊考慮從ZetPDF轉移到IronPDF時。
有幾種情況通常會促使開發團隊評估IronPDF作為ZetPDF的替代方案:
現代網路內容需求
從網頁型模板、儀表板或報表產生 PDF 的應用程式建置團隊,會發現基於坐標的方法有其限制。 IronPdf 的 Chromium 引擎可以渲染現代 CSS Grid、Flexbox 和JavaScript驅動的內容,這些都是基於坐標的函式庫無法完全支援的。
HTML/CSS開發人員技能
擁有強大網路開發技術的團隊會發現基於坐標的 PDF 生成的學習曲線非常陡峭。HTML 和 CSS 是廣為人知的技術,使得IronPDF的方法更容易被沒有專業 PDF 或圖形編程知識的開發人員所接受。
降低程式碼複雜度
基於坐標的 API 會產生冗長的程式碼,隨著文件佈局的演進而變得難以維護。 在ZetPDF中,一份簡單的報告可能需要數十個 DrawString 和坐標計算,而在IronPDF中則只需要幾行 HTML/CSS。
自動分頁和排版
ZetPDF 需要手動追蹤 Y 位置,並在內容超出頁面邊界時明確地建立頁面。IronPDF會根據 CSS 規則和內容流程自動處理分頁:
//IronPDF- automatic page breaks
var html = @"
<div>Page 1 content</div>
<div style='page-break-after: always;'></div>
<div>Page 2 content</div>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("multipage.pdf");//IronPDF- automatic page breaks
var html = @"
<div>Page 1 content</div>
<div style='page-break-after: always;'></div>
<div>Page 2 content</div>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("multipage.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.com進階 PDF 功能
IronPDF 為需要手動執行或使用ZetPDF外部工具的功能提供內建支援:
- 數位簽章:應用加密簽章來確保文件的真實性
- 水印:內建基於 HTML 的水印支援
- IronPDF/A Compliance:產生符合歸檔標準的文件
- 页眉和页脚:自動基於 HTML 的頁首和頁尾
- Form Filling:以程式化方式填入 PDF 表單欄位
- 密碼保護:使用使用者和所有者密碼為 PDF 加密
優勢和考慮因素
ZetPDF的優勢
- 商業支援:透過商業授權提供優先支援,確保開發人員及時獲得協助
- PDFSharp 整合:利用 PDFSharp 的核心功能,獲得許多 .NET 開發人員的認可
- 彈性授權:允許根據開發人員、專案或 OEM 需求量身打造的彈性授權模式
- 跨平台:支援多種平台,提供部署彈性
ZetPDF注意事項
- 繼承限制:由於ZetPDF是基於 PDFSharp,因此它會繼承基礎函式庫的限制。
- 有限的差異性:與直接使用 PDFSharp 相比,ZetPDF 在商業授權方面提供的令人信服的理由有限
- 基於座標的複雜性:手動定位要求增加動態文件的程式碼複雜性
IronPDF的優勢
- 完整的 HTML-to-PDF 解決方案:自動化網頁轉換所需的全面 HTML-to-PDF 功能
- 增強渲染:基於 Chromium 的呈現提供優異的網頁內容處理,直接影響輸出品質
- 進階功能:包括 PDF 表單管理、動態水印和數位簽章在內的獨特功能超越了標準的 PDF 操作。
- 主動開發:定期更新確保與現代 .NET 版本相容
.NET相容性與未來準備
這兩個函式庫都支援跨平台的 .NET 開發。IronPDF保持定期更新的積極開發,確保與 .NET 8、.NET 9 以及未來版本(包括預計在 2026 年推出的 .NET 10)的相容性。圖書館的HTML/CSS方法與現代網路開發實務一致,充分利用了 .NET 開發人員因熟悉網路技術而已經具備的技能。
結論
ZetPDF 和IronPDF代表了在 .NET 中生成 PDF 的不同方法。ZetPDF以 PDFSharp 為基礎,為熟悉基於坐標的圖形編程的開發人員提供可靠的解決方案。 其商業 License 為投資於 PDFSharp 生態系統的團隊提供支援和可靠性。
IronPdf 基於 Chromium 的方法將 PDF 生成視為網頁渲染,使開發人員能夠使用 HTML、CSS 和 JavaScript,而無需學習基於坐標的圖形 API。自動排版、分頁和現代網頁標準支援 (CSS Grid、Flexbox、ES2024 JavaScript) 大幅降低程式碼複雜度,同時產生符合現代瀏覽器渲染的輸出。
對於建立應用程式的團隊而言,若要產生網頁型報表、儀表板或動態文件,IronPDF 的方法與現代開發實務自然相符。 對於已有 PDFSharp 專業知識或有特定低階 PDF 控制需求的團隊,ZetPDF 的商業產品可在熟悉的 PDFSharp 基礎上提供支援與 License 選項。
選擇最終取決於您團隊的需求:如果您的 PDF 源自網頁內容,或者您偏好使用HTML/CSS來設計文件,IronPDF 將提供顯著的生產力優勢。 如果您是以現有的 PDFSharp 技術為基礎,或是需要ZetPDF所提供的特定授權模式,這條路徑可能會符合您的需求。
如需其他實施指導,請參閱 IronPDF 文件和涵蓋特定用例和進階功能的 教學。