IRONSOFTWAREHOME
影片

如何在 .NET 10 中使用 C# 將 HTML 轉換為 PDF | IronPDF for .NET

Curtis Chau
Curtis Chau
Updated: 2026年7月19日

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

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

##IronPDFvs ZetPDF:功能比較

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

功能ZetPDFIronPDF
API 風格PDFsharp 模式 XGraphics 繪圖高階 HTML 渲染
HTML到PDF轉換不在文件功能列表中是 (全 Chromium)
商業授權是,永久($299 / $449 / $599)
分佈ZIP 下載(無 NuGet 套件)NuGet (IronPdf)
上次公開活動自 2021 年以來沒有發行列表活躍,經常性發布
CSS 支援完整支持 CSS3
JavaScript完整的ES2024
自動佈局
自動頁面分隔
表格手動繪圖HTML <table>
頁首/頁尾手動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
SHELL

步驟 2:更新命名空間

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

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

// After (IronPDF)
using IronPdf;

步驟 3:初始化授權

在應用啓動時新增授權初始化:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

程式碼遷移範例

將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");
    }
}
C#

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

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");
    }
}
C#

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

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

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

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

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

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

ZetPDF API 與IronPDF映射參考

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

ZetPDFIronPDF
new PdfDocument()new ChromePdfRenderer()
document.AddPage()自動
XGraphics.FromPdfPage(page)無(改用 HTML/CSS)
graphics.DrawString()HTML文字元素
graphics.DrawImage()<img> 標籤
graphics.DrawLine()CSS 邊框 / <hr>
graphics.DrawRectangle()CSS border + div
new XFont()CSS font-family
XBrushes.BlackCSS 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;
}
Text

問題 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>
HTML

問題3:顏色處理

ZetPDF: 使用 XBrushes 和顏色物件。

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

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

問題 4:手動分頁符

ZetPDF: 跟蹤 Y 位置並在内容溢出時人工建立新頁面。

**解決方案:**IronPDF 處理自動分頁。 為了明確控制,使用 CSS:

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

問題 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>
HTML

ZetPDF 遷移清單

遷移前任務

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

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熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

...
閱讀更多

相關文章

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
預訂您的免費現場演示
Booking Badge

受到全球數百萬工程師的信任

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表格或電子郵件sales@ironsoftware.com
您的詳細資訊將始終保密
受到全球數百萬工程師的信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立