跳至页脚内容
迁移指南

如何用 C# 从 PdfPig 迁移到 IronPDF

从PdfPig迁移到 IronPDF:完整的 C# 迁移指南。

从PdfPig迁移到IronPDF可将您的 PDF 功能从纯粹的阅读库扩展为一个全面的 PDF 解决方案,可处理创建、操作、文本提取和安全功能。 本指南提供了一个完整的、循序渐进的迁移路径,在保留现有提取工作流的同时,增加了 PDF 生成、HTML 转换、文档操作以及PdfPig无法提供的安全功能。

为何从PdfPig迁移到 IronPDF.

了解 PdfPig。

PdfPig 是一个专门为 C# 设计的开源 PDF 阅读和提取库。 作为声誉卓著的 Apache PDFBox 项目的一个分支,该库允许开发人员非常精确地访问 PDF 内容。 虽然PdfPig在提取能力方面表现出色,但与市场上更全面的库相比,它的范围很大程度上受到了限制。

PdfPig 为开发人员提供了从 PDF 文件中提取文本、图像、表单数据和元数据的可靠工具。 因此,它适合主要侧重于文档分析和数据挖掘的应用程序。 然而,PdfPig 的功能从根本上来说仅限于解析现有文档。

仅限阅读的限制

PdfPig 专注于 PDF 阅读。 当您的应用程序需要扩展到提取之外时,PdfPig 将无能为力:

1.无 PDF 生成:无法通过 HTML、URL 或编程创建 PDF。

2.No HTML-to-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";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

识别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" .
# 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;
// Before: PdfPig
using UglyToad.PdfPig;
using UglyToad.PdfPig.Content;
using UglyToad.PdfPig.DocumentLayoutAnalysis.WordExtractor;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

文档加载映射

PdfPigIronPDF备注
<代码>PdfDocument.Open(path)</代码<代码>PdfDocument.FromFile(路径)</代码从文件加载
<代码>PdfDocument.Open(字节)</代码<代码>PdfDocument.FromBinaryData(字节)</代码从字节加载
<代码>PdfDocument.Open(stream)</代码<代码>PdfDocument.FromStream(流)</代码从流加载
<代码>使用(var doc = ...)</代码var pdf = ...</代码IronPdf 不需要使用

页面访问和属性映射

PdfPigIronPDF备注
<代码>document.NumberOfPages</代码<代码>pdf.PageCount</代码总页数
<代码>document.GetPages()</代码<代码>pdf.Pages</代码页面收集
<代码>document.GetPage(1)</代码<代码>pdf.Pages[0]</代码单页(注:以 1 为基础,以 0 为基础)

文本提取映射

PdfPigIronPDF备注
<代码>page.Text</代码<代码>pdf.Pages[i].Text</代码页面文本
<代码>page.GetWords()</代码<代码>pdf.ExtractTextFromPage(i)</代码页面中的词语/文本
(manual loop)<代码>pdf.ExtractAllText()</代码一次性翻译所有文本

元数据访问映射

PdfPigIronPDF备注
<代码>document.Information.Title</代码<代码>pdf.MetaData.Title</代码文件标题
<代码>document.Information.Author</代码<代码>pdf.MetaData.Author</代码作者
<代码>document.Information.Subject</代码<代码>pdf.MetaData.Subject</代码翻译主题
<代码>document.Information.Creator</代码<代码>pdf.MetaData.Creator</代码创作者
<代码>document.Information.Producer</代码<代码>pdf.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(证书)</代码数字签名

代码迁移示例

示例 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());
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

After (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);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

PdfPig 和IronPDF都具有出色的文本提取功能。 关键区别在于代码模式。PdfPig需要使用 PdfDocument.Open()using 语句,使用 GetPages() 手动迭代页面,以及使用 StringBuilder 从每个<代码>page.Text</代码属性中积累文本。

IronPdf 将此简化为一次调用:PdfDocument.FromFile() 加载文档,ExtractAllText() 一次性返回所有文本内容。 无需 using 语句,无需手动迭代,无需 StringBuilder。 有关其他选项,请参阅 文本提取文档

示例 2:HTML 到 PDF 的转换

之前 (PdfPig):

//PdfPigdoes not supportHTML 至 PDFconversion
//PdfPigis a PDF reading/parsing library, not a PDF generation library
// You would need to use a different library forHTML 至 PDFconversion
//PdfPigdoes not supportHTML 至 PDFconversion
//PdfPigis a PDF reading/parsing library, not a PDF generation library
// You would need to use a different library forHTML 至 PDFconversion
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

After (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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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}");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

After (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}");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

这两个库都以几乎相同的模式提供元数据访问。PdfPig通过 document.Information 访问元数据,通过<代码>document.NumberOfPages</代码访问页数。 IronPdf 使用 pdf.MetaData 表示元数据,使用<代码>pdf.PageCount</代码表示页数。

迁移过程非常简单:将 PdfDocument.Open() 替换为 PdfDocument.FromFile() ;将 document.Information 替换为 pdf.MetaData ;将<代码>document.NumberOfPages</代码替换为<代码>pdf.PageCount</代码。 删除 using 语句包装器,因为IronPDF不需要它。


关键迁移说明

页面索引更改

PdfPig 使用基于 1 的索引; IronPdf 使用基于 0:

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

// IronPDF:基于 0indexing
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:基于 0indexing
var firstPage = pdf.Pages[0];  // First page

// Migration helper
int pdfPigIndex = 1;
int ironPdfIndex = pdfPigIndex - 1;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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}");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

水印

pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

密码保护

pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

功能对比摘要

特征PdfPigIronPDF
文本提取
元数据访问
图像提取
PDF 创建有限的
HTML 至 PDF
URL 至 PDF
合并 PDF
拆分 PDF
水印
表格填写
密码保护
数字签名
词位数据

迁移清单

迁移前

  • [ ] 清点代码库中所有PdfPig的使用情况
  • [ ] 确定是否需要词级位置数据(考虑混合方法)
  • [ ] 注意所有页面索引参考(需要将以 1 为基础转换为以 0 为基础)
  • [ ] 计划 IronPdf 许可证密钥存储(建议使用环境变量)
  • [ ] 先使用 IronPdf 试用版许可证进行测试

软件包变更

  • [ ] 删除 PdfPig NuGet 软件包:<代码>dotnet 移除 package PdfPig
  • [ ] 安装 IronPDF NuGet 软件包:<代码>dotnet 添加软件包 IronPdf

代码更改

  • [ ] 更新命名空间导入(使用 UglyToad.PdfPig;使用 IronPdf;)
  • [ ] 将 PdfDocument.Open() 替换为 PdfDocument.FromFile()
  • [ ] 将 document.Information 替换为 pdf.MetaData
  • [ ] 将<代码>document.NumberOfPages</代码替换为 pdf.PageCount
  • [ ] 将基于 1 的页面索引转换为基于 0 的页面索引
  • [ ] 删除 using 语句(可选,IronPDF 并不要求它们)
  • [ ] 在应用程序启动时添加 IronPdf 许可证密钥

后迁移

  • [ ] 测试文本提取输出是否符合预期
  • [ ] 测试所有 PDF 生成场景
  • [ ] 根据需要添加新功能(合并、水印、安全)。
  • [ ] 如果部署到 Linux,则安装 Linux 依赖项

结论

从PdfPig迁移到IronPDF可将您的 PDF 功能从只读扩展到完整的 PDF 生命周期解决方案。PdfPig在阅读和提取方面表现出色,而IronPDF则在多功能性和全面 PDF 管理方面更胜一筹。

本次迁移的主要变化有 1.文档加载:<代码>PdfDocument.Open()</代码> → <代码>PdfDocument.FromFile()</代码 2.元数据访问:<代码>document.Information</代码> → <代码>pdf.MetaData</代码 3.页数:<代码>document.NumberOfPages</代码> → <代码>pdf.PageCount</代码 4.页面索引:基于 1 → 基于 0 5.处置模式:必填 using → 可选 6.新功能:HTML 至 PDF、PDF 合并、水印、安全性、数字签名等

在PdfPig和IronPDF之间做出选择主要取决于项目的要求。 如果您的主要需求是具有可靠的提取和阅读能力,并获得具有成本效益的开源许可,请使用 PdfPig。 如果您需要全面的 PDF 生命周期支持(包括 HTML 到 PDF 的转换),并且您的项目需要强大的 PDF 创建和编辑功能以及专业的支持,请使用 IronPDF。

探索完整的IronPDF文档教程API参考,加速您的PdfPig迁移。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。