比較

ZetPDF與IronPDF:技術比較指南

當.NET開發者評估用於文件生成和操作的PDF程式庫時,ZetPDF作為基於PDFSharp基礎構建的商業授權選項顯示出來。 然而,其繼承的架構和限制為構建現代應用程式的團隊提出了重要考量。 此技術比較檢視ZetPDF與IronPDF,幫助架構師和開發者了解在渲染技術、API設計和功能完整性方面的基本差異。

了解ZetPDF

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

作為一個基於PDFSharp的程式庫,它繼承了其基礎的功能和限制:

  • 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
' 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轉換。 而非基於座標的圖形程式設計,IronPDF允許開發者使用熟悉的HTML和CSS來創建文件。

主要特徵包括:

  • Chromium渲染引擎:使用現代瀏覽器技術來準確渲染HTML/CSS
  • 基於HTML/CSS的設計:利用網頁開發技能來進行文件佈局
  • 完整的JavaScript支持:使用ES2024 JavaScript渲染動態網頁內容
  • 自動佈局:內容自然流動,無需手動計算座標
  • 高級PDF功能:內置支持水印、頁眉/頁腳、合併等功能

功能比較

以下表格重點介紹了基於其架構方法的ZetPDF和IronPDF之間的主要差異:

功能ZetPDFIronPDF
基於PDFSharp沒有
HTML 到 PDF 轉換有限是(完整的Chromium渲染)
商業授權是,永久
開源基礎PDFSharp(MIT授權)基於Chromium
與PDFSharp的區別有限完整的HTML到PDF,具有獨特能力
簡單性和易用性中等High
支持PDF註釋
文本提取標準高級
水印支持

詳細功能比較

功能ZetPDFIronPDF
內容創建
HTML到PDF有限
URL到PDF有限
CSS支持沒有完整的CSS3
JavaScript沒有完整的ES2024
佈局
自動佈局沒有
自動頁面中斷沒有
表格手動繪製HTML <table>
圖像手動放置<img> tag
PDF 操作
頁首/頁尾手動HTML/CSS
水印手動代碼內建
合併PDF
分割PDF有限
數位簽名沒有
PDF/A沒有
開發
跨平台

API架構差異

ZetPDF和IronPDF之間的API模式揭示了圍繞PDF生成的不同設計理念。

ZetPDFHtmlToPdfConverter模式

該程式庫提供一個HtmlToPdfConverter類進行HTML到PDF轉換:

//ZetPDF— download from zetpdf.com
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");
    }
}
//ZetPDF— download from zetpdf.com
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");
    }
}
Imports ZetPDF
Imports System

Class Program
    Shared Sub Main()
        Dim converter = New HtmlToPdfConverter()
        Dim htmlContent = "<html><body><h1>Hello World</h1></body></html>"
        converter.ConvertHtmlToPdf(htmlContent, "output.pdf")
        Console.WriteLine("PDF created successfully")
    End Sub
End Class
$vbLabelText   $csharpLabel

ConvertHtmlToPdf方法接受HTML內容和輸出文件路徑,然後將結果直接寫入磁碟。

IronPDFChromePdfRenderer模式

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");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim htmlContent = "<html><body><h1>Hello World</h1></body></html>"
        Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
        pdf.SaveAs("output.pdf")
        Console.WriteLine("PDF created successfully")
    End Sub
End Class
$vbLabelText   $csharpLabel

ChromePdfRenderer返回一個PdfDocument對象,提供在保存之前的額外操作能力。 欲獲取完整的HTML轉換指南,請參閱HTML轉PDF指南

URL到PDF的轉換

將即時網頁轉換為PDF文件展示了每個程式庫的網頁渲染方法的能力。

ZetPDF實現

該程式庫還通過其HtmlToPdfConverter類處理URL轉換:

//ZetPDF— download from zetpdf.com
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");
    }
}
//ZetPDF— download from zetpdf.com
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");
    }
}
Imports ZetPDF
Imports System

Class Program
    Shared Sub Main()
        Dim converter = New HtmlToPdfConverter()
        Dim url = "https://www.example.com"
        converter.ConvertUrlToPdf(url, "webpage.pdf")
        Console.WriteLine("PDF from URL created successfully")
    End Sub
End Class
$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");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim url = "https://www.example.com"
        Dim pdf = renderer.RenderUrlAsPdf(url)
        pdf.SaveAs("webpage.pdf")
        Console.WriteLine("PDF from URL created successfully")
    End Sub
End Class
$vbLabelText   $csharpLabel

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

PDF合併操作

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

ZetPDF合併模式

該程式庫提供一個PdfMerger類用於合併文件:

//ZetPDF— download from zetpdf.com
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");
    }
}
//ZetPDF— download from zetpdf.com
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");
    }
}
Imports ZetPDF
Imports System
Imports System.Collections.Generic

Class Program
    Shared Sub Main()
        Dim merger As New PdfMerger()
        Dim files As New List(Of String) From {"document1.pdf", "document2.pdf"}
        merger.MergeFiles(files, "merged.pdf")
        Console.WriteLine("PDFs merged successfully")
    End Sub
End Class
$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");
    }
}
Imports IronPdf
Imports System
Imports System.Collections.Generic

Module Program
    Sub Main()
        Dim pdfs As New List(Of PdfDocument) From {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf")
        }
        Dim merged = PdfDocument.Merge(pdfs)
        merged.SaveAs("merged.pdf")
        Console.WriteLine("PDFs merged successfully")
    End Sub
End Module
$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> tag
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");
Imports ZetPdf
Imports ZetPdf.Drawing

Dim document As New PdfDocument()
Dim page = document.AddPage()
Dim graphics = XGraphics.FromPdfPage(page)
Dim titleFont As New XFont("Arial", 24, XFontStyle.Bold)
Dim bodyFont As 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坐標。

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");
Imports IronPdf

Dim html As String = $"
<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>"

Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("report.pdf")
$vbLabelText   $csharpLabel

HTML自動處理佈局—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。

自動頁面中斷和佈局

該程式庫需要手動跟蹤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");
Dim html As String = "
<div>Page 1 content</div>
<div style='page-break-after: always;'></div>
<div>Page 2 content</div>"

Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("multipage.pdf")
$vbLabelText   $csharpLabel

高級PDF特性

IronPDF提供內建支援功能,這些功能在基於座標的方法中需要手動實現或借助外部工具:

優勢與考量

ZetPDF優勢

  • 商業支援:通過商業授權提供優先支援,以確保開發者獲得及時的協助
  • PDFSharp整合:利用PDFSharp的核心功能,為許多.NET開發者所認可

ZetPDF考量

  • 繼承的限制:由於基於PDFSharp,該程式庫繼承了底層框架的限制
  • 有限的差異化:與直接使用PDFSharp相比,商業授權提供的附加價值有限
  • 基於座標的複雜性:手動定位需求增加了動態文件代碼的複雜性

IronPDF的優勢

  • 完整的HTML到PDF解決方案:全面的HTML到PDF功能對於自動化網頁轉換是必不可少的
  • 改進的渲染:基於Chromium的渲染提供卓越的網頁內容處理,直接影響輸出質量
  • 高級功能:包括PDF表單管理、動態水印和數位簽名等獨特能力,超越了標準的PDF操作
  • 積極開發:定期的更新確保與現代.NET版本的相容性

.NET兼容性和未來準備

兩個程式庫均支援跨平台.NET開發。 IronPDF保持積極開發,並進行定期更新,確保與.NET 8、.NET 9,以及預計在2026年發布的.NET 10兼容。該程式庫的HTML/CSS方法與現代網頁開發實踐相一致,利用.NET開發者通過網頁技術的熟悉度已經擁有的技能。

結論

ZetPDF和IronPDF代表了在.NET中不同的PDF生成方法。 ZetPDF,藉助其PDFSharp基礎,為熟悉基於座標圖形程式設計的開發者提供了一個可靠的解決方案。 其商業授權為投身於PDFSharp生態系統的團隊提供支援和可靠性。

IronPDF的基於Chromium的方法將PDF生成視為網頁渲染,使開發者能夠使用HTML、CSS和JavaScript,而不是學習基於座標的圖形API。自動佈局、頁面中斷和現代網頁標準支持(CSS Grid、Flexbox、ES2024 JavaScript)大大減少代碼複雜性,同時產生匹配現代瀏覽器渲染的輸出。

對於構建基於網頁的報告、儀表板或動態文檔的應用程式的團隊而言,IronPDF的方法與現代開發實踐自然對接。 對於具有現有PDFSharp專業知識或圍繞低級PDF控制的特定需求的團隊,ZetPDF的商業產品提供了解決方案,並在熟悉的PDFSharp基礎上提供支持和授權選項。

最終的選擇取決於您的團隊需求:如果您的PDF來自網頁內容或您更喜歡使用HTML/CSS設計文檔,那麼IronPDF提供了顯著的生產力優勢。 如果您正在利用現有的PDFSharp技能或需要ZetPDF提供的特定授權模式,那此路也許符合您的需求。

欲瞭解更多實施指導,請探索IronPDF文檔教程,涵蓋具體使用案例和高級功能。

請注意PDFSharp和ZetPDF是其各自所有者的註冊商標。 本網站與ZetPDF或empira Software GmbH沒有關聯、認可或贊助。 所有產品名稱、標誌及商標均為其各自所有者的財產。 比較僅供信息參考,反映在寫作時公開的相關信息。)}]