HTMLDOC與IronPDF:技術比較指南
當 .NET 開發者處理 PDF 文件時,他們常常尋找能夠處理讀取、提取和生成 PDF 文件的程式庫。 在可用的選擇中,pdfpig 因專注於讀取和提取 PDF 內容而聞名。 本文將比較 pdfpig 和 IronPDF,探討它們在架構、功能完整性和適用於各種應用需求方面的差異。
什麼是 PdfPig?
PdfPig 是一個專為 C# 設計的開源 PDF 讀取和提取程式庫。 它允許開發者精確地存取 PDF 文件內容,提供從 PDF 文件中提取文字、圖像、表單資料和元資料的工具。 根據 Apache 2.0 許可證授權,pdfpig 是開源且商業友好的,允許作為專有應用的一部分進行修改和分發。
雖然 pdfpig 在提取能力上表現出色,但其範圍僅限於解析現有文件。 該程式庫無法透過 HTML、URLs 或程式化的方式建立 PDF,它專注於讀取現有的內容。
pdfpig 的主要特點包括:
- 專注於讀取:專門為 PDF 解析和提取而設計
- 開源:Apache 2.0 授權,無需授權費
- 包含位置資訊的文字提取:精確提取具備位置資訊的文字,並小心處理字元字體
- 單詞級分析:提供單詞的邊界框以支持版面分析
- 純 .NET:無本地依賴關係,適用於任何運行 .NET 的地方
- 1-based 頁面索引:使用1-based 索引來存取頁面
什麼是 IronPDF?
IronPDF是一個完整的.NET程式庫,提供完整的PDF生命周期管理。 ChromePdfRenderer類別使用基於現代Chromium的引擎進行HTML到PDF的轉換,而PdfDocument類別則提供了廣泛的操控和提取功能。
與 pdfpig 的僅限於讀取不同,IronPDF 支援 PDF 生成和提取,使其成為各種與 PDF 相關任務的靈活選擇。 該程式庫可以從 HTML 和 URLs 建立文件、提取文字、操作文件、合併、浮水印、安全功能和數位簽名——所有這些都在一個單一的程式庫中完成。
架構比較
pdfpig 和IronPDF之間的主要區別在於其範圍:僅限於讀取與完整的 PDF 週期管理。
| 方面 | PdfPig | IronPDF |
|---|---|---|
| 主要焦點 | 讀取/提取 | 完整的 PDF 週期 |
| PDF建立 | 非常有限 | 全面 |
| HTML到PDF | 不支持 | 完整的Chromium引擎 |
| URL 至 PDF | 不支持 | 支持 |
| 文字提取 | 優秀 | 優秀 |
| 圖像提取 | 是 | 是 |
| 元資料存取 | 是 | 是 |
| PDF 操作 | 不支持 | 合併、分割、旋轉 |
| 水印 | 不支持 | 支持 |
| 安全/加密 | 不支持 | 支持 |
| 表格填寫 | 不支持 | 支持 |
| 數位簽名 | 不支持 | 支持 |
| 頁面索引 | 以 1 開始 | 以 0 開始 |
| 授權 | Apache 2.0 (免費) | 商業 |
| 支持 | 社群 | Professional |
對於僅需要 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 需要使用StringBuilder手動聚合文字。 page.Text 屬性為每個頁面提供文字內容。
IronPDF 的ExtractAllText()方法可以在一次調用中提取所有頁面的所有文字,不需要手動遍歷或釋放模式。 對於逐頁提取,IronPDF 提供了ExtractTextFromPage(index)。 注意 API 區別:pdfpig 使用PdfDocument.Open()而IronPDF使用PdfDocument.FromFile()。
HTML到PDF轉換
HTML到PDF的轉換展示了這些程式庫之間的基本功能缺口。
PdfPig HTML-to-PDF 方法:
// 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// 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' 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到PDF轉換模式的詳細指南,請參閱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.FromFile(path) |
PdfDocument.Open(bytes) | PdfDocument.FromBinaryData(bytes) |
PdfDocument.Open(stream) | PdfDocument.FromStream(stream) |
using (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(certificate) | 數位簽名 |
pdf.Form.GetFieldByName(name).Value | 表單填充 |
IronPDF 中的這些額外功能超越了讀取,還提供了完整的PDF週期管理。 有關PDF操作功能,請參閱合併和拆分PDF指導。
頁面索引差異
一個關鍵的遷移差異:pdfpig 使用1-based的頁面索引,而IronPDF使用0-based的索引。
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 pageIronPDF 頁面存取:
// IronPDF: 以 0 開始 indexing
var firstPage = pdf.Pages[0]; // First page
var secondPage = pdf.Pages[1]; // Second page// IronPDF: 以 0 開始 indexing
var firstPage = pdf.Pages[0]; // First page
var secondPage = pdf.Pages[1]; // Second page' IronPDF: 以 0 開始 indexing
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)
{
// PdfPig provides 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)
{
// PdfPig provides bounding box coordinates
Console.WriteLine($"Word: '{word.Text}' at ({word.BoundingBox.Left}, {word.BoundingBox.Top})");
}
}
}Imports PdfPig
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 釋放(必須):
// PdfPig requires using statement for proper disposal
using (var document = PdfDocument.Open("input.pdf"))
{
// Work with document
}// PdfPig requires using statement for proper disposal
using (var document = PdfDocument.Open("input.pdf"))
{
// Work with document
}Imports UglyToad.PdfPig
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 s | 不支持 | 支持 |
| 分割 PDF s | 不支持 | 支持 |
| 水印 | 不支持 | 支持 |
| 密碼保護 | 不支持 | 支持 |
| 數位簽名 | 不支持 | 支持 |
| 表格填寫 | 不支持 | 支持 |
| 單詞位置資料 | 支持 | 不支持 |
| 支援和文件 | 社群支援 | 專屬支援 |
| 成本 | 免費 | 收費 |
需要水印 、PDF合併或安全性功能的應用無法僅靠 pdfpig 即可實現這些。
當團隊考慮從 PdfPig 遷移到 IronPDF
有很多因素促使團隊評估使用IronPDF作為 pdfpig 的替代或補充:
PDF 建立需求: PdfPig 無法從 HTML、URLs 或程式化地建立 PDF。 需要從網頁內容或範本生成 PDFs 的應用需要額外的程式庫,或者使用IronPDF的完整解決方案。
文件操作需求: PdfPig 無法合併、分割或修改 PDF 文件。 需要文件組裝或修改的應用需要IronPDF的操作能力。
安全需求: PdfPig 無法新增密碼、加密或數位簽名。 具有安全要求的應用需要IronPDF的安全功能。
水印及品牌化: PdfPig 無法向現有文件新增視覺疊加。 需要文件品牌化的應用需要IronPDF的水印能力。
專業支援: PdfPig 靠社群支援。 需要保證的響應時間和專業幫助的組織可以受益於IronPDF的商業支援。
混合方法: 一些團隊同時使用兩個程式庫——pdfpig 用於帶單詞位置的詳細文字分析,而IronPDF用於生成和操作。 這種方法充分發揮了每個程式庫的優勢。
安裝比較
PdfPig 安裝:
Install-Package PdfPigInstall-Package PdfPig純 .NET 無本地依賴。
IronPDF安裝:
IronPDF需要授權金鑰配置:
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需求:
- 通過NuGet安裝:
Install-Package IronPdf - 查看入門文件
- 探索HTML 到 PDF 教程以了解建立模式
- 檢查API參考以獲得完整的方法文件
IronPDF教程提供了涵蓋從基本轉換到高級PDF操作的常見場景的完整範例。
PdfPig和IronPDF在.NET的PDF生態系統中,具有根本不同的用途。 PdfPig 在 PDF 的讀取和文字提取上表現優異——精確解析文件,提供單詞級位置資料以便用於版面分析。IronPDF提供了一個完整的 PDF 解決方案,涵蓋建立、提取、操作和安全等功能於一體。
對於僅需要 PDF 讀取的應用,pdfpig 的專注方法與開源許可非常合適。 對於需要超越讀取要求的 PDF 建立、文件操作或任何建立能力的應用,IronPDF 提供了這些功能,無需額外程式庫。
選擇不僅涉及當前需求,還包括預期需求。 雖然 pdfpig 在其專業領域的讀取和提取中表現出色,但IronPDF在靈活性與全面的 PDF 管理上則更為出色。 許多組織往往以讀取需求開始,但隨著需求的擴展需要建立和操作——選擇IronPDF作爲開端,爲這些擴展需求提供了基礎,同時確保專業支持和積極開發。
在選擇這些程式庫時,請評估您完整的PDF需求——當前的和預期的。 pdfpig 的僅限於讀取的特性創造了能力上的邊界,當應用程式成熟且需求擴展時,這些邊界會變得顯而易見。
