IRONSOFTWAREHOME
影片

如何使用 C# 將 XML 轉換為 PDF

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

從PdfPig遷移到IronPDF可以擴展您的PDF功能,從一個專注於閱讀的程式庫(具有基於座標的撰寫和基本合併的狹窄編寫介面)轉變為一個全面的PDF解決方案,可處理建立、操作、文字提取和安全性功能。 本指南提供完整且逐步的遷移路徑,保留您現有的提取工作流程,同時增加HTML轉換、高層次文件操作、浮水印和安全撰寫,這些是PdfPig不提供的。

為何從PdfPig遷移到IronPDF

了解PdfPig

PdfPig(NuGet套件UglyToad.PdfPig)是一個開源.NET PDF閱讀和提取程式庫,最初受Apache PDFBox Java專案啟發,並部分移植自該專案。 它允許開發者以高精度存取PDF的結構內容。 雖然PdfPig在提取方面表現出色,但其範圍比完整生命週期的商業程式庫更窄。 該專案仍為pre-1.0(目前穩定發布版為0.1.14),其README中指出"在版本低於1.0.0時,小版本將無需警告更改公共API。"

PdfPig提供可靠的工具來提取文字(具有字母和單詞級位置)、圖像、只讀的表單資料、註釋和元資料。 它還暴露了有限的編寫介面——UglyToad.PdfPig.Writer中)用於合併現有的PDF文件。 這使得它成為一個主要專注於文件分析、資料挖掘和基本合併的應用程式的合適選擇。

閱讀為主的限制

PdfPig是以閱讀為先,其編寫介面是有意設計得很狹窄。 當您的應用程式需要超越提取和基本合併時,PdfPig無法提供幫助:

  1. 有限的PDF生成: 新文件需要通過PdfPoint手動座標放置,無法進行高層次布局。

  2. 沒有HTML到PDF轉換: PdfPig是一個PDF閱讀/解析程式庫,不是PDF生成程式庫。 您將需要使用不同的程式庫進行HTML到PDF的轉換。

  3. 有限的文件操作: PdfMerger支持合併,但沒有高層次的拆分/旋轉/編輯API。

  4. 沒有安全撰寫: 能閱讀加密的PDF(有密碼)但不能新增密碼、加密或數位簽章。

  5. 沒有浮水印/印章: 沒有高層次API用於現有文件的視覺覆蓋。

  6. 無表單填寫: 表單是只讀的,值不能更改或新增。

PdfPig與IronPDF比較

功能PdfPigIronPDF
授權開源(Apache 2.0)商業
NuGet套件PdfPig(v0.1.14,pre-1.0)IronPdf
PDF閱讀/提取優秀優秀
PDF 生成有限(基於座標通過PdfDocumentBuilder全面
HTML 到 PDF不支持支援
文字提取優秀(具單詞框)優秀(僅文字)
PDF合併支持(PdfMerger支持(PdfDocument.Merge
拆分/旋轉/編輯不支持(高層次)支援
水印不支持支援
安全性/加密撰寫不支持支援
支持和檔社群支持專項支持
頁碼編索基於10起始基數

IronPDF支持完整的PDF建立、閱讀、編輯和簽名功能。 這種靈活性使開發者能夠在現代.NET上從頭到尾管理PDF文件,提供超越PdfPig閱讀功能的完整PDF生命週期解決方案。


開始之前

前提條件

  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 PdfPig
dotnet remove package PdfPig

# Install IronPDF
dotnet add package IronPdf
SHELL

授權配置

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

識別PdfPig使用情況

# FindPdfPigusage
grep -r "UglyToad\.PdfPig\|PdfDocument\.Open\|GetPages\(\)" --include="*.cs" .

# Find page index references (may need 1→0 conversion)
grep -r "GetPage(\|NumberOfPages" --include="*.cs" .
SHELL

完整API參考

名稱空間變更

// Before: PdfPig
using UglyToad.PdfPig;
using UglyToad.PdfPig.Content;
using UglyToad.PdfPig.DocumentLayoutAnalysis.WordExtractor;

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

文件載入映射

PdfPigIronPDF
PdfDocument.Open(path)PdfDocument.FromFile(path)
PdfDocument.Open(bytes)PdfDocument.FromBinaryData(bytes)
PdfDocument.Open(stream)PdfDocument.FromStream(stream)
using (var doc = ...)var pdf = ...

頁面存取與屬性映射

PdfPigIronPDF
document.NumberOfPagespdf.PageCount
document.GetPages()pdf.Pages
document.GetPage(1)pdf.Pages[0]

文字提取映射

PdfPigIronPDF
page.Textpdf.Pages[i].Text
page.GetWords()pdf.ExtractTextFromPage(i)
(manual loop)pdf.ExtractAllText()

元資料存取映射

PdfPigIronPDF
document.Information.Titlepdf.MetaData.Title
document.Information.Authorpdf.MetaData.Author
document.Information.Subjectpdf.MetaData.Subject
document.Information.Creatorpdf.MetaData.Creator
document.Information.Producerpdf.MetaData.Producer

PdfPig中無法使用的新功能

IronPDF功能說明
renderer.RenderHtmlAsPdf(html)HTML到PDF轉換
renderer.RenderUrlAsPdf(url)URL到PDF轉換
pdf.ApplyWatermark(html)新增水印
pdf.SecuritySettings.UserPassword密碼保護
pdf.Sign(certificate)數位簽名

注意:PDF合併在兩個程式庫中均可用(PdfPig中的PdfDocument.Merge)。


程式碼遷移範例

範例1:從PDF中提取文字

之前(PdfPig):

// NuGet: Install-Package PdfPig
using UglyToad.PdfPig;
using System;
using System.Text;

class Program
{
    static void Main()
    {
        using (var document = PdfDocument.Open("input.pdf"))
        {
            var text = new StringBuilder();
            foreach (var page in document.GetPages())
            {
                text.AppendLine(page.Text);
            }
            Console.WriteLine(text.ToString());
        }
    }
}

之後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");
        string text = pdf.ExtractAllText();
        Console.WriteLine(text);
    }
}

PdfPig和IronPDF都提供卓越的文字提取能力。 主要區別在於程式碼模式。 PdfPig需要page.Text屬性中的文字。

IronPDF簡化為單一呼叫:ExtractAllText()一次返回所有文字內容。 不需要using語句,無需手動迭代,無需StringBuilder。 請參見文字提取文件以獲得更多選項。

範例2:HTML到PDF轉換

之前(PdfPig):

PdfPig不支持HTML到PDF的轉換。 PdfPig是一個PDF閱讀/解析程式庫,不是PDF生成程式庫。 您將需要使用不同的程式庫進行HTML到PDF的轉換。

之後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>");
        pdf.SaveAs("output.pdf");
    }
}

此範例突出顯示了最顯著的功能差距。PdfPig明確指出其"不支持HTML到PDF轉換",並"是PDF閱讀/解析程式庫,不是PDF生成程式庫。"如果您需要用PdfPig將HTML製作成PDF,您需要完全使用其他程式庫。

IronPDF通過ChromePdfRenderer提供原生的HTML到PDF轉換。 RenderHtmlAsPdf()方法接受HTML字串,並使用內部Chromium引擎進行準確呈現HTML、CSS和JavaScript的PDF文件轉換。 生成的SaveAs()保存,或在保存前進一步操作。 查看更多HTML到PDF文件以獲得完整的範例。

範例3:讀取PDF元資料

之前(PdfPig):

// NuGet: Install-Package PdfPig
using UglyToad.PdfPig;
using System;

class Program
{
    static void Main()
    {
        using (var document = PdfDocument.Open("input.pdf"))
        {
            var info = document.Information;
            Console.WriteLine($"Title: {info.Title}");
            Console.WriteLine($"Author: {info.Author}");
            Console.WriteLine($"Subject: {info.Subject}");
            Console.WriteLine($"Creator: {info.Creator}");
            Console.WriteLine($"Producer: {info.Producer}");
            Console.WriteLine($"Number of Pages: {document.NumberOfPages}");
        }
    }
}

之後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");
        var info = pdf.MetaData;
        Console.WriteLine($"Title: {info.Title}");
        Console.WriteLine($"Author: {info.Author}");
        Console.WriteLine($"Subject: {info.Subject}");
        Console.WriteLine($"Creator: {info.Creator}");
        Console.WriteLine($"Producer: {info.Producer}");
        Console.WriteLine($"Number of Pages: {pdf.PageCount}");
    }
}

兩個程式庫都能以幾乎相同的模式提供元資料存取。 PdfPig通過document.NumberOfPages存取頁面計數。 IronPDF使用pdf.PageCount讀取頁面計數。

遷移很簡單:用document.NumberOfPages。 移除using語句包裝,因為IronPDF不需要它。


關鍵遷移注意事項

頁碼編索變更

PdfPig使用1為基索引; IronPDF使用0為基索引:

// PdfPig: 基於1 indexing
var firstPage = document.GetPage(1);  // First page

// IronPDF:0起始基數indexing
var firstPage = pdf.Pages[0];  // First page

// Migration helper
int pdfPigIndex = 1;
int ironPdfIndex = pdfPigIndex - 1;
C#

使用語句不需要

// PdfPig: Requires using for disposal
using (var document = PdfDocument.Open("input.pdf"))
{
    // ...
}

// IronPDF: No using required (but can use for cleanup)
var pdf = PdfDocument.FromFile("input.pdf");
// ...
// pdf.Dispose(); // Optional

文件載入更改

// PdfPig: PdfDocument.Open()
using (var document = PdfDocument.Open("input.pdf"))

// IronPDF: PdfDocument.FromFile()
var pdf = PdfDocument.FromFile("input.pdf");

元資料屬性名稱變更

// PdfPig: document.Information
var info = document.Information;

// IronPDF: pdf.MetaData
var info = pdf.MetaData;

頁數屬性變更

// PdfPig: document.NumberOfPages
Console.WriteLine($"Pages: {document.NumberOfPages}");

// IronPDF: pdf.PageCount
Console.WriteLine($"Pages: {pdf.PageCount}");

遷移後的新能力

遷移到IronPDF後,您獲得了PdfPig無法提供的功能:

PDF合併

var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");

水印

pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");

密碼保護

pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";

數位簽名

var signature = new PdfSignature("certificate.pfx", "password")
{
    SigningContact = "support@company.com",
    SigningReason = "Document Approval"
};
pdf.Sign(signature);

功能比較總結

功能PdfPigIronPDF
文字提取
元資料存取
圖像提取
PDF建立有限(基於座標)
HTML轉PDF
URL到PDF
合併PDF✓(PdfMerger
拆分PDF
浮水印
表單填寫
密碼保護
數位簽名
單詞位置資料

遷移檢查表

遷移前

  • 清點程式碼庫中的所有PdfPig用法
  • 確認是否需要單詞級位置資料(考慮混合方法)
  • 記錄所有頁面索引引用(需要從1為基轉換為0為基)
  • 規劃IronPDF授權密鑰的儲存(建議使用環境變數)
  • 先使用IronPDF試用授權進行測試

套件變更

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

程式碼變更

  • 更新命名空間導入(using UglyToad.PdfPig;using IronPdf;
  • PdfDocument.Open()
  • document.Information
  • document.NumberOfPages
  • 將頁面索引從1為基轉換為0為基
  • 移除using語句(可選,IronPDF不需要它們)
  • 在應用程式啟動時新增IronPDF授權金鑰

遷移後

  • 測試文字提取輸出是否符合預期
  • 測試所有PDF生成場景
  • 根據需要新增新功能(合併,水印,安全性)
  • 如果部署到Linux,安裝Linux依賴項

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