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 生命周期管理。
| 方面 | PdfPig | IronPDF |
|---|---|---|
| 主要关注点 | 阅读/提取 | 完整的 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 ClassIronPDF 文本提取方法:
// 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 ClassPdfPig 要求使用 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 conversionIronPDF 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 ClassPdfPig 无法从 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 ClassIronPDF 元数据阅读:
// 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这两个库都可以访问标准的 PDF 元数据属性。PdfPig使用 document.Information 而IronPDF使用 pdf.MetaData 。 在 pdfpig 中通过document.NumberOfPages访问页数,而在IronPDF中则通过pdf.PageCount访问页数。
API 映射参考
对于评估将 pdfpig 移植到IronPDF的团队来说,了解 API 映射有助于估算开发工作量。
文档加载
| PdfPig | IronPDF |
|---|---|
PdfDocument.Open(path) | |
PdfDocument.Open(字节) | PdfDocument.FromBinaryData(字节) |
PdfDocument.Open(stream) | PdfDocument.FromStream(流) |
使用(var doc = ...) | var pdf = ... |
页面访问
| PdfPig | IronPDF |
|---|---|
document.NumberOfPages | pdf.PageCount |
document.GetPages() | pdf.Pages |
document.GetPage(1) | pdf.Pages[0] |
page.Text | pdf.Pages[i].Text |
page.GetWords() | pdf.ExtractTextFromPage(i) |
元数据
| PdfPig | IronPDF |
|---|---|
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.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访问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在迁移引用特定页面的代码时,需要仔细注意这种差异。
单词位置数据
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 UsingPdfPig 的 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 UsingIronPDF处置(可选):
//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()PdfPig 要求使用 using 模式进行适当的资源清理。IronPDF的PdfDocument不需要显式处置,不过如果需要的话,也可以进行处置。
功能对比摘要
pdfpig 和IronPDF之间的范围差异几乎涵盖了阅读之外的所有 PDF 操作。
| 特征 | PdfPig | IronPDF |
|---|---|---|
| 许可 | 开源(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 PdfPigInstall-Package PdfPig纯 .NET,无本地依赖性。
安装 IronPdf:
Install-Package IronPdfInstall-Package IronPdfIronPdf 需要配置许可证密钥:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"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 的只读性质会随着应用程序的成熟和需求的扩展而产生明显的能力界限。