跳至頁尾內容
移民指南

如何在 C# 中將 PdfPig 遷移到 IronPDF

從 PdfPig 遷移到 IronPDF 可以將您的 PDF 功能從唯讀庫擴展到全面的 PDF 解決方案,該解決方案可以處理建立、操作、文字擷取和安全功能。 本指南提供了一個完整的、逐步的遷移路徑,在保留您現有提取工作流程的同時,添加了 PdfPig 無法提供的 PDF 生成、HTML 轉換、文件操作和安全功能。

為什麼要從 PdfPig 遷移到 IronPDF

了解 PDFPig

PdfPig 是一個專為 C# 設計的開源 PDF 閱讀和提取庫。 作為知名 Apache PDFBox 專案的一個分支,該程式庫允許開發人員以驚人的精度存取 PDF 的內容。 雖然 PdfPig 在提取功能方面表現出色,但與市場上更全面的庫相比,其範圍相當有限。

PdfPig 為開發者提供可靠的工具,可從 PDF 檔案中提取文字、圖像、表單資料和元資料。 這使其成為主要側重於文件分析和資料探勘的應用的理想選擇。 然而,PdfPig 的功能從根本上來說僅限於解析現有文件。

只讀限制

PdfPig 專注於 PDF 閱讀。 當您的應用程式所需的功能超出資料擷取之外時,PdfPig 就幫不上忙了:

1.無法產生 PDF:無法從 HTML、URL 或透過程式設計方式建立 PDF。

2.不支援 HTML 轉 PDF: PdfPig 是一個 PDF 讀取/解析庫,而不是一個 PDF 生成庫。 您需要使用不同的庫來進行 HTML 到 PDF 的轉換。

3.不支援文件操作:無法合併、拆分或修改 PDF 文件。

4.無安全功能:無法新增密碼、加密或數位簽章。

5.無浮水印/印章:無法為現有文件添加視覺疊加層。

6.無法填寫表單:無法透過程式填寫 PDF 表單。

PdfPig 與 IronPDF 的比較

特徵PdfPigIronPDF
執照開源(Apache 2.0)商業的
PDF讀取/提取出色的出色的
PDF生成有限的綜合的
HTML 轉 PDF不支援。支援
文字擷取出色的出色的
PDF 處理不支援合併、拆分、旋轉
水印不支援全力支持
安全/加密不支援全力支持
支援和文檔社區支持專屬支持
頁面索引基於 1 的基於 0 的

IronPDF 支援建立、閱讀、編輯和簽署 PDF 的一整套功能。 這種多功能性使開發人員能夠從頭到尾管理 PDF 文件。 對於計劃在 2025 年和 2026 年採用 .NET 10 和 C# 14 的團隊,IronPDF 提供了一個完整的 PDF 生命週期解決方案,其功能遠超 PdfPig 的讀取功能。


開始之前

先決條件

  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
# 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";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
$vbLabelText   $csharpLabel

識別 PdfPig 使用情況

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

# Find page index references (may need 1→0 conversion)
grep -r "GetPage(\|NumberOfPages" --include="*.cs" .
# Find PdfPig usage
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;
// Before: PdfPig
using UglyToad.PdfPig;
using UglyToad.PdfPig.Content;
using UglyToad.PdfPig.DocumentLayoutAnalysis.WordExtractor;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
$vbLabelText   $csharpLabel

文件載入映射

PdfPigIronPDF筆記
PdfDocument.Open(path)PdfDocument.FromFile(path)從檔案載入
PdfDocument.Open(bytes)PdfDocument.FromBinaryData(bytes)從位元組加載
PdfDocument.Open(stream)PdfDocument.FromStream(stream)從串流中載入
using (var doc = ...)var pdf = ...IronPDF 不需要使用

頁面存取和屬性映射

PdfPigIronPDF筆記
document.NumberOfPagespdf.PageCount總頁數
document.GetPages()pdf.Pages頁面集合
document.GetPage(1)pdf.Pages[0]單頁(註:基於 1 的計數與基於 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
PdfDocument.Merge(pdfs)合併多個PDF文件
pdf.ApplyWatermark(html)添加浮水印
pdf.SecuritySettings.UserPassword密碼保護
pdf.Sign(certificate)數位簽名

程式碼遷移範例

範例 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());
        }
    }
}
// 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());
        }
    }
}
$vbLabelText   $csharpLabel

(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);
    }
}
// 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);
    }
}
$vbLabelText   $csharpLabel

PdfPig 和 IronPDF 都提供了優秀的文字擷取功能。 主要區別在於程式碼模式。 PdfPig 需要使用PdfDocument.Open()進行using語句,使用GetPages()手動遍歷頁面,並使用StringBuilder從每個page.Text屬性中收集文字。

IronPDF 將此操作簡化為一次呼叫: PdfDocument.FromFile()載入文檔, ExtractAllText()一次傳回所有文字內容。 無需using語句,無需手動迭代,無需 StringBuilder。 有關其他選項,請參閱文字擷取文件

範例 2:HTML 轉 PDF

之前(PdfPig):

// PdfPig does not support HTML 轉 PDF conversion
// PdfPig is a PDF reading/parsing library, not a PDF generation library
// You would need to use a different library for HTML 轉 PDF conversion
// PdfPig does not support HTML 轉 PDF conversion
// PdfPig is a PDF reading/parsing library, not a PDF generation library
// You would need to use a different library for HTML 轉 PDF conversion
$vbLabelText   $csharpLabel

(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");
    }
}
// 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");
    }
}
$vbLabelText   $csharpLabel

這個例子凸顯了最顯著的功能差距。 PdfPig明確指出它"不支援HTML轉PDF",並且"是一個PDF讀取/解析庫,而不是PDF生成庫"。如果您需要使用PdfPig從HTML建立PDF,則需要使用完全不同的程式庫。

IronPDF 透過ChromePdfRenderer提供原生 HTML 到 PDF 的轉換功能。 RenderHtmlAsPdf()方法接受 HTML 字串,並使用 Chromium 引擎將其轉換為 PDF 文檔,以便準確地渲染 HTML、CSS 和 JavaScript。 產生的PdfDocument可以使用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}");
        }
    }
}
// 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}");
        }
    }
}
$vbLabelText   $csharpLabel

(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}");
    }
}
// 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}");
    }
}
$vbLabelText   $csharpLabel

這兩個庫提供的元資料存取模式幾乎完全相同。 PdfPig 透過document.Information存取元數據,透過document.NumberOfPages存取頁數。 IronPDF 使用pdf.MetaData取得元數據,使用pdf.PageCount取得頁數。

遷移很簡單:將PdfDocument.Open()替換為PdfDocument.FromFile()document.Informationpdf.MetaData ,將document.NumberOfPages替換為pdf.PageCount 。 移除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;
// 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;
$vbLabelText   $csharpLabel

使用聲明不需要

// 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: 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
$vbLabelText   $csharpLabel

文件載入變更

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

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

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

元資料屬性名稱更改

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

// IronPDF: pdf.MetaData
var info = pdf.MetaData;
// PdfPig: document.Information
var info = document.Information;

// IronPDF: pdf.MetaData
var info = pdf.MetaData;
$vbLabelText   $csharpLabel

頁面計數屬性更改

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

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

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

遷移後的新功能

遷移到 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");
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
$vbLabelText   $csharpLabel

水印

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

密碼保護

pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
$vbLabelText   $csharpLabel

數位簽名

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

功能對比總結

特徵PdfPigIronPDF
文字擷取
元數據訪問
影像擷取
PDF 建立有限的
HTML 轉 PDF
PDF檔案的URL
合併PDF
拆分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()替換為PdfDocument.FromFile()
  • document.Information替換為pdf.MetaData
  • document.NumberOfPages替換為pdf.PageCount
  • 將頁面索引從基於 1 的索引轉換為基於 0 的索引
  • 刪除using語句(可選,IronPDF 不需要它們)
  • 在應用程式啟動時新增 IronPDF 許可證金鑰

移民後

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

柯蒂斯·週
技術撰稿人

Curtis Chau擁有卡爾頓大學電腦科學學士學位,專長於前端開發,精通Node.js、TypeScript、JavaScript和React。他熱衷於打造直覺美觀的使用者介面,喜歡使用現代框架,並擅長撰寫結構清晰、視覺效果出色的使用者手冊。

除了開發工作之外,柯蒂斯對物聯網 (IoT) 也抱有濃厚的興趣,致力於探索硬體和軟體整合的創新方法。閒暇時,他喜歡玩遊戲和製作 Discord 機器人,將他對科技的熱愛與創造力結合。