跳至頁尾內容
遷移指南

如何用 C# 從 ZetPDF 轉移到 IronPDF

ZetPDF (zetpdf.com) 是一個商業授權的 .NET PDF SDK,其 API 面貌與 PDFsharp 相似,甚至 PDFsharp 社群已經質疑這是否是封閉的分支。 供應商將其推銷為專有的,完全由受控程式碼組成的引擎。ZetPDF不通過 NuGet 發行——只能從 https://zetpdf.com/download/ 下載 ZIP,而這個專案自 2021 年以來沒有任何公開發行活動。價格是永久性的:$299 單一專案 / $449 多專案 / $599 OEM。

本指南提供從 ZetPDF 遷移到IronPDF的路徑,包括逐步指導、程式碼比較和 .NET 開發者評估此遷移的範例。

為何要從 ZetPDF 遷移

ZetPDF 的 PDFsharp 模式,基於座標繪圖的 API 限制了現代文件生成的工作流程。 團隊考慮遷移的常見原因:

基於座標的 API: ZetPDF 透過 XGraphics 座標定位每個元素。 需求變更會導致手動定位建立維護負擔。

不支援 CSS: 沒有樣式系統——字體和顏色在程式碼中每個元素上單獨管理。

不支援 JavaScript 渲染: 無法在 PDF 生成過程中渲染動態網頁內容或執行 JavaScript。

沒有原生 HTML-to-PDF: ZetPDF 的功能列表中不包含 HTML-to-PDF 或 URL-to-PDF 轉換器; 僅有低階的 XGraphics 繪圖。

沒有 NuGet,發行停滯: 到目前為止,分發是由供應商 ZIP 提供,而在 https://zetpdf.com/download/ 自 2021 年以來無公開的發行活動。

手動頁面分隔: 必須手動計算並管理頁面溢出,不能自動分頁。

需要文字測量: 對於文字換行的手動計算增加了開發負擔。

基本問題

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
' 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
$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);
' IronPDF: Simple HTML
Dim html As String = "
<p><strong>Name:</strong> John Doe</p>
<p><strong>Address:</strong> 123 Main St</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

IronPDFvs ZetPDF:功能比較

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

功能 ZetPDF IronPDF
API 風格 PDFsharp 模式 XGraphics 繪圖 高階 HTML 渲染
HTML到PDF轉換 不在文件功能列表中 是 (全 Chromium)
商業授權 是,永久($299 / $449 / $599)
分佈 ZIP 下載(無 NuGet 套件) NuGet (IronPdf)
上次公開活動 自 2021 年以來沒有發行列表 活躍,經常性發布
CSS 支援 完整支持 CSS3
JavaScript 完整的ES2024
自動佈局
自動頁面分隔
表格 手動繪圖 HTML
頁首/頁尾 手動 HTML/CSS
水印 手動程式碼 內建
合併PDF 沒有一流助手
分割PDF 沒有一流助手
數位簽名
PDF/A

快速入門:ZetPDF 到IronPDF遷移

可以立即透過這些基本步驟開始遷移。

步驟1:將 ZetPDF 參考替換為IronPDFNuGet 套件

ZetPDF 不是在 NuGet 上——它作為 https://zetpdf.com/download/ 的 ZIP 發佈,通過新增 ZetPDF.dll 到您的專案中進行引用。 遷移後,您將刪除該 DLL 參考並從 NuGet 中安裝 IronPDF:

# Remove the ZetPDF.dll reference from your csproj manually, then:
dotnet add package IronPdf
# Remove the ZetPDF.dll reference from your csproj manually, then:
dotnet add package IronPdf
SHELL

步驟 2:更新命名空間

將 ZetPDF 命名空間替換為IronPDF命名空間:

// 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;
Imports IronPdf
$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

ZetPDF 發佈的功能列表中不包括原生 HTML-to-PDF 或 URL-to-PDF 轉換器——其功能僅包含 PDF 查看/列印、註解、AES256 加密、表單欄位和文字擷取。 以下虛擬包裝展示了團隊通常如何在 ZetPDF 上建立 HTML-to-PDF 入口點; 實際操作中,工作轉而依賴於外部 HTML 渲染器或低階 XGraphics 繪圖。

ZetPDF 方法(示範——無原生 HTML-to-PDF):

// ZetPDF is NOT on NuGet — install via SDK ZIP from https://zetpdf.com/download/
using ZetPDF;
using System;

class Program
{
    static void Main()
    {
        // 否 native HtmlToPdfConverter exists in ZetPDF — illustrative call only.
        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 is NOT on NuGet — install via SDK ZIP from https://zetpdf.com/download/
using ZetPDF;
using System;

class Program
{
    static void Main()
    {
        // 否 native HtmlToPdfConverter exists in ZetPDF — illustrative call only.
        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()
        ' 否 native HtmlToPdfConverter exists in ZetPDF — illustrative call only.
        Dim converter As New HtmlToPdfConverter()
        Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
        converter.ConvertHtmlToPdf(htmlContent, "output.pdf")
        Console.WriteLine("PDF created successfully")
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF 方法:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        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()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        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

Module Program
    Sub Main()
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
        Dim renderer As New ChromePdfRenderer()
        Dim htmlContent As String = "<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 Module
$vbLabelText   $csharpLabel

IronPDF 提供 ChromePdfRendererRenderHtmlAsPdf(),這會返回 PdfDocument 物件——您可以保存到檔案中,檢索二進制資料,或在保存之前執行其他操作。

如需進階 HTML 到 PDF 的場景,請參見 HTML 到 PDF 轉換指南

將 URL 轉換為 PDF

ZetPDF 也沒有原生 URL-to-PDF 轉換器; HTML/URL 渲染不在文件功能列表中。常見的遷移路徑通常是將 ZetPDF 與外部 HTML 渲染器配對,或者移向基於 Chromium 的程式庫如 IronPDF。

ZetPDF 方法(示範——無原生 URL-to-PDF):

// ZetPDF is NOT on NuGet — install via SDK ZIP from https://zetpdf.com/download/
using ZetPDF;
using System;

class Program
{
    static void Main()
    {
        // 否 native ConvertUrlToPdf exists in ZetPDF — illustrative call only.
        var converter = new HtmlToPdfConverter();
        var url = "https://www.example.com";
        converter.ConvertUrlToPdf(url, "webpage.pdf");
        Console.WriteLine("PDF from URL created successfully");
    }
}
// ZetPDF is NOT on NuGet — install via SDK ZIP from https://zetpdf.com/download/
using ZetPDF;
using System;

class Program
{
    static void Main()
    {
        // 否 native ConvertUrlToPdf exists in ZetPDF — illustrative call only.
        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()
        ' 否 native ConvertUrlToPdf exists in ZetPDF — illustrative call only.
        Dim converter As New HtmlToPdfConverter()
        Dim url As String = "https://www.example.com"
        converter.ConvertUrlToPdf(url, "webpage.pdf")
        Console.WriteLine("PDF from URL created successfully")
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF 方法:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        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()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        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

Module Program
    Sub Main()
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
        Dim renderer As New ChromePdfRenderer()
        Dim url As String = "https://www.example.com"
        Dim pdf = renderer.RenderUrlAsPdf(url)
        pdf.SaveAs("webpage.pdf")
        Console.WriteLine("PDF from URL created successfully")
    End Sub
End Module
$vbLabelText   $csharpLabel

IronPDF 的 RenderUrlAsPdf()ChromePdfRenderer 上利用了完整的 Chromium 渲染引擎進行網頁捕獲,包括 JavaScript 執行和現代 CSS。

查看 URL 到 PDF 文件,了解認證和自定義標頭選項。

合併多個 PDF

ZetPDF 未提供一條 PdfMerger.MergeFiles() 幫助指令。 合併遵循與 PDFsharp(ZetPDF 類似)相同的模式:使用 PdfReader 打開每個輸入,然後將頁面迴圈進入輸出 PdfDocumentSave()。 以下展示的虛擬包裝模擬了IronPDF的介面以作比較; 在實際的 ZetPDF 程式碼中,您需要自己撰寫手動迴圈。

ZetPDF 方法(示範——無內建 Pdf 合併器):

// ZetPDF is NOT on NuGet — install via SDK ZIP from https://zetpdf.com/download/
using ZetPDF;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // ZetPDF has no built-in PdfMerger — illustrative call only.
        var merger = new PdfMerger();
        var files = new List<string> { "document1.pdf", "document2.pdf" };
        merger.MergeFiles(files, "merged.pdf");
        Console.WriteLine("PDFs merged successfully");
    }
}
// ZetPDF is NOT on NuGet — install via SDK ZIP from https://zetpdf.com/download/
using ZetPDF;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // ZetPDF has no built-in PdfMerger — illustrative call only.
        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

Module Program
    Sub Main()
        ' ZetPDF has no built-in PdfMerger — illustrative call only.
        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 Module
$vbLabelText   $csharpLabel

IronPDF 方法:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        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()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        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()
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
        Dim pdfs As New List(Of PdfDocument) From {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf")
        }
        Dim merged As PdfDocument = PdfDocument.Merge(pdfs)
        merged.SaveAs("merged.pdf")
        Console.WriteLine("PDFs merged successfully")
    End Sub
End Module
$vbLabelText   $csharpLabel

IronPDF 使用 PdfDocument.FromFile() 作為 PdfDocument 物件載入檔案,然後使用靜態 PdfDocument.Merge() 方法合併。 面向物件的方法允許在保存之前執行附加的合併檔案操作。

探索 PDF 合併文件 了解更多合併選項。

基於座標的繪圖 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");
Imports ZetPDF
Imports ZetPDF.Drawing

Dim document As New PdfDocument()
Dim page = document.AddPage()
page.Width = XUnit.FromMillimeter(210)
page.Height = XUnit.FromMillimeter(297)

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

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

ZetPDF 方法需要建立字體物件、計算精確的像素位置,並手動管理圖形操作。IronPDF方法使用網頁開發者已經熟悉的標準 HTML 和 CSS——字體、顏色和布局通過熟悉的 CSS 屬性進行處理。

ZetPDF API 與IronPDF映射參考

此映射透過展示直接的 API 等價加速遷移:

ZetPDF IronPDF
new PdfDocument() new ChromePdfRenderer()
document.AddPage() 自動
XGraphics.FromPdfPage(page) 無(改用 HTML/CSS)
graphics.DrawString() HTML文字元素
graphics.DrawImage() 標籤
graphics.DrawLine() CSS 邊框 /
graphics.DrawRectangle() CSS border + div
new XFont() CSS font-family
XBrushes.Black CSS color
document.Save() pdf.SaveAs()
PdfReader.Open() PdfDocument.FromFile()
(no native HTML-to-PDF) ChromePdfRenderer.RenderHtmlAsPdf()
(no native URL-to-PDF) ChromePdfRenderer.RenderUrlAsPdf()
(manual page-copy loop) PdfDocument.Merge()

常見遷移問題及解決方案

問題 1:基於座標的佈局

ZetPDF: 所有都需要精確的 X, Y 座標手動定位。

解決方案:使用HTML/CSS流佈置。 當需要絕對定位時,請使用 CSS:

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

問題 2:字體物件管理

ZetPDF: 為每種字體變化建立 XFont 物件。

解決方案:使用 CSS 字體家族——字體自動處理:

<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 "XGraphics\|XFont\|XBrushes\|PdfReader" --include="*.cs" .
grep -r "using ZetPDF" --include="*.cs" .
grep -r "XGraphics\|XFont\|XBrushes\|PdfReader" --include="*.cs" .
SHELL

記錄基於座標的圖表程式碼需要轉換成 HTML。 註記字體和顏色使用模式。 將布局結構映射到 HTML 對應項。

程式碼更新任務

  1. 從您的 .csproj 移除手動 ZetPDF.dll 參考
  2. 安裝IronPDFNuGet 套件 ( dotnet add package IronPdf )
  3. 更新名稱空間的導入,從 ZetPDFIronPdf
  4. 使用 ChromePdfRenderer.RenderHtmlAsPdf() 替換任何以 ZetPDF 為基礎的自製 HTML-to-PDF 包裝器
  5. 將任何 URL-to-PDF 包裝器替換為 ChromePdfRenderer.RenderUrlAsPdf()
  6. 將手動頁面拷貝合併迴圈替換為 PdfDocument.Merge()
  7. DrawString() 調用轉換為 HTML文字元素
  8. XFont 轉換為 CSS font-family
  9. 使用 CSS 顏色替換 XBrushes
  10. 在啟動時新增IronPDF授權初始化 (IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";)

遷移後測試

遷移後,驗證以下方面:

  • 比較視覺輸出以確保外觀匹配或改善
  • 驗證字體是否隨 CSS 樣式正確渲染
  • 測試頁面分頁是否能正確自動分頁
  • 驗證圖像的位置和顯示是否正確
  • 測試 PDF 合併操作以產生正確的輸出
  • 確保所有現有功能在新實施中均能正常運作

遷移到IronPDF的關鍵好處

從 ZetPDF 遷移到IronPDF提供若干重要的優勢:

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

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

自動布局和分頁: 文字換行、頁面分隔和流動布局自動發生。 不需要手算元素位置。

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

積極的開發:IronPDF定期發布的更新使圖書館能夠持續支持最新的 .NET 版本,這不同於 ZetPDF 自 2021 年以來無公開發行活動。

完善的功能集: 內建的浮水印、數位簽名、PDF/A 合規及先進的 PDF 操作特性在 ZetPDF 的文件表面上是缺乏的。

請注意PDFSharp 和 ZetPDF 是各自所有者的註冊商標。 本網站與 ZetPDF 或 empira Software GmbH 無關、未被批准或贊助。) 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供參考,反映撰寫時公開可用的資訊。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話