如何在 .NET 10 中使用 C# 將 HTML 轉換為 PDF | IronPDF for .NET
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
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)
IronPDFvs ZetPDF:功能比較
了解結構差異有助於技術決策者評估遷移投資:
| 功能 | ZetPDF | IronPDF |
|---|---|---|
| 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
# Remove the ZetPDF.dll reference from your csproj manually, then:
dotnet add package IronPdf
步驟 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
步驟 3:初始化授權
在應用啓動時新增授權初始化:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
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");
}
}
// 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
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
IronPDF 提供 ChromePdfRenderer 和 RenderHtmlAsPdf(),這會返回 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
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
IronPDF 的 RenderUrlAsPdf() 在 ChromePdfRenderer 上利用了完整的 Chromium 渲染引擎進行網頁捕獲,包括 JavaScript 執行和現代 CSS。
查看 URL 到 PDF 文件,了解認證和自定義標頭選項。
合併多個 PDF
ZetPDF 未提供一條 PdfMerger.MergeFiles() 幫助指令。 合併遵循與 PDFsharp(ZetPDF 類似)相同的模式:使用 PdfReader 打開每個輸入,然後將頁面迴圈進入輸出 PdfDocument 並 Save()。 以下展示的虛擬包裝模擬了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
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
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")
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")
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() |
<img> 標籤 |
graphics.DrawLine() |
CSS 邊框 / <hr> |
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>
問題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>
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" .
記錄基於座標的圖表程式碼需要轉換成 HTML。 註記字體和顏色使用模式。 將布局結構映射到 HTML 對應項。
程式碼更新任務
- 從您的
.csproj移除手動ZetPDF.dll參考 - 安裝IronPDFNuGet 套件 (
dotnet add package IronPdf) - 更新名稱空間的導入,從
ZetPDF到IronPdf - 使用
ChromePdfRenderer.RenderHtmlAsPdf()替換任何以 ZetPDF 為基礎的自製 HTML-to-PDF 包裝器 - 將任何 URL-to-PDF 包裝器替換為
ChromePdfRenderer.RenderUrlAsPdf() - 將手動頁面拷貝合併迴圈替換為
PdfDocument.Merge() - 將
DrawString()調用轉換為 HTML文字元素 - 將
XFont轉換為 CSSfont-family - 使用 CSS 顏色替換
XBrushes - 在啟動時新增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 的文件表面上是缺乏的。

