如何在 C# 中將 PeachPDF 遷移到 IronPDF
從 PeachPDF 遷移到 IronPDF 可以獲得企業級 PDF 生成功能,包括全面的功能、積極的開發和專業的支援。 本指南提供了一個完整的、逐步的遷移路徑,將您的基本 HTML 到 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條款) | 商業的 |
| 使用者群 | 小的 | 大型(下載量超過 4000 萬次) |
| 支援 | 社區驅動 | 專業人員提供專屬支持 |
| HTML渲染 | 基本的 | 全鉻 |
| CSS 支援 | 有限的 | 完整的 CSS3 |
| JavaScript | 基本的 | 完整版 ES2024 |
| 數位簽名 | 不 | 是的 |
| PDF/A 合規性 | 不 | 是的 |
| 文件 | 有限的 | 廣泛的 |
| 發展狀況 | 開發中 | 成熟穩定的釋放 |
IronPDF 的優勢在於其更廣泛的功能,它不僅支援 HTML 到 PDF 的轉換,還支援 OCR、浮水印和其他高級功能。 其專業的支援體係是一大優勢,能夠快速解決開發人員所遇到的問題。
對於計劃在 2025 年和 2026 年採用 .NET 10 和 C# 14 的團隊,IronPDF 提供全面的功能和積極的維護,以確保長期穩定性和與現代 .NET 框架的兼容性。
開始之前
先決條件
- .NET 環境: .NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet 存取權限:能夠安裝 NuGet 套件
- IronPDF 許可證:請從ironpdf.com取得您的許可證密鑰。
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";識別 PeachPDF 使用情況
# Audit PeachPDF usage in codebase
grep -r "using PeachPDF" --include="*.cs" .
grep -r "HtmlToPdfConverter\|Convert\|ConvertUrl" --include="*.cs" .# Audit PeachPDF usage 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;核心 API 映射
| PeachPDF | IronPDF | 筆記 |
|---|---|---|
new HtmlToPdfConverter() | new ChromePdfRenderer() | 建立渲染器 |
converter.Convert(html) | renderer.RenderHtmlAsPdf(html) | HTML 轉 PDF |
converter.ConvertUrl(url) | renderer.RenderUrlAsPdf(url) | PDF檔案的URL |
converter.Header | renderer.RenderingOptions.HtmlHeader | 標題內容 |
converter.Footer | renderer.RenderingOptions.HtmlFooter | 頁尾內容 |
File.WriteAllBytes(path, pdf) | pdf.SaveAs(path) | 儲存檔案 |
pdf (位元組數組) | pdf.BinaryData | 取得位元組 |
PdfReader.LoadFromFile(path) | PdfDocument.FromFile(path) | 載入PDF |
document.MergeWith(other) | PdfDocument.Merge(pdfs) | 合併PDF |
程式碼遷移範例
範例 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);
}
}(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");
}
}這個例子展示了這兩個庫之間的根本區別。 PeachPDF 使用HtmlToPdfConverter ,其Convert()方法傳回一個byte[] ,需要使用File.WriteAllBytes()進行儲存。 IronPDF 使用ChromePdfRenderer的RenderHtmlAsPdf()方法,該方法傳回一個內建SaveAs()方法的PdfDocument物件。
IronPDF 方法的主要優點是:在儲存之前,可以對PdfDocument物件進行進一步操作(新增浮水印、合併、安全設定),而 PeachPDF 的位元組陣列是最終輸出。 IronPDF 的方法提供了更簡潔的語法和與現代 .NET 應用程式更好的整合。 請參閱HTML 轉 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);
}
}(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");
}
}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);
}
}(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");
}
}這個範例展示了一個關鍵的架構差異。 PeachPDF 使用簡單的字串屬性( converter.Header和converter.Footer )來表示頁首和頁尾。 IronPDF 使用指派給RenderingOptions.HtmlHeader和RenderingOptions.HtmlFooter HtmlHeaderFooter物件。
IronPDF 的方法更靈活HtmlHeaderFooter物件可以包含MaxHeight等額外屬性來控制頁首/頁尾的大小。請注意,這兩個庫都使用{page}作為頁碼佔位符。 IronPDF 也支援使用{total-pages}來表示總頁數。
請注意 IronPDF 所需的額外命名空間: HtmlHeaderFooter類別需要using IronPdf.Rendering;
關鍵遷移說明
轉換器類別更改
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 返回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: 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 | 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");帶有 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");密碼保護
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");數位簽名
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");非同步操作
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");功能對比總結
| 特徵 | PeachPDF | IronPDF |
|---|---|---|
| HTML 轉 PDF | 基本的 | 全鉻 |
| PDF檔案的URL | 有限的 | 是的 |
| CSS Grid/Flexbox | 不 | 是的 |
| JavaScript | 有限的 | 完整版 ES2024 |
| 合併PDF | 是的 | 是的 |
| 拆分PDF | 有限的 | 是的 |
| 水印 | 有限的 | 完整 HTML |
| 頁首/頁尾 | 基本的 | 完整 HTML |
| 數位簽名 | 不 | 是的 |
| PDF/A | 不 | 是的 |
| 表格填寫 | 有限的 | 是的 |
| 文字擷取 | 基本的 | 是的 |
| 影像擷取 | 不 | 是的 |
| 非同步支援 | 有限的 | 是的 |
| 跨平台 | 未知 | 是的 |
常見的移民問題
問題 1:不同的 API 模式
問題: PeachPDF 使用位元組數組輸出的轉換器模式; IronPDF 使用渲染器模式,輸出為 PdfDocument。
解決方案:
// PeachPDF pattern
var converter = new HtmlToPdfConverter();
var pdf = converter.Convert(html);
File.WriteAllBytes(path, pdf);
// IronPDF pattern
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(path);// PeachPDF pattern
var converter = new HtmlToPdfConverter();
var pdf = converter.Convert(html);
File.WriteAllBytes(path, pdf);
// IronPDF pattern
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(path);問題 2:保存方法差異
問題: PeachPDF 需要File.WriteAllBytes() ; IronPDF 內建了SaveAs() 。
解決方法:將File.WriteAllBytes("path", pdf)替換為pdf.SaveAs("path") 。
問題 3:頁首/頁尾對象
問題: PeachPDF 使用字串屬性; IronPDF 使用物件屬性。
解決方案:將 HTML 字串包裝在帶有HtmlFragment屬性的HtmlHeaderFooter物件中。
遷移清單
遷移前
- 審核程式碼庫中 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 輸出是否符合預期
- 測試帶有頁碼的頁首/頁尾渲染效果
- 根據需要新增功能(安全性、浮水印、合併)






