IRONSOFTWAREHOME
影片

如何使用 C# 消除 PDF 中的文字和區域

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

遷移從PeachPDF到IronPDF提供了企業級PDF生成的存取,具有全面的功能、持續的開發和專業支援。 本指南提供了一個逐步遷移的路徑,從PeachPDF的1.0前異步HTML到PDF工作流程,到更完整的PDF解決方案,具有Chromium渲染、安全設定和文件操作API。

為什麼從PeachPDF遷移到IronPDF

了解PeachPDF

PeachPDF是.NET生態系中的一個相對較新的參與者,專為需要將HTML轉換為PDF的開發人員設計。 作為一個程式庫,PeachPDF保證一個純.NET實現,通過不依賴於外部流程來與眾不同,確保它可以無縫整合在.NET支持的平台上。 這一特點使PeachPDF成為尋求輕量級且受控程式庫解決方案的專案的吸引選擇。

儘管PeachPDF具有潛力,但仍在開發中,展示了令人興奮的可能性和顯著的限制。 由於它的純淨.NET核心,PeachPDF仍然很吸引人,承諾可以在多樣的環境中輕鬆部署。 然而,它也導致了有限的採用,較小的使用者基礎和社區驅動的支持。

PeachPDF的局限性

PeachPDF是一個由單一維護者維護的1.0前.NET程式庫(最新jhaygood86以BSD-3-Clause許可發布。 它缺乏成熟度、功能和已建立解決方案的支持。 遷移的主要原因:

  1. 1.0前功能集: PeachPDF沒有內建的數位簽名、PDF/A合規、OCR、表單填寫或頁級頁眉/頁腳API。

  2. 沒有JavaScript引擎: PeachPDF是一個基於PeachPDF.PdfSharpCore的佈局渲染器,不是瀏覽器; 腳本和複雜的網格/彈性佈局不會執行。

  3. net8.0 只支持: 該包針對net8.0; 舊的.NET Framework / .NET 6專案需要升級或選擇不同的程式庫。

  4. 小社群: 單一GitHub維護者,有限的文件,有限的範例。

  5. 未提供企業支持: 沒有商業支持或SLA選項。

PeachPDF與IronPDF的比較

功能/特點PeachPDFIronPDF
實現純受控.NET (在PeachPDF.PdfSharpCore + SixLabors上)受控並內嵌Chromium運行時
授權BSD-3-Clause商業
目標框架net8.0 只支持.NET Framework 4.6.2+, .NET 6/7/8
使用者基礎小 (1.0前,0.7.26 於2025年10月發布)
支援使用者驅動(單一維護者,jhaygood86專業並擁有專門的支持
HTML渲染PDFSharpCore上的HTML+CSS佈局引擎完整的Chromium
CSS 支援HTML+CSS子集,網字體,@font-face完整支持 CSS3
JavaScript不執行完整的ES2024
數位簽名
PDF/A合規性
文件有限的(單一README)廣泛的
開發狀態1.0前(0.7.26,2025年10月)成熟的,穩定的版本

IronPDF以更廣泛的功能脫穎而出,不僅支持HTML到PDF轉換,還提供OCR、浮水印及其他高級功能。 其專業支持結構提供了開發人員遇到問題的快速解決途徑。

對於採用現代.NET的團隊,IronPDF提供了全面的功能和持續的維護,以支持不同版本.NET的長期穩定性。


開始之前

前提條件

  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
SHELL

授權配置

// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

識別PeachPDF使用情況

# Audit PeachPDF usage in codebase
grep -r "using PeachPDF" --include="*.cs" .
grep -r "PdfGenerator\|PdfGenerateConfig\|GeneratePdf" --include="*.cs" .
SHELL

完整API參考

名稱空間變更

// Before: PeachPDF
using PeachPDF;
using PeachPDF.PdfSharpCore;
using System.IO;
using System.Threading.Tasks;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;

核心API對應

PeachPDFIronPDF
new PdfGenerator()new ChromePdfRenderer()
await generator.GeneratePdf(html, config)renderer.RenderHtmlAsPdf(html)
document.Save(stream)pdf.SaveAs(path)
document.Save(memStream) 然後 memStream.ToArray()pdf.BinaryData
new PdfGenerateConfig { NetworkAdapter = new HttpClientNetworkAdapter(...) }renderer.RenderUrlAsPdf(url)
config.PageSize, config.PageOrientationrenderer.RenderingOptions.PaperSize, .PaperOrientation
嵌入在源HTML中(CSS position: fixedRenderingOptions.HtmlHeader / HtmlFooter
不支持PdfDocument.FromFile(path)
不支持PdfDocument.Merge(pdfs) / pdf.AppendPdf(...)

程式碼遷移範例

範例1:HTML字串轉PDF

之前(PeachPDF):

using PeachPDF;
using PeachPDF.PdfSharpCore;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var html = "<html><body><h1>Hello World</h1></body></html>";

        var config = new PdfGenerateConfig
        {
            PageSize = PageSize.Letter,
            PageOrientation = PageOrientation.Portrait
        };

        var generator = new PdfGenerator();
        var document = await generator.GeneratePdf(html, config);

        using var stream = File.Create("output.pdf");
        document.Save(stream);
    }
}

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

此範例展示了兩個程式庫之間的基本區別。 PeachPDF分開Stream。 IronPDF使用SaveAs()方法。

IronPDF方法的實際優勢在於,FileStream。 參見HTML到PDF文件獲取更多範例。

範例2:URL轉PDF轉換

之前(PeachPDF):

// PeachPDF has no ConvertUrl-style helper; URL fetching is wired via
// HttpClientNetworkAdapter and passing null HTML so the engine fetches the page.
using PeachPDF;
using PeachPDF.Network;
using PeachPDF.PdfSharpCore;
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var http = new HttpClient();

        var config = new PdfGenerateConfig
        {
            PageSize = PageSize.Letter,
            NetworkAdapter = new HttpClientNetworkAdapter(http, new Uri("https://www.example.com"))
        };

        var generator = new PdfGenerator();
        var document = await generator.GeneratePdf(null, config);

        using var stream = File.Create("webpage.pdf");
        document.Save(stream);
    }
}

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

PeachPDF沒有一個一級的URL到PDF的助手; 您將配置上的null HTML,以便引擎提取頁面。 IronPDF直接提供RenderUrlAsPdf(url)。 由於PeachPDF不執行JavaScript,單頁應用程式和動態內容通過網路適配器路線通常無法正確渲染; IronPDF的Chromium引擎可以處理現代CSS和JavaScript。 在我們的教程中了解更多。

範例3:新增頁眉和頁腳

之前(PeachPDF):

// PeachPDF v0.7.x has no header/footer API. The closest approach is
// to embed the header/footer markup directly inside the source HTML
// using CSS positioning.
using PeachPDF;
using PeachPDF.PdfSharpCore;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var html = @"
            <html><head><style>
              .header { position: fixed; top: 0; left: 0; right: 0; text-align:center; }
              .footer { position: fixed; bottom: 0; left: 0; right: 0; text-align:center; }
            </style></head>
            <body>
              <div class='header'>My Header</div>
              <h1>Document Content</h1>
              <div class='footer'>Footer text</div>
            </body></html>";

        var config = new PdfGenerateConfig { PageSize = PageSize.Letter };
        var generator = new PdfGenerator();
        var document = await generator.GeneratePdf(html, config);

        using var stream = File.Create("document.pdf");
        document.Save(stream);
    }
}

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

此範例顯示了關鍵的架構差異。 PeachPDF不在PdfGenerateConfig上暴露頁眉/頁腳API,因此頁面chrome不得不使用CSS定位在源HTML中。 IronPDF使用分配給HtmlHeaderFooter物件,將頁面chrome與文件內容分離。

IronPDF的方法還揭示了一些特性,如{total-pages}佔位符。

注意IronPDF需要的額外命名空間:HtmlHeaderFooter類所需。


關鍵遷移注意事項

產生器/渲染器類變更

PeachPDF使用一對PdfGenerator + PdfGenerateConfig; IronPDF使用單個ChromePdfRenderer

// PeachPDF
var config = new PdfGenerateConfig { PageSize = PageSize.Letter };
var generator = new PdfGenerator();

// IronPDF
var renderer = new ChromePdfRenderer();

異步與同步,以及返回型別

PeachPDF的Stream的文件。 IronPDF的PdfDocument

// PeachPDF: async, save to a Stream
var document = await generator.GeneratePdf(html, config);
using var fs = File.Create("output.pdf");
document.Save(fs);

// IronPDF: synchronous PdfDocument object
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Or get bytes: byte[] bytes = pdf.BinaryData;

頁眉/頁腳屬性變更

// PeachPDF: no header/footer API -- embed in source HTML
// (e.g. via CSS position:fixed)

// IronPDF: HtmlHeaderFooter objects
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = "<div>Header</div>"
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
    HtmlFragment = "<div>Footer</div>"
};

方法名稱變更

PeachPDFIronPDF
await generator.GeneratePdf(html, config)renderer.RenderHtmlAsPdf(html)
NetworkAdapter = new HttpClientNetworkAdapter(...) + GeneratePdf(null, config)renderer.RenderUrlAsPdf(url)
document.Save(stream)pdf.SaveAs(path)

遷移後的新能力

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

使用HTML的水印

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

數位簽名

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

功能比較總結

功能PeachPDFIronPDF
HTML轉PDF基於PdfSharpCore的佈局完整的Chromium
URL到PDF通過HttpClientNetworkAdapter(無JS)
CSS Grid/Flexbox部分/不保證
JavaScript不執行完整的ES2024
合併PDF無(僅HTML->PDF)
拆分PDF
浮水印手動通過HTML完整HTML
頁眉/頁腳手動通過HTML/CSS完整HTML
數位簽名
PDF/A
表單填寫
文字提取
圖像提取
異步支援僅支持異步API
跨平臺net8.0(Windows / Linux / macOS)

常見遷移問題

問題1:不同的API模式

問題: PeachPDF將PdfGenerateConfig(設置)分開,並且是異步的; IronPDF使用一個PdfDocument

解決方案:

// PeachPDF pattern (async, stream-out)
var config = new PdfGenerateConfig { PageSize = PageSize.Letter };
var generator = new PdfGenerator();
var document = await generator.GeneratePdf(html, config);
using var fs = File.Create(path);
document.Save(fs);

//IronPDFpattern
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(path);
C#

問題2:保存目標為流,不是路徑

問題: PeachPDF的Stream; IronPDF的pdf.SaveAs(path)接受路徑字串。

解決方案: 在IronPDF中直接使用FileStream

問題3:無現有PDF操作

問題: PeachPDF僅支持HTML到PDF; 它無法載入、合併、拆分或編輯現有PDF。

解決方案: 完成遷移後,使用IronPDF的pdf.AppendPdf替換這些操作。


遷移檢查表

遷移前

  • 審核程式碼庫中的PeachPDF使用情況
  • 記錄自訂配置
  • 記下所有頭/腳的實現
  • 獲取IronPDF授權金鑰來自ironpdf.com
  • 先使用IronPDF試用授權進行測試

套件變更

  • 移除PeachPDF NuGet套件
  • 安裝IronPdf NuGet套件:dotnet add package IronPdf

程式碼變更

  • 更新命名空間引入(using PeachPDF;using IronPdf;
  • 為頭/腳的功能新增using IronPdf.Rendering;
  • PdfGenerator + ChromePdfRenderer
  • RenderHtmlAsPdfAsync以保持異步)
  • HttpClientNetworkAdapter + renderer.RenderUrlAsPdf(url)
  • pdf.SaveAs(path)
  • 將HTML嵌入的頭/腳替換為HtmlFooter物件
  • 在應用程式啟動時新增授權初始化

遷移後

  • 測試HTML渲染質量
  • 驗證 PDF 輸出符合預期
  • 測試頁核/頁腳渲染及頁碼
  • 根據需要新增新功能(安全性、水印、合併)

請注意: PeachPDF是其註冊商標所有者的註冊商標。 本網站與PeachPDF沒有關聯、未經其認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供參考,反映撰寫時公開可用的資訊。
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天試用金鑰
無需信用卡或帳戶建立