比較

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 週期管理。

方面PdfPigIronPDF
主要焦點讀取/提取完整的 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 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 需要使用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 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到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 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(path)
PdfDocument.Open(bytes)PdfDocument.FromBinaryData(bytes)
PdfDocument.Open(stream)PdfDocument.FromStream(stream)
using (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(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 page
$vbLabelText   $csharpLabel

IronPDF 頁面存取:

// 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
$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)
        {
            // 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 Using
$vbLabelText   $csharpLabel

PdfPig 的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 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 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 PdfPig
Install-Package PdfPig
SHELL

純 .NET 無本地依賴。

IronPDF安裝:

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安裝: Install-Package IronPdf
  2. 查看入門文件
  3. 探索HTML 到 PDF 教程以了解建立模式
  4. 檢查API參考以獲得完整的方法文件

IronPDF教程提供了涵蓋從基本轉換到高級PDF操作的常見場景的完整範例。

PdfPig和IronPDF在.NET的PDF生態系統中,具有根本不同的用途。 PdfPig 在 PDF 的讀取和文字提取上表現優異——精確解析文件,提供單詞級位置資料以便用於版面分析。IronPDF提供了一個完整的 PDF 解決方案,涵蓋建立、提取、操作和安全等功能於一體。

對於僅需要 PDF 讀取的應用,pdfpig 的專注方法與開源許可非常合適。 對於需要超越讀取要求的 PDF 建立、文件操作或任何建立能力的應用,IronPDF 提供了這些功能,無需額外程式庫。

選擇不僅涉及當前需求,還包括預期需求。 雖然 pdfpig 在其專業領域的讀取和提取中表現出色,但IronPDF在靈活性與全面的 PDF 管理上則更為出色。 許多組織往往以讀取需求開始,但隨著需求的擴展需要建立和操作——選擇IronPDF作爲開端,爲這些擴展需求提供了基礎,同時確保專業支持和積極開發。

在選擇這些程式庫時,請評估您完整的PDF需求——當前的和預期的。 pdfpig 的僅限於讀取的特性創造了能力上的邊界,當應用程式成熟且需求擴展時,這些邊界會變得顯而易見。

請注意PdfPig 是其相應所有者的註冊商標。 本網站與 UglyToad 無關,不受其認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供資訊參考,並反映了撰寫時公開的資訊。)}