比较

PdfPig 与 IronPDF:技术比较指南

当 .NET 开发人员处理 PDF 文件时,他们经常会寻找能够处理读取、提取和生成 PDF 文档等任务的库。 在众多可用选项中,pdfpig 已成为一款主要专注于读取和提取 PDF 内容的工具。 本文将 pdfpig 与IronPDF进行比较,考察它们在架构、功能完整性和对各种应用需求的适用性方面的差异。

什么是 PdfPig?

PdfPig 是一个专门为 C# 设计的开源 PDF 阅读和提取库。 它允许开发人员准确访问 PDF 内容,并提供从 PDF 文件中提取文本、图像、表单数据和元数据的工具。 pdfpig 采用 Apache 2.0 许可证授权,既是开源软件,又对商业用户友好,允许对其进行修改,并作为专有应用程序的一部分进行分发。

虽然 pdfpig 在提取功能方面表现出色,但其范围仅限于解析现有文档。 该库不能从 HTML、URL 或程序中创建 PDF--它只专注于阅读已有的内容。

pdfpig 的主要特点包括

-只读模式:专为 PDF 解析和提取而设计 -开源:采用 Apache 2.0 许可证,无需支付许可费用 -基于位置数据的文本提取:能够精确提取包含位置数据的文本,并能妥善处理字符字体。 -词级分析:提供用于布局分析的单词边界框 -纯 .NET:无原生依赖,可在任何 .NET 运行环境中运行 -基于 1 的页面索引:页面访问采用基于 1 的索引方式

什么是 IronPDF?

IronPDF是一个完整的 .NET 库,提供完整的 PDF 生命周期管理。 ChromePdfRenderer类使用基于 Chromium 的现代引擎进行 HTML 到 PDF 的转换,而PdfDocument类提供广泛的操作和提取功能。

与 pdfpig 的只读功能不同,IronPDF 同时支持 PDF 生成和提取,使其成为各种 PDF 相关任务的灵活选择。 该库可处理 HTML 和 URL 创建、文本提取、文档操作、合并、水印、安全功能和数字签名,所有这些都在一个库中完成。

架构比较

pdfpig 和IronPDF的主要区别在于它们的范围:只读与完整的 PDF 生命周期管理。

方面PdfPigIronPDF
主要关注点阅读/提取完整的 PDF 生命周期
PDF 创建非常有限综合性
HTML 到 PDF不支持完整的 Chromium 引擎
URL 转 PDF不支持支持
文本提取出色的出色的
图像提取
元数据访问
PDF 操作不支持合并、拆分、旋转
水印不支持支持
安全/加密不支持支持
表格填写不支持支持
数字签名不支持支持
页面索引1 基于基于 0
许可Apache 2.0(免费)商业翻译
支持社区专业

对于仅需要 PDF 阅读和文本提取的应用程序,pdfpig 可提供出色的功能。 对于需要 PDF 生成、文档操作或任何创建功能的应用程序,IronPDF 可提供完整的解决方案。

文本提取对比

文本提取展示了两个库在这一常见工作流程中的优势,但在 API 设计方面存在明显差异。

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());
        }
    }
}
Imports UglyToad.PdfPig
Imports System
Imports System.Text

Class Program
    Shared Sub Main()
        Using document = PdfDocument.Open("input.pdf")
            Dim text = New StringBuilder()
            For Each page In document.GetPages()
                text.AppendLine(page.Text)
            Next
            Console.WriteLine(text.ToString())
        End Using
    End Sub
End Class
$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);
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim pdf = PdfDocument.FromFile("input.pdf")
        Dim text As String = pdf.ExtractAllText()
        Console.WriteLine(text)
    End Sub
End Class
$vbLabelText   $csharpLabel

PdfPig 要求使用 using 语句进行正确处理,通过 GetPages() 对页面进行迭代,并使用 StringBuilder 手动聚合文本。page.Text属性为每个页面提供文本内容。

IronPdf 的 ExtractAllText() 方法只需调用一次即可提取所有页面中的所有文本,无需手动迭代或处置模式。 对于逐页提取,IronPDF 提供ExtractTextFromPage(index)。 请注意 API 的区别:pdfpig 使用 PdfDocument.Open() 而IronPDF使用 PdfDocument.FromFile()

HTML 至 PDF 转换

HTML 到 PDF 的转换展示了这些库之间的基本能力差距。

PdfPig HTML 转 PDF 方法:

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

IronPDF HTML 转 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");
    }
}
// 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");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

PdfPig 无法从 HTML 创建 PDF,因为它不支持此功能。 该库专门用于读取和解析现有的 PDF 文档,而不是生成新文档。

IronPDF 的 ChromePdfRenderer 使用现代 Chromium 引擎转换 HTML 内容,完全支持 CSS3 和 JavaScript,可从网页内容生成高保真 PDF 输出。 有关 HTML 到IronPDF转换模式的详细指导,请参阅 HTML 到 PDF 教程

PDF 元数据访问

阅读 PDF 元数据可以看到不同 API 模式的类似功能。

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}");
        }
    }
}
Imports UglyToad.PdfPig
Imports System

Class Program
    Shared Sub Main()
        Using document = PdfDocument.Open("input.pdf")
            Dim 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}")
        End Using
    End Sub
End Class
$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}");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim pdf = PdfDocument.FromFile("input.pdf")
        Dim 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}")
    End Sub
End Class
$vbLabelText   $csharpLabel

这两个库都可以访问标准的 PDF 元数据属性。PdfPig使用 document.Information 而IronPDF使用 pdf.MetaData 。 在 pdfpig 中通过document.NumberOfPages访问页数,而在IronPDF中则通过pdf.PageCount访问页数。

API 映射参考

对于评估将 pdfpig 移植到IronPDF的团队来说,了解 API 映射有助于估算开发工作量。

文档加载

PdfPigIronPDF
PdfDocument.Open(path)|PdfDocument.FromFile(路径)`
PdfDocument.Open(字节)PdfDocument.FromBinaryData(字节)
PdfDocument.Open(stream)PdfDocument.FromStream(流)
使用(var doc = ...)var pdf = ...

页面访问

PdfPigIronPDF
document.NumberOfPagespdf.PageCount
document.GetPages()pdf.Pages
document.GetPage(1)pdf.Pages[0]
page.Textpdf.Pages[i].Text
page.GetWords()pdf.ExtractTextFromPage(i)

元数据

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.CopyPages(start, end)提取特定页面
pdf.ApplyWatermark(html)添加水印
pdf.SecuritySettings.UserPassword密码保护
pdf.Sign(证书)数字签名
pdf.Form.GetFieldByName(name).Value表格填写

IronPDF 的这些附加功能超出了阅读范围,可提供完整的 PDF 生命周期管理。 有关 PDF 操作功能,请参阅 合并和拆分 PDF 指南

页面索引差异

迁移的关键区别:pdfpig 使用基于 1 的页面索引,而IronPDF使用基于 0 的索引。

PdfPig页面访问:

// PdfPig:1 基于indexing
var firstPage = document.GetPage(1);  // First page
var secondPage = document.GetPage(2); // Second page
// PdfPig:1 基于indexing
var firstPage = document.GetPage(1);  // First page
var secondPage = document.GetPage(2); // Second page
' PdfPig:1 基于indexing
Dim firstPage = document.GetPage(1)  ' First page
Dim secondPage = document.GetPage(2) ' Second page
$vbLabelText   $csharpLabel

访问IronPDF页面:

// IronPDF:基于 0indexing
var firstPage = pdf.Pages[0];  // First page
var secondPage = pdf.Pages[1]; // Second page
// IronPDF:基于 0indexing
var firstPage = pdf.Pages[0];  // First page
var secondPage = pdf.Pages[1]; // Second page
' IronPDF:基于 0indexing
Dim firstPage = pdf.Pages(0)  ' First page
Dim secondPage = pdf.Pages(1) ' Second page
$vbLabelText   $csharpLabel

在迁移引用特定页面的代码时,需要仔细注意这种差异。

单词位置数据

pdfpig 具有明显优势的一个方面是提供词级位置数据。

PdfPig单词位置:

using (var document = PdfDocument.Open("input.pdf"))
{
    foreach (var page in document.GetPages())
    {
        var words = page.GetWords();
        foreach (var word in words)
        {
            //PdfPigprovides bounding box coordinates
            Console.WriteLine($"Word: '{word.Text}' at ({word.BoundingBox.Left}, {word.BoundingBox.Top})");
        }
    }
}
using (var document = PdfDocument.Open("input.pdf"))
{
    foreach (var page in document.GetPages())
    {
        var words = page.GetWords();
        foreach (var word in words)
        {
            //PdfPigprovides bounding box coordinates
            Console.WriteLine($"Word: '{word.Text}' at ({word.BoundingBox.Left}, {word.BoundingBox.Top})");
        }
    }
}
Imports System

Using document = PdfDocument.Open("input.pdf")
    For Each page In document.GetPages()
        Dim words = page.GetWords()
        For Each word In words
            'PdfPig provides bounding box coordinates
            Console.WriteLine($"Word: '{word.Text}' at ({word.BoundingBox.Left}, {word.BoundingBox.Top})")
        Next
    Next
End Using
$vbLabelText   $csharpLabel

PdfPig 的 word.BoundingBox 可为每个单词提供精确的定位数据,从而实现布局分析、表格检测和文档结构理解。IronPDF提取文本时不包含位置数据--如果需要字级坐标,可考虑使用这两个库的混合方法。

处置模式差异

这些库的内存管理要求各不相同。

PdfPig处置(必填):

//PdfPigrequires using statement for proper disposal
using (var document = PdfDocument.Open("input.pdf"))
{
    // Work with document
}
//PdfPigrequires using statement for proper disposal
using (var document = PdfDocument.Open("input.pdf"))
{
    // Work with document
}
' PdfPig requires Using statement for proper disposal
Using document = PdfDocument.Open("input.pdf")
    ' Work with document
End Using
$vbLabelText   $csharpLabel

IronPDF处置(可选):

//IronPDFdoesn't require using statement
var pdf = PdfDocument.FromFile("input.pdf");
// Work with pdf
// Dispose optional: pdf.Dispose();
//IronPDFdoesn't require using statement
var pdf = PdfDocument.FromFile("input.pdf");
// Work with pdf
// Dispose optional: pdf.Dispose();
Dim pdf = PdfDocument.FromFile("input.pdf")
' Work with pdf
' Dispose optional: pdf.Dispose()
$vbLabelText   $csharpLabel

PdfPig 要求使用 using 模式进行适当的资源清理。IronPDF的PdfDocument不需要显式处置,不过如果需要的话,也可以进行处置。

功能对比摘要

pdfpig 和IronPDF之间的范围差异几乎涵盖了阅读之外的所有 PDF 操作。

特征PdfPigIronPDF
许可开源(Apache 2.0)商业翻译
PDF阅读/提取出色的出色的
PDF 生成有限的综合性
HTML 到 PDF不支持支持
URL 转 PDF不支持支持
合并 PDF 文件不支持支持
拆分 PDF 文件不支持支持
水印不支持支持
密码保护不支持支持
数字签名不支持支持
表格填写不支持支持
单词位置数据支持不支持
支持和文档社区支持专项支持
成本免费有偿

仅靠 pdfpig 无法实现需要水印、PDF 合并或安全功能的应用程序。

当团队考虑从PdfPig迁移到IronPDF时。

有几个因素促使团队将IronPDF作为 pdfpig 的替代或补充进行评估:

PDF 创建要求:PdfPig无法通过 HTML、URL 或编程方式创建 PDF。 需要从网页内容或模板生成 PDF 的应用程序需要额外的库或IronPDF的完整解决方案。

文档操作需求:PdfPig无法合并、拆分或修改 PDF 文件。 需要组装或修改文档的应用程序需要 IronPdf 的操作功能。

安全要求:PdfPig无法添加密码、加密或数字签名。 有安全要求的应用程序需要 IronPdf 的安全功能。

水印和品牌:PdfPig无法向现有文档添加视觉叠加层。 需要创建文档品牌的应用程序需要 IronPdf 的水印功能。

专业支持:PdfPig依靠社区支持。 需要保证响应时间和专业协助的组织可从IronPDF的商业支持中获益。

混合方法:有些团队同时使用这两个库——pdfpig 用于带有单词位置的详细文本分析,IronPDF 用于生成和处理文本。 这种方法充分利用了每个库的优势。

安装比较

PdfPig安装:

Install-Package PdfPig
Install-Package PdfPig
SHELL

纯 .NET,无本地依赖性。

安装 IronPdf:

Install-Package IronPdf
Install-Package IronPdf
SHELL

IronPdf 需要配置许可证密钥:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

IronPDF 的首次运行会下载 Chromium 渲染引擎(一次性约 150MB)。 对于 Linux 部署,需要额外的依赖性。 该库支持 .NET Framework、.NET Core、.NET 5+,并向前兼容到 .NET 10 和 C# 14。

做出决定

在 pdfpig 和IronPDF之间做出选择取决于您的应用需求:

如果您有以下需求,请考虑使用 PdfPig:您主要需要可靠的提取和读取功能,您需要单词级别的定位数据进行布局分析,您想要一个具有开源许可证的经济高效的解决方案,并且您不需要 PDF 生成或操作。

如果您有以下需求,请考虑使用 IronPDF:您需要全面的 PDF 生命周期支持,包括 HTML 到 PDF 的转换;您的项目需要 PDF 创建和编辑功能;您需要文档操作(合并、拆分、水印);您需要安全功能(密码、加密、签名);或者您需要商业许可支持的专业支持。

两者兼顾:对于具有 PDF 生成功能的高级文本分析,混合方法利用 pdfpig 的单词位置功能和IronPDF的创建和操作功能。

开始使用 IronPDF

评估 IronPdf 以满足您的 PDF 需求:

1.通过 NuGet 安装:安装-打包 IronPdf 2.查看 入门文档</a 3.探索 HTML 转 PDF 教程 的创建模式 4.请查看 API 参考 以获取完整的方法文档

IronPDF 教程提供了全面的示例,涵盖从基本转换到高级 PDF 操作的常见场景。

在.NET PDF 生态系统中,PdfPig 和IronPDF的作用根本不同。PdfPig擅长 PDF 阅读和文本提取--精确解析文档并提供单词级位置数据用于布局分析。IronPDF提供了完整的 PDF 解决方案,在一个库中涵盖了创建、提取、操作和安全性。

对于只需要阅读 PDF 的应用程序,pdfpig 专注于开源许可的方法可能比较合适。 对于需要 PDF 生成、文档操作或任何阅读之外的创建功能的应用程序,IronPDF 可原生提供这些功能,而无需额外的库。

该决定超出了当前的要求,也超出了预期的需求。 pdfpig 在阅读和提取领域表现出色,而IronPDF则在多功能性和全面的 PDF 管理方面更胜一筹。 企业通常从阅读需求开始,然后扩展到生成和操作需求--从一开始就选择IronPDF可为这些扩展需求提供基础,同时确保专业支持和积极开发。

在选择这些库时,请评估您当前和预期的完整 PDF 需求。 pdfpig 的只读性质会随着应用程序的成熟和需求的扩展而产生明显的能力界限。