比較

ZetPDF vs IronPDF:技術比較指南

當.NET開發人員評估用於文件生成和操作的 PDF 庫時,ZetPDF 是一個基於 PDFSharp 基礎構建的商業許可選項。 然而,其繼承的架構和限制為建構現代應用程式的團隊帶來了重要的考慮因素。 本次技術比較將 ZetPDF 與IronPDF進行比較,以幫助架構師和開發人員了解渲染技術、API 設計和功能完整性的根本差異。

了解 ZetPDF

ZetPDF 是一個商業授權的 PDF 庫,專為在 C# 應用程式中處理 PDF 文件而設計。 ZetPDF 基於廣泛使用的開源 PDFSharp 庫構建,為創建、修改和管理 PDF 文件提供了強大的解決方案,並提供商業支援和許可選項。

作為基於 PDFSharp 的庫,ZetPDF 繼承了其底層庫的功能和限制:

  • PDFSharp基金會:利用PDFSharp的核心功能進行商業授權 -基於座標的API:需要手動使用精確座標定位元素 -商業支援:透過商業許可提供優先支持 -靈活的授權模式:提供開發者、專案或 OEM 授權模式 -繼承的限制:繼承了 PDFSharp 的一些限制,包括有限的 HTML 轉 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 form
$vbLabelText   $csharpLabel

對於需要適應不同內容長度或需要響應式設計模式的文件佈局來說,這種方法可能會變得複雜。

了解IronPDF

IronPDF採用了一種截然不同的方法,它使用基於 Chromium 的技術來實現 HTML 到 PDF 的轉換,並完全支援 Web 標準。 IronPDF不採用基於座標的圖形編程,而是讓開發人員使用熟悉的 HTML 和 CSS 來建立文件。

主要特點包括:

  • Chromium渲染引擎:採用現代瀏覽器技術,實現精確的HTML/CSS渲染 -基於 HTML/CSS 的設計:運用網頁開發技能進行文件佈局 -完全支援JavaScript :使用 ES2024 JavaScript渲染動態網頁內容 -自動佈局:內容自然流暢,無需手動計算座標 -進階 PDF 功能:內建支援浮水印、頁首/頁尾、合併等功能

功能對比

下表重點列出了 ZetPDF 和IronPDF基於其架構方法的主要差異:

特徵ZetPDFIronPDF
基於 PDFSharp是的
HTML 轉 PDF有限的是的(完全 Chromium 渲染)
商業許可是的,永續是的
開源基金會PDFSharp(MIT許可證)鉻基
與 PDFSharp 的區別有限的完整的 HTML 轉 PDF 功能,獨特特性
簡單易用緩和高的
支援 PDF 註釋是的是的
文字擷取標準先進的
水印支持是的是的

詳細功能對比

特徵ZetPDFIronPDF
內容創作
HTML 轉 PDF有限的是的
PDF檔案的URL有限的是的
CSS 支援完整的 CSS3
JavaScript完整版 ES2024
佈局
自動佈局是的
自動分頁符是的
表格手繪HTML <table>
圖片人工放置<img> 標籤
PDF 操作
頁首/頁尾手動的HTML/CSS
水印手動代碼內建
合併PDF是的是的
拆分PDF有限的是的
數位簽名是的
PDF/A是的
發展
跨平台是的是的

API架構差異

ZetPDF 和IronPDF之間的 API 模式揭示了它們在 PDF 生成方面不同的設計理念。

ZetPDF HtmlToPdfConverter 模式

ZetPDF 提供了一個用於 HTML 轉 PDF 的 HtmlToPdfConverter 類別:

// 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");
    }
}
$vbLabelText   $csharpLabel

ConvertHtmlToPdf 方法接受 HTML 內容和輸出檔案路徑,並將結果直接寫入磁碟。

IronPDF ChromePdfRenderer 模式

IronPDF使用基於 Chromium 的渲染器,並採用 ChromePdfRenderer 類別:

// 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");
    }
}
$vbLabelText   $csharpLabel

ChromePdfRenderer傳回一個 PdfDocument 對象,該物件在儲存之前提供額外的操作功能。 有關 HTML 轉換的全面指南,請參閱HTML 轉 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");
    }
}
$vbLabelText   $csharpLabel

IronPDF實現

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

RenderUrlAsPdf 方法利用 Chromium 的渲染引擎來處理網頁,實現完整的JavaScript執行和現代 CSS 支持,從而產生與用戶在現代瀏覽器中看到的內容相符的輸出。

PDF合併操作

合併多個 PDF 文件是文件組裝工作流程中的常見需求。

ZetPDF合併模式

ZetPDF 提供了一個用於合併文件的類別:

// 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");
    }
}
$vbLabelText   $csharpLabel

MergeFiles 方法接受檔案路徑清單和輸出路徑,將合併結果直接寫入磁碟。

IronPDF靜態合併模式

IronPDF在 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");
    }
}
$vbLabelText   $csharpLabel

PdfDocument.Merge 方法傳回一個 PdfDocument 對象,從而可以在儲存之前執行其他操作,例如添加浮水印、安全設定或修改元資料。

API對應參考

正在評估從 ZetPDF 過渡到IronPDF 的團隊會發現此映射有助於理解概念等效性:

ZetPDFIronPDF
new HtmlToPdfConverter()new ChromePdfRenderer()
converter.ConvertHtmlToPdf()renderer.RenderHtmlAsPdf()
converter.ConvertUrlToPdf()renderer.RenderUrlAsPdf()
new PdfMerger()PdfDocument.Merge()
merger.MergeFiles()PdfDocument.Merge(list)
new PdfDocument()new ChromePdfRenderer()
document.AddPage()自動的
XGraphics.FromPdfPage(page)不適用
graphics.DrawString()HTML 文字元素
graphics.DrawImage()<img> 標籤
graphics.DrawLine()CSS邊框
graphics.DrawRectangle()CSS border + div
new XFont()CSS font-family
XBrushes.BlackCSS color
document.Save()pdf.SaveAs()
PdfReader.Open()PdfDocument.FromFile()

基於座標的設計與基於 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");
$vbLabelText   $csharpLabel

這種方法需要建立字體對象、畫筆對象,並為每個元素指定精確的 X、Y 座標。

IronPDF HTML/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");
$vbLabelText   $csharpLabel

HTML 可以自動處理佈局-CSS 提供樣式,無需字體物件管理,內容可以在頁面之間自然流動。

當團隊考慮從 ZetPDF 遷移到IronPDF時

在以下幾種情況下,開發團隊通常會評估IronPDF作為 ZetPDF 的替代方案:

現代網路內容需求

建立從基於 Web 的範本、儀表板或報告產生 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");
$vbLabelText   $csharpLabel

進階 PDF 功能

IronPDF為 ZetPDF 提供了內建支持,使其能夠實現一些需要手動實現或使用外部工具的功能:

-數位簽章套用加密簽章來驗證文件的真實性 -水印內建基於 HTML 的水印支持

優勢與考量

ZetPDF 的優勢

-商業支援:透過商業許可提供優先支持,確保開發人員獲得及時的幫助。

  • PDFSharp 整合:利用 PDFSharp 的核心功能,這些功能已獲得眾多.NET開發人員的認可。 -靈活的授權模式:允許根據開發者、專案或 OEM 的需求靈活自訂授權模式。 -跨平台:支援多種平台,部署靈活

ZetPDF 注意事項

-繼承的限制:由於 ZetPDF 是基於 PDFSharp,因此它繼承了底層庫的限制。 -差異化程度有限:與直接使用 PDFSharp 相比,ZetPDF 的商業許可缺乏令人信服的理由。 -基於座標的複雜度:手動定位需求會增加動態文件的程式碼複雜度

IronPDF 的優勢

-完整的 HTML 轉 PDF 解決方案:全面的 HTML 轉 PDF 功能,是實現網頁轉換自動化的必要條件 -增強渲染:基於 Chromium 的渲染技術提供更卓越的網頁內容處理能力,直接影響輸出品質。 -高級功能:獨特的功能包括 PDF 表單管理、動態浮水印和數位簽名,超越了標準的 PDF 操作。 -積極開發:定期更新確保與現代.NET版本相容

.NET相容性和未來適應性

這兩個函式庫都支援跨平台的.NET開發。 IronPDF持續進行積極開發和定期更新,確保與.NET 8、 .NET 9 以及包括預計 2026 年發布的.NET 10 在內的未來版本相容。該程式庫的 HTML/CSS 方法符合現代 Web 開發實踐,充分利用了.NET開發人員透過熟悉 Web 技術而擁有的技能。

結論

ZetPDF 和IronPDF代表了.NET中產生 PDF 的不同方法。 ZetPDF 及其 PDFSharp 基礎為熟悉基於座標的圖形程式設計的開發人員提供了一個可靠的解決方案。 其商業許可為投資於 PDFSharp 生態系統的團隊提供支援和可靠性。

IronPDF 基於 Chromium 內核,將 PDF 產生視為 Web 渲染,使開發人員能夠使用 HTML、CSS 和JavaScript,而無需學習基於座標的圖形 API。自動佈局、分頁符號和對現代 Web 標準(CSS Grid、Flexbox、ES2024 JavaScript)的支持,顯著降低了程式碼複雜度,同時產生與現代瀏覽器渲染效果相符的輸出。

對於建立產生基於 Web 的報告、儀表板或動態文件的應用程式的團隊來說,IronPDF 的方法自然而然地與現代開發實踐相契合。 對於擁有 PDFSharp 專業知識或對底層 PDF 控制有特定要求的團隊,ZetPDF 的商業產品圍繞著熟悉的 PDFSharp 基礎提供支援和授權選項。

最終的選擇取決於您團隊的需求:如果您的 PDF 文件源自網頁內容,或者您​​更喜歡使用 HTML/CSS 進行文件設計,那麼IronPDF將提供顯著的生產力優勢。 如果您希望在現有 PDFSharp 技能的基礎上繼續發展,或者需要 ZetPDF 提供的特定授權模式,那麼這條途徑可能適合您的需求。

如需更多實施指導,請查閱IronPDF文件教程,其中涵蓋具體用例和高級功能。