跳過到頁腳內容
遷移指南

如何用 C# 從 ZetPDF 轉移到 IronPDF

從ZetPDF移轉到 IronPDF:完整的 C# 開發人員指南。

ZetPDF 是適用於 C# 應用程式的商業授權 PDF 函式庫,建構在廣泛使用的開放原始碼 PDFSharp 函式庫的基礎上。 雖然ZetPDF提供了商業支援和基本的 PDF 操作功能,但它繼承了 PDFSharp 基礎的重大限制。 最值得注意的是,該函式庫依賴於基於坐標的圖形編程,與現代的替代方案相比,其提供的 HTML 至 PDF 轉換功能有限。

本指南提供了從ZetPDF到IronPDF的完整轉換路徑,為評估此轉換的 .NET 專業開發人員提供了分步說明、程式碼比較以及實用範例。

為何要從ZetPDF遷移?

ZetPDF 作為 PDFSharp 的分支,繼承了相同的架構限制,限制了其對現代文件產生工作流程的有效性。 開發團隊考慮遷移的主要原因包括

基於座標的 API:ZetPDF 強制開發人員以精確的座標定位每個元素。 每個元素的複雜手動定位會隨著需求的改變而產生維護上的挑戰。

有限的 CSS 支援:沒有造型系統意味著每個元素都需要手動進行字型和顏色管理。

無 JavaScript 渲染功能:無法在 PDF 生成過程中渲染動態 Web 內容或執行 JavaScript。

有限的獨特產品:與直接免費使用 PDFSharp 相比,ZetPDF 提供的商業授權理由很少。

手動分頁:必須手動計算和管理頁面溢出,而非依賴自動分頁。

需要測量文字:手動計算文字包圍會產生額外的開發開銷。

基本問題

ZetPDF 和 PDFSharp 強制您以精確的座標定位每個元素:

// ZetPDF: 手動的 positioning nightmare
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 nightmare
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
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF 使用 HTML/CSS--排版引擎處理一切:

// IronPDF: Simple HTML
var html = @"
<p><strong>Name:</strong> John Doe</p>
<p><strong>Address:</strong> 123 Main St</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
// IronPDF: Simple HTML
var html = @"
<p><strong>Name:</strong> John Doe</p>
<p><strong>Address:</strong> 123 Main St</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFvs ZetPDF:功能比較

了解架構上的差異有助於技術決策者評估遷移投資:

特點ZetPDFIronPDF
以 PDFSharp 為基礎
HTML 至 PDF 轉檔限額是 (完整 Chromium)
商業授權是的,永久
開放原始碼基金會PDFSharp (MIT 授權)基於 Chromium
CSS 支援完整的 CSS3
JavaScript完整的 ES2024
自動排版
自動分頁
表格手繪HTML <table>
頁首/頁腳手動的HTML/CSS
水印手冊程式碼內建
合併 PDF 文件限額
分割 PDFs限額
數位簽名
PDF/A
簡單易用緩和高的

快速入門:ZetPDF 到IronPDF的遷移。

只要完成這些基本步驟,就可以立即開始遷移。

步驟 1:取代 NuGet 套件

移除 ZetPDF:

# Remove ZetPDF
dotnet remove package ZetPDF
# Remove ZetPDF
dotnet remove package ZetPDF
SHELL

安裝 IronPDF:

# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
SHELL

步驟 2:更新命名空間

用 IronPdf 命名空間取代ZetPDF命名空間:

// Before (ZetPDF)
using ZetPdf;
using ZetPdf.Drawing;
using ZetPdf.Fonts;

// After (IronPDF)
using IronPdf;
// Before (ZetPDF)
using ZetPdf;
using ZetPdf.Drawing;
using ZetPdf.Fonts;

// After (IronPDF)
using IronPdf;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

步驟 3:初始化授權

在應用程式啟動時加入授權初始化:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

程式碼遷移範例

將 HTML 轉換為 PDF

HTML-to-PDF 的操作展示了這些 .NET PDF 函式庫的 API 差異。

ZetPDF 方法:

// 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.com
$vbLabelText   $csharpLabel

IronPDF 方法:

// 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.com
$vbLabelText   $csharpLabel

ZetPDF 使用<編碼>HtmlToPdfConverter</編碼與<代碼>ConvertHtmlToPdf()</代碼直接寫入檔案路徑。IronPDF提供<代碼>ChromePdfRenderer</代碼與返回 PdfDocument 物件的<代碼>RenderHtmlAsPdf()</代碼,讓您對輸出有更多的彈性 - 您可以儲存到檔案、取得二進位資料或在儲存前執行其他操作。

如需進階的 HTML 至IronPDF情境,請參閱 HTML 至 PDF 轉換指南

將 URL 轉換為 PDF

URL 至 PDF 的轉換可清楚顯示模式差異。

ZetPDF 方法:

// 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.com
$vbLabelText   $csharpLabel

IronPDF 方法:

// 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.com
$vbLabelText   $csharpLabel

ZetPDF 使用與<代碼>ConvertUrlToPdf()</代碼相同的<編碼>HtmlToPdfConverter</編碼類。IronPDF在<代碼>ChromePdfRenderer</代碼上提供<代碼>RenderUrlAsPdf()</代碼功能,該功能利用完整的 Chromium 渲染引擎來準確捕捉網頁,包括 JavaScript 執行和現代 CSS。

探索URL至PDF文件的認證和自訂標頭選項。

合併多個 PDF 文件

PDF 合併顯示在處理文件的方式上有顯著的 API 差異。

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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF 方法:

// 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.com
$vbLabelText   $csharpLabel

ZetPDF 使用專用的<編碼>PdfMerger</編碼類,該類使用 MergeFiles() 對檔案路徑進行操作。IronPDF使用<代碼>PdfDocument.FromFile()</代碼將文件載入為 PdfDocument 物件,然後用靜態<代碼>PdfDocument.Merge()</代碼方法合併文件。 這種物件導向的方法可在儲存之前對合併後的文件進行其他操作。

探索 IronPDF合併文件,以獲得其他合併選項。

基於座標的繪圖 vs HTML

對於擁有使用基於座標的圖形的現有ZetPDF程式碼的開發人員而言,遷移路徑包括將繪圖指令轉換為 HTML/CSS。

ZetPDF 基於座標的方法:

using ZetPdf;
using ZetPdf.Drawing;

var document = new PdfDocument();
var page = document.AddPage();
page.Width = XUnit.FromMillimeter(210);
page.Height = XUnit.FromMillimeter(297);

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();
page.Width = XUnit.FromMillimeter(210);
page.Height = XUnit.FromMillimeter(297);

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
$vbLabelText   $csharpLabel

IronPDF HTML 方法:

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.com
$vbLabelText   $csharpLabel

ZetPDF 方法需要建立字型物件、計算精確的像素位置,以及手動管理圖形上下文。 IronPdf 的方法使用網頁開發人員已經熟悉的標準 HTML 和 CSS - 透過熟悉的 CSS 屬性來處理字型、顏色和排版。

ZetPDFAPI 到IronPDF的映射參考。

此對應可透過顯示直接的 API 對應關係來加速遷移:

ZetPDFIronPDF筆記
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 + divHTML 方塊
new XFont()CSS font-family支援的網頁字型
<編碼>XBrushes.Black</編碼CSS 顏色全彩支援
<編碼>document.Save()</編碼<代碼>pdf.SaveAs()</代碼儲存至檔案
<代碼>PdfReader.Open()</代碼<代碼>PdfDocument.FromFile()</代碼載入現有 PDF
<編碼>HtmlToPdfConverter</編碼<代碼>ChromePdfRenderer</代碼HTML 轉換
<代碼>ConvertHtmlToPdf()</代碼<代碼>RenderHtmlAsPdf()</代碼HTML 字串至 PDF
<代碼>ConvertUrlToPdf()</代碼<代碼>RenderUrlAsPdf()</代碼URL 至 PDF
<編碼>PdfMerger</編碼<代碼>PdfDocument.Merge()</代碼結合 PDF

常見的遷移問題與解決方案

問題 1:基於座標的佈局

ZetPDF:所有內容都需要精確的 X、Y 座標與手動定位。

解決方案: 使用HTML/CSS流程排版。 需要絕對定位時,請使用 CSS:

.positioned-element {
    position: absolute;
    top: 100px;
    left: 50px;
}

第 2 期:字型物件管理

ZetPDF: 為每個字型變化建立 XFont 物件。

解決方案:使用 CSS font-family-字型會自動處理:

<style>
    body { font-family: Arial, sans-serif; }
    h1 { font-family: 'Times New Roman', serif; font-size: 24px; font-weight: bold; }
</style>
<style>
    body { font-family: Arial, sans-serif; }
    h1 { font-family: 'Times New Roman', serif; font-size: 24px; font-weight: bold; }
</style>
HTML

第 3 期:顏色處理

ZetPDF: 使用 XBrushes 和顏色物件。

解決方案:使用標準的 CSS 顏色:

.header { color: navy; background-color: #f5f5f5; }
.warning { color: rgb(255, 0, 0); }

問題 4:手冊分頁

ZetPDF:追蹤 Y 位置,並在內容溢出時手動建立新頁面。

解決方案:IronPDF可處理自動分頁。 若要明確控制,請使用 CSS:

.section { page-break-after: always; }
.keep-together { page-break-inside: avoid; }

問題 5:表格建立

ZetPDF: 需要手繪矩形、線條和文字定位。

解決方案:使用標準的 HTML 表格與 CSS 造型:

<table style="border-collapse: collapse; width: 100%;">
    <tr>
        <th style="border: 1px solid black; padding: 8px;">Header</th>
    </tr>
    <tr>
        <td style="border: 1px solid black; padding: 8px;">Data</td>
    </tr>
</table>
<table style="border-collapse: collapse; width: 100%;">
    <tr>
        <th style="border: 1px solid black; padding: 8px;">Header</th>
    </tr>
    <tr>
        <td style="border: 1px solid black; padding: 8px;">Data</td>
    </tr>
</table>
HTML

ZetPDF遷移清單

遷移前的任務

審核您的程式碼庫,找出所有ZetPDF的使用情況:

grep -r "using ZetPDF" --include="*.cs" .
grep -r "HtmlToPdfConverter\|PdfMerger\|XGraphics" --include="*.cs" .
grep -r "using ZetPDF" --include="*.cs" .
grep -r "HtmlToPdfConverter\|PdfMerger\|XGraphics" --include="*.cs" .
SHELL

需要轉換為 HTML 的文件基於坐標的繪圖代碼。 請注意字型和顏色的使用模式。 將版面結構映射至 HTML 對應項目。

程式碼更新任務

1.移除ZetPDFNuGet 套件 2.安裝 IronPdf NuGet 套件 3.更新命名空間匯入,從 ZetPDFIronPdf 4.將<編碼>HtmlToPdfConverter</編碼替換為 ChromePdfRenderer 5.將<代碼>ConvertHtmlToPdf()</代碼呼叫轉換為<代碼>RenderHtmlAsPdf()</代碼+ SaveAs() 6.將<代碼>ConvertUrlToPdf()</代碼呼叫轉換為<代碼>RenderUrlAsPdf()</代碼+ SaveAs() 7.將 PdfMerger.MergeFiles() 替換為<代碼>PdfDocument.Merge()</代碼。 8.將 DrawString() 呼叫轉換為 HTML 文字元素 9.將 XFont 轉換為 CSS font-family 10.將 XBrushes 替換為 CSS 顏色 11.在啟動時增加 IronPdf 授權初始化功能

後遷移測試

轉移後,驗證這些方面:

  • 比較視覺輸出,確保外觀符合或改善
  • 驗證字型在 CSS 設定下是否呈現預期效果
  • 使用自動分頁功能測試分頁是否正確
  • 確認圖片的位置和顯示是否正確
  • 測試 PDF 合併作業是否產生正確的輸出
  • 確認所有現有功能都能在新的實作下運作

遷移到IronPDF的主要優點。

從ZetPDF轉移到IronPDF提供了幾個關鍵優勢:

現代 Chromium 渲染引擎:IronPDF 使用 Chromium 進行 HTML 到 PDF 的轉換,確保完全支援 CSS3 和 ES2024 JavaScript。 現代框架和回應式設計能正確呈現。

以 HTML 為基礎的內容創作:網頁開發人員可以利用現有的 HTML 和 CSS 技能。 不需要學習基於座標的繪圖 API 或管理字型物件。

自動排版和分頁:自動進行文字包裝、分頁和流程排版。 不需要手動計算元素位置。

簡化的 API:常用操作的單一方法呼叫。<代碼>PdfDocument.Merge()</代碼取代了複雜的檔案路徑處理模式。

主動開發:隨著 .NET 10 和 C# 14 的採用增加至 2026 年,IronPDF 的定期更新可確保與目前和未來的 .NET 版本相容。

全面的功能集:內建水印、數位簽章、PDF/A 合規性,以及ZetPDF所缺乏的進階 PDF 操作功能。

結論

ZetPDF 透過其 PDFSharp 基礎提供基本的 PDF 操作功能。 然而,其基於坐標的圖形編程方式、有限的 HTML 支援,以及缺乏現代化功能,為文件產生工作帶來不必要的複雜性。

IronPDF 將 PDF 生成從圖形編程練習轉變為熟悉的HTML/CSS開發。 轉換路徑很直接:取代 NuGet 套件、更新轉換器類別,並利用 HTML 來建立內容。

立即使用 免費試用 IronPDF 開始您的遷移,體驗基於 Chromium 的簡單文件生成。

如需全面的實施指導,請探索 IronPDF 文件教學

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。