如何用 C# 從 PeachPDF 轉移到 IronPDF
從PeachPDF轉移到 IronPDF:完整的 C# 遷移指南。
從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 的相容性。
開始之前
先決條件
1..NET 環境:.NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+ 2.NuGet存取:安裝 NuGet 套件的能力 3.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";IRON VB CONVERTER ERROR developers@ironsoftware.com識別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;IRON VB CONVERTER ERROR developers@ironsoftware.com核心 API 對應
| PeachPDF | IronPDF | 筆記 |
|---|---|---|
新的 HtmlToPdfConverter() | 新的 ChromePdfRenderer() | 建立呈現器 |
converter.Convert(html) | renderer.RenderHtmlAsPdf(html)。 | HTML 至 PDF |
converter.ConvertUrl(url)。 | renderer.RenderUrlAsPdf(url)。 | URL 至 PDF |
| <編碼>converter.Header</編碼 | <編碼>renderer.RenderingOptions.HtmlHeader</編碼 | 標題內容 |
converter.Footer | <編碼>renderer.RenderingOptions.HtmlFooter</編碼 | 頁尾內容 |
File.WriteAllBytes(path, pdf) | <代碼>pdf.SaveAs(路徑)</代碼 | 儲存檔案 |
pdf (byte[]) | <編碼>pdf.BinaryData</編碼 | 取得 bytes |
| <代碼>PdfReader.LoadFromFile(路徑)</代碼 | 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);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com本範例展示了兩個函式庫的基本差異。PeachPDF使用 HtmlToPdfConverter 與一個返回 byte[] 的 Convert() 方法,需要檔案.WriteAllBytes()來儲存。IronPDF使用 ChromePdfRenderer 與 RenderHtmlAsPdf() 產生 PdfDocument 物件,並內建<編碼>SaveAs()</編碼方法。
IronPDF 方法的主要優勢:PdfDocument 物件可以在儲存前進一步操作(添加水印、合併、安全設定),而PeachPDF的 byte array 則是最終輸出。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);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comPeachPDF 使用 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);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com此範例顯示了一個關鍵的架構差異。PeachPDF使用簡單的字串屬性(converter.Header 和 converter.Footer)作為頁首和頁尾。 IronPdf 使用指定給 RenderingOptions.HtmlHeader 和 RenderingOptions.HtmlFooter 的 HtmlHeaderFooter 物件。
IronPDF 方法提供了更大的靈活性--HtmlHeaderFooter 物件可以包含額外的屬性,如 MaxHeight 用於控制標頭/標腳大小。請注意,這兩個函式庫都使用 {page} 作為頁碼占位符。IronPDF也支援 {total-pages} 來顯示總頁數。
請注意IronPDF所需的額外命名空間:HtmlHeaderFooter 類需要使用 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();IRON VB CONVERTER ERROR developers@ironsoftware.com返回類型變更
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;IRON VB CONVERTER ERROR developers@ironsoftware.com頁首/頁尾屬性變更
// 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>"
};IRON VB CONVERTER ERROR developers@ironsoftware.com方法名稱變更
| PeachPDF | IronPDF |
|---|---|
Convert(html) | RenderHtmlAsPdf(html) |
| <編碼>ConvertUrl(url)</編碼 | <代碼>RenderUrlAsPdf(url)</代碼 |
檔案.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");IRON VB CONVERTER ERROR developers@ironsoftware.com密碼保護
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");IRON VB CONVERTER ERROR developers@ironsoftware.com數位簽名
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");IRON VB CONVERTER ERROR developers@ironsoftware.com非同步操作
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");IRON VB CONVERTER ERROR developers@ironsoftware.com功能比較摘要
| 特點 | 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);IRON VB CONVERTER ERROR developers@ironsoftware.com問題 2:儲存方法的差異
問題:PeachPDF需要 File.WriteAllBytes();IronPDF內建<編碼>SaveAs()</編碼功能。
解決方案:以 pdf.SaveAs("path") 取代 File.WriteAllBytes("path", pdf) 。
問題 3:頁首/頁尾物件
問題:PeachPDF使用字串屬性; IronPdf 使用物件屬性。
解決方案:使用 HtmlFragment 屬性將 HTML 字串包覆在 HtmlHeaderFooter 物件中。
遷移清單
預遷移
- [ ] 審核PeachPDF在程式碼庫中的使用情況
- [ ] 文件自訂配置
- [ ] 注意所有頭部/腳部實作
- [ ] 從 ironpdf.com 獲得IronPDF授權金鑰
- [ ] 先使用 IronPdf 試用授權進行測試
套件變更
- [ ] 移除
PeachPDFNuGet 套件 - [ ] 安裝
IronPDFNuGet 套件:dotnet add package IronPdf。
程式碼變更
- [ ] 更新命名空間匯入 (
using PeachPDF;→using IronPdf;) - [ ] 新增
使用 IronPDF.Rendering;的頁首/頁尾功能 - [ ] 將
HtmlToPdfConverter替換為ChromePdfRenderer - [ ] 將
converter.Convert(html)替換為renderer.RenderHtmlAsPdf(html) - [將
converter.ConvertUrl(url)。替換為renderer.RenderUrlAsPdf(url)。。 - [ ] 將
File.WriteAllBytes(path, pdf)替換為<代碼>pdf.SaveAs(路徑)</代碼。 - [ ] 將
converter.Header/Footer改為RenderingOptions.HtmlHeader/HtmlFooter物件 - [ ] 在應用程式啟動時加入授權初始化
後遷移
- [ ] 測試 HTML 呈現品質
- [驗證 PDF 輸出是否符合預期
- [ ] 用頁碼測試頁首/頁尾的呈現
- [ ] 必要時增加新功能(安全性、水印、合併)。
結論
在PeachPDF和IronPDF之間進行選擇時,最終的決定取決於專案的具體需求。PeachPDF採用純 .NET 實作,非常適合需要輕量級開放原始碼解決方案的專案,而不需要廣泛的功能集或支援。 然而,就更廣泛的功能、重要的社群支援和專業協助而言,IronPDF 擁有明顯的優勢,使其成為希望利用可靠、具持續支援的商業解決方案的企業的最佳選擇。
本次轉換的主要變更如下 1.轉換器類別:HtmlToPdfConverter → ChromePdfRenderer 。 2.HTML 方法:Convert(html) → RenderHtmlAsPdf(html) 3.URL 方法:ConvertUrl(url) → RenderUrlAsPdf(url) 4.返回類型:byte[] → PdfDocument 5.儲存方法:File.WriteAllBytes() → pdf.SaveAs() 6.Headers/Footers: 字串屬性 → HtmlHeaderFooter 物件 7.命名空間:using PeachPDF; → using IronPdf; + using IronPdf.Rendering; 8.新功能:數位簽章、符合PDF/A規範、完整的 CSS3/JavaScript 支援等。
IronPDF 提供企業級的 PDF 生成功能,其全面的功能、積極的開發和專業的支援是PeachPDF無法提供的。IronPDF 擁有龐大的用戶群和豐富的說明文件,可確保長期的穩定性以及與現代 .NET Framework 的相容性。






