如何用 C# 從 PeachPDF 轉移到 IronPDF
從PeachPDF轉移到 IronPDF,可以使用具有全面功能、積極開發和專業支援的企業級 PDF 生成工具。 本指南提供完整的逐步遷移路徑,可將您的基本 HTML-to-PDF 工作流程轉換為具有現代 Chromium 渲染、進階安全選項和廣泛操作功能的全功能 PDF 解決方案。
為什麼要從PeachPDF轉移到 IronPDF?
瞭解 PeachPDF。
PeachPDF 是 .NET 生態系統中相對較新的加入者,專為需要將 HTML 轉換為 PDF 的開發人員所設計。 作為一個函式庫,PeachPDF 承諾採用純 .NET 實作,不依賴外部程序,確保能夠在支援 .NET 的平台上無縫整合。 此特性使PeachPDF成為尋找輕量級管理庫解決方案專案的吸引人的選擇。
儘管PeachPDF極具潛力,但目前仍處於開發階段,既有令人振奮的可能性,也有值得注意的限制。PeachPDF純正的 .NET Core,可在多樣化的環境中直接部署,因此仍然極具吸引力。 然而,這也會轉化為有限的採用,用戶群和社群驅動的支援較少。
PeachPDF的限制
PeachPDF 是一個相對較新、知名度較低的 PDF 函式庫,在成熟度、功能和支援方面都不如成熟的解決方案。 遷移的主要原因:
1.功能集有限:PeachPDF缺乏數位簽章、PDF/A 合規性和複雜的文字擷取等進階功能。
2.小型社群:文件、範例和社群支援有限。 由於使用者基數較小,社群支援可能較為稀疏,因此要獲得協助或找到廣泛的說明文件相當具有挑戰性。
3.不確定的未來:沒有既定業績記錄的新圖書館有被採用的風險。
4.基本 HTML 支援:有限的 CSS 和JavaScript渲染功能。
5.無企業支援:無專業支援或 SLA 選項。
PeachPDF與IronPDF的比較
| 特點/特性 | PeachPDF | IronPDF |
|---|---|---|
| 實作 | 純 .NET | 具有廣泛相容性的管理 |
| 執照 | 開放原始碼 (BSD-3-Clause) | 商業的 |
| 使用者群 | 小型 | 大型 (40M+ 下載) |
| <強>支援</強 | 社群驅動 | 專業並有專人支援 |
| HTML 渲染 | 基本的 | 完整的 Chromium |
| CSS 支援 | 限額 | 完整的 CSS3 |
| JavaScript。 | 基本的 | 完整的 ES2024 |
| 數位簽名 | 無 | 是 |
| PDF/A合規性 | 無 | 是 |
| 說明文件 | 限額 | 廣泛 |
| 開發狀態 | 開發中 | 成熟、穩定的版本 |
IronPDF 以更廣泛的功能脫穎而出,不僅支援 HTML 到 PDF 的轉換,還支援 OCR、水印和其他進階功能。 其專業的支援架構是絕對的優勢,可快速解決開發人員所面臨的問題。
對於計劃在 2025 年和 2026 年之前採用 .NET 10 和 C# 14 的團隊而言,IronPDF 提供了全面的功能和積極的維護,可確保長期的穩定性以及與現代 .NET Framework 的相容性。
開始之前
先決條件
- .NET環境: .NET Framework 4.6.2+ 或.NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet存取權限:能夠安裝NuGet套件
- IronPDF許可證:請從IronPDF取得您的許可證密鑰。
NuGet 套件變更
# Remove PeachPDF
dotnet remove package PeachPDF
# Install IronPDF
dotnet add package IronPdf
# Remove PeachPDF
dotnet remove package PeachPDF
# Install IronPDF
dotnet add package IronPdf
授權組態
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
識別PeachPDF使用情況
# AuditPeachPDFusage in codebase
grep -r "using PeachPDF" --include="*.cs" .
grep -r "HtmlToPdfConverter\|Convert\|ConvertUrl" --include="*.cs" .
# AuditPeachPDFusage in codebase
grep -r "using PeachPDF" --include="*.cs" .
grep -r "HtmlToPdfConverter\|Convert\|ConvertUrl" --include="*.cs" .
完整的 API 參考資料
命名空間變更
// Before: PeachPDF
using PeachPDF;
using System.IO;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: PeachPDF
using PeachPDF;
using System.IO;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
Imports IronPdf
Imports IronPdf.Rendering
Imports System.IO
核心 API 對應
| PeachPDF | IronPDF |
|---|---|
new HtmlToPdfConverter() |
new ChromePdfRenderer() |
converter.Convert(html) |
renderer.RenderHtmlAsPdf(html) |
converter.ConvertUrl(url) |
renderer.RenderUrlAsPdf(url) |
converter.Header |
renderer.RenderingOptions.HtmlHeader |
converter.Footer |
renderer.RenderingOptions.HtmlFooter |
File.WriteAllBytes(path, pdf) |
pdf.SaveAs(path) |
pdf (byte[]) |
pdf.BinaryData |
PdfReader.LoadFromFile(path) |
PdfDocument.FromFile(path) |
document.MergeWith(other) |
PdfDocument.Merge(pdfs) |
程式碼遷移範例
範例 1:HTML 字串至 PDF 的轉換
之前 (PeachPDF):
using PeachPDF;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = converter.Convert(html);
File.WriteAllBytes("output.pdf", pdf);
}
}
using PeachPDF;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = converter.Convert(html);
File.WriteAllBytes("output.pdf", pdf);
}
}
Imports PeachPDF
Imports System.IO
Class Program
Shared Sub Main()
Dim converter = New HtmlToPdfConverter()
Dim html = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = converter.Convert(html)
File.WriteAllBytes("output.pdf", pdf)
End Sub
End Class
After (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim html = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End Class
本範例展示了兩個函式庫的基本差異。PeachPDF使用 HtmlToPdfConverter 和一個 Convert() 方法,該方法傳回 byte[],需要 File.WriteAllBytes() 才能儲存。IronPDF使用 ChromePdfRenderer 和 RenderHtmlAsPdf(),傳回一個 PdfDocument 對象,該物件具有內建的 SaveAs() 方法。
IronPDF 方法的主要優點是:在儲存之前可以對 PdfDocument 物件進行進一步操作(新增浮水印、合併、安全設定),而PeachPDF的位元組陣列是最終輸出。IronPDF的方法提供了更簡潔的語法,並能更好地與現代 .NET 應用程式整合。 請參閱 HTML to PDF 文件,以瞭解全面的範例。
範例 2:URL 到 PDF 的轉換
之前 (PeachPDF):
using PeachPDF;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var url = "https://www.example.com";
var pdf = converter.ConvertUrl(url);
File.WriteAllBytes("webpage.pdf", pdf);
}
}
using PeachPDF;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var url = "https://www.example.com";
var pdf = converter.ConvertUrl(url);
File.WriteAllBytes("webpage.pdf", pdf);
}
}
Imports PeachPDF
Imports System.IO
Class Program
Shared Sub Main()
Dim converter = New HtmlToPdfConverter()
Dim url = "https://www.example.com"
Dim pdf = converter.ConvertUrl(url)
File.WriteAllBytes("webpage.pdf", pdf)
End Sub
End Class
After (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");
}
}
// 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");
}
}
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")
End Sub
End Class
PeachPDF 使用 ConvertUrl(),而IronPDF則使用 RenderUrlAsPdf()。IronPDF中的方法命名更具描述性--它明確指出 URL 將被渲染為 PDF。 這兩個函式庫處理 URL 到 PDF 的轉換方式類似,但IronPDF的完整 Chromium 引擎可為具有複雜 CSS 和JavaScript的現代網頁提供優異的渲染效果。 請參閱我們的 教學,瞭解更多資訊。
範例 3:新增頁首和頁尾
之前 (PeachPDF):
using PeachPDF;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
converter.Header = "<div style='text-align:center'>My Header</div>";
converter.Footer = "<div style='text-align:center'>Page {page}</div>";
var html = "<html><body><h1>Document Content</h1></body></html>";
var pdf = converter.Convert(html);
File.WriteAllBytes("document.pdf", pdf);
}
}
using PeachPDF;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
converter.Header = "<div style='text-align:center'>My Header</div>";
converter.Footer = "<div style='text-align:center'>Page {page}</div>";
var html = "<html><body><h1>Document Content</h1></body></html>";
var pdf = converter.Convert(html);
File.WriteAllBytes("document.pdf", pdf);
}
}
Imports PeachPDF
Imports System.IO
Class Program
Shared Sub Main()
Dim converter = New HtmlToPdfConverter()
converter.Header = "<div style='text-align:center'>My Header</div>"
converter.Footer = "<div style='text-align:center'>Page {page}</div>"
Dim html = "<html><body><h1>Document Content</h1></body></html>"
Dim pdf = converter.Convert(html)
File.WriteAllBytes("document.pdf", pdf)
End Sub
End Class
After (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center'>My Header</div>" };
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center'>Page {page}</div>" };
var html = "<html><body><h1>Document Content</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("document.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center'>My Header</div>" };
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center'>Page {page}</div>" };
var html = "<html><body><h1>Document Content</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("document.pdf");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System
Module Program
Sub Main()
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {.HtmlFragment = "<div style='text-align:center'>My Header</div>"}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter() With {.HtmlFragment = "<div style='text-align:center'>Page {page}</div>"}
Dim html As String = "<html><body><h1>Document Content</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("document.pdf")
End Sub
End Module
此範例顯示了一個關鍵的架構差異。PeachPDF使用簡單的字串屬性(converter.Header 和 converter.Footer)作為頁首和頁尾。IronPDF使用分配給 HtmlHeaderFooter 和 RenderingOptions.HtmlHeader 和 RenderingOptions.HtmlFooter 的物件。
IronPDF 方法提供了更大的靈活性—物件可以包含額外的屬性,例如用於控制頁首/頁尾大小的屬性。請注意,這兩個庫都使用頁碼佔位符。IronPDF也支援 {total-pages} 來統計總頁數。
請注意IronPDF所需的額外命名空間:using IronPdf.Rendering; 是 HtmlHeaderFooter 類別所需的。
關鍵遷移注意事項
轉換器類別變更
PeachPDF 使用 HtmlToPdfConverter;IronPDF使用 ChromePdfRenderer:
// PeachPDF
var converter = new HtmlToPdfConverter();
// IronPDF
var renderer = new ChromePdfRenderer();
// PeachPDF
var converter = new HtmlToPdfConverter();
// IronPDF
var renderer = new ChromePdfRenderer();
' PeachPDF
Dim converter As New HtmlToPdfConverter()
' IronPDF
Dim renderer As New ChromePdfRenderer()
返回類型變更
PeachPDF 返回 byte[];IronPDF返回 PdfDocument:
// PeachPDF: Returns byte array
byte[] pdf = converter.Convert(html);
File.WriteAllBytes("output.pdf", pdf);
// IronPDF: Returns PdfDocument object
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Or get bytes: byte[] bytes = pdf.BinaryData;
// PeachPDF: Returns byte array
byte[] pdf = converter.Convert(html);
File.WriteAllBytes("output.pdf", pdf);
// IronPDF: Returns PdfDocument object
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Or get bytes: byte[] bytes = pdf.BinaryData;
' PeachPDF: Returns byte array
Dim pdf As Byte() = converter.Convert(html)
File.WriteAllBytes("output.pdf", pdf)
' IronPDF: Returns PdfDocument object
Dim pdfDoc As PdfDocument = renderer.RenderHtmlAsPdf(html)
pdfDoc.SaveAs("output.pdf")
' Or get bytes: Dim bytes As Byte() = pdfDoc.BinaryData
頁首/頁尾屬性變更
// PeachPDF: Simple string properties
converter.Header = "<div>Header</div>";
converter.Footer = "<div>Footer</div>";
// IronPDF: HtmlHeaderFooter objects
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<div>Header</div>"
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<div>Footer</div>"
};
// PeachPDF: Simple string properties
converter.Header = "<div>Header</div>";
converter.Footer = "<div>Footer</div>";
// IronPDF: HtmlHeaderFooter objects
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<div>Header</div>"
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<div>Footer</div>"
};
' PeachPDF: Simple string properties
converter.Header = "<div>Header</div>"
converter.Footer = "<div>Footer</div>"
' IronPDF: HtmlHeaderFooter objects
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
.HtmlFragment = "<div>Header</div>"
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter() With {
.HtmlFragment = "<div>Footer</div>"
}
方法名稱變更
| PeachPDF | IronPDF |
|---|---|
Convert(html) |
RenderHtmlAsPdf(html) |
ConvertUrl(url) |
RenderUrlAsPdf(url) |
File.WriteAllBytes() |
SaveAs() |
遷移後的新功能
轉移到IronPDF之後,您將獲得PeachPDF無法提供的功能:
PDF 合併
var pdf1 = PdfDocument.FromFile("doc1.pdf");
var pdf2 = PdfDocument.FromFile("doc2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
var pdf1 = PdfDocument.FromFile("doc1.pdf");
var pdf2 = PdfDocument.FromFile("doc2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
CONVERTER NOT RUNNING
使用 HTML 的水印
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark("<div style='color: red; font-size: 48pt;'>DRAFT</div>");
pdf.SaveAs("watermarked.pdf");
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark("<div style='color: red; font-size: 48pt;'>DRAFT</div>");
pdf.SaveAs("watermarked.pdf");
Dim pdf = PdfDocument.FromFile("document.pdf")
pdf.ApplyWatermark("<div style='color: red; font-size: 48pt;'>DRAFT</div>")
pdf.SaveAs("watermarked.pdf")
密碼保護
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SaveAs("protected.pdf");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SaveAs("protected.pdf");
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>")
pdf.SecuritySettings.OwnerPassword = "owner123"
pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint
pdf.SaveAs("protected.pdf")
數位簽名
using IronPdf.Signing;
var pdf = PdfDocument.FromFile("document.pdf");
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningReason = "Document Approval",
SigningLocation = "New York"
};
pdf.Sign(signature);
pdf.SaveAs("signed.pdf");
using IronPdf.Signing;
var pdf = PdfDocument.FromFile("document.pdf");
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningReason = "Document Approval",
SigningLocation = "New York"
};
pdf.Sign(signature);
pdf.SaveAs("signed.pdf");
Imports IronPdf.Signing
Dim pdf = PdfDocument.FromFile("document.pdf")
Dim signature = New PdfSignature("certificate.pfx", "password") With {
.SigningReason = "Document Approval",
.SigningLocation = "New York"
}
pdf.Sign(signature)
pdf.SaveAs("signed.pdf")
非同步操作
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Async PDF</h1>");
pdf.SaveAs("async_output.pdf");
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Async PDF</h1>");
pdf.SaveAs("async_output.pdf");
Dim renderer As New ChromePdfRenderer()
Dim pdf = Await renderer.RenderHtmlAsPdfAsync("<h1>Async PDF</h1>")
pdf.SaveAs("async_output.pdf")
功能比較摘要
| 特點 | PeachPDF | IronPDF |
|---|---|---|
| HTML 至 PDF | 基本的 | 完整的 Chromium |
| URL 至 PDF | 限額 | 是 |
| CSS 網格/Flexbox | 無 | 是 |
| JavaScript | 限額 | 完整的 ES2024 |
| 合併 PDF | 是 | 是 |
| 分割 PDF | 限額 | 是 |
| 水印 | 限額 | 完整 HTML |
| 頁首/頁尾 | 基本的 | 完整 HTML |
| 數位簽名 | 無 | 是 |
| PDF/A | 無 | 是 |
| 表格填寫 | 限額 | 是 |
| 文字擷取 | 基本的 | 是 |
| 圖片擷取 | 無 | 是 |
| 同步支援 | 限額 | 是 |
| 跨平台 | 未知 | 是 |
常見的遷移問題
問題 1:不同的 API 模式
問題:PeachPDF使用具有位元組陣列輸出的轉換器模式;IronPDF使用 PdfDocument 輸出的渲染器模式。
解決方案:
//PeachPDFpattern
var converter = new HtmlToPdfConverter();
var pdf = converter.Convert(html);
File.WriteAllBytes(path, pdf);
//IronPDFpattern
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(path);
//PeachPDFpattern
var converter = new HtmlToPdfConverter();
var pdf = converter.Convert(html);
File.WriteAllBytes(path, pdf);
//IronPDFpattern
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(path);
' PeachPDFpattern
Dim converter As New HtmlToPdfConverter()
Dim pdf As Byte() = converter.Convert(html)
File.WriteAllBytes(path, pdf)
' IronPDFpattern
Dim renderer As New ChromePdfRenderer()
Dim pdfDocument As PdfDocument = renderer.RenderHtmlAsPdf(html)
pdfDocument.SaveAs(path)
問題 2:儲存方法的差異
問題:PeachPDF需要 File.WriteAllBytes();IronPDF內建了 SaveAs()。
解決方法:將 File.WriteAllBytes("path", pdf) 替換為 pdf.SaveAs("path")。
問題 3:頁首/頁尾物件
問題:PeachPDF使用字串屬性;IronPDF使用物件屬性。
解決方案:將 HTML 字串包裝在帶有 HtmlHeaderFooter 屬性的 HtmlFragment 物件中。
遷移清單
預遷移
- 審核程式碼庫中PeachPDF的使用情況
- 記錄自訂配置
- 注意所有頁首/頁尾的實作方式
- 從ironpdf.com取得IronPDF許可證金鑰
- 先使用IronPDF試用許可證進行測試
套件變更
- 刪除
PeachPDFNuGet 套件 - 安裝
IronPdfNuGet 套件:dotnet add package IronPdf
程式碼變更
- 更新命名空間導入(
using PeachPDF;→using IronPdf;) - 新增
using IronPdf.Rendering;以啟用頁首/頁尾功能 - 將
HtmlToPdfConverter替換為ChromePdfRenderer - 將
converter.Convert(html)替換為renderer.RenderHtmlAsPdf(html) - 將
converter.ConvertUrl(url)替換為renderer.RenderUrlAsPdf(url) - 將
File.WriteAllBytes(path, pdf)替換為pdf.SaveAs(path) - 將
converter.Header/Footer替換為RenderingOptions.HtmlHeader/HtmlFooter對象 - 在應用程式啟動時新增許可證初始化
後遷移
- 測試 HTML 渲染質量
- 驗證 PDF 輸出符合預期
- 測試帶有頁碼的頁首/頁尾渲染效果
- 根據需要新增功能(安全性、浮水印、合併)

