比較

iText vs IronPDF:技術比較指南

本次比較從相關技術方面考察了這兩個程式庫,以幫助開發人員和架構師針對其 .NET PDF 需求做出明智的決策。

iText/iTextSharp概述

iText 是一個雙重授權的 PDF 庫,允許從頭開始建立 PDF,修改現有文檔,並執行新增文字、影像和安全功能等任務。 本函式庫採用程式化 API 方法,開發人員可以使用PdfWriter 、<編碼>PDF 文件</編碼、文件段落TableCell等類別來建立 PDF 內容。

iText 7 使用iText.Kernel.PdfiText.LayoutiText.Layout.ElementiText.Html2pdf等命名空間。 PDF 建立過程包括建立一個PdfWriter ,將其包裝在PdfDocument中,然後建立一個Document用於內容佈局。 文字透過段落物件新增,表格透過表格Cell物件新增,圖片則透過圖片類與 ImageDataFactory 新增。

對於 HTML 到 PDF 的轉換,iText 需要獨立的 pdfHTML 附加元件,可透過 iText.Html2pdf 命名空間的HtmlConverter.ConvertToPdf()。方法取得。 此附加組件需單獨購買,並需額外付費。

iText 採用 AGPL 許可證,該許可證要求任何在 Web 應用程式中包含 AGPL 程式碼的軟體也必須以開源形式發布,否則開發者必須購買商業許可證。iText已取消永久授權,商業用途需要每年續訂。

IronPDF的概述

IronPDF 是一個商用 PDF 函式庫,專為喜歡使用 HTML 和 CSS 而非程式化 PDF 建構的 .NET 開發人員所設計。 該函式庫使用現代的 Chromium 渲染引擎,提供 HTML5、CSS3、JavaScript 以及 Flexbox 和 Grid 等現代佈局系統的精確渲染。

IronPDF 使用<代碼>ChromePdfRenderer</代碼類作為其主要的 PDF 產生機制,其方法包括 RenderHtmlAsPdf(), RenderUrlAsPdf(), 以及 RenderHtmlFileAsPdf() 等。 該函式庫會傳回<編碼>PDF 文件</編碼物件,這些物件可以使用 SaveAs() 儲存或以 BinaryData 的方式存取。 配置使用 RenderingOptions 屬性來設定紙張大小、邊界、頁首和頁尾。

IronPDF 提供永久授權和訂閱授權兩種選擇,無病毒式授權要求。 HTML 到 PDF 的轉換已內建在基本產品中,不需要另外的附加元件。

授權與商業模式比較

這些函式庫最顯著的差異涉及授權和商業影響。

特點iText 7 / iTextSharpIronPDF
執照AGPL(病毒式)或昂貴的訂閱商業、永久選項
HTML轉PDF單獨的 pdfHTML 附加元件(額外費用)內建 Chromium 渲染器
開放原始碼風險必須在 AGPL 下開放源碼網路應用程式無病毒要求
定價模式僅訂閱永久或訂閱
永久選項消除可提供

AGPL 授權陷阱對於商業網路應用程式來說尤其棘手。 如果您在 Web 應用程式中使用iText而未購買商業授權,AGPL 會要求您開放整個應用程式的原始碼 - 不只是 PDF 程式碼,而是整個程式碼庫。

API 範例比較

不同函式庫的基本 API 設計理念有顯著差異。

範疇iTextIronPDF
API範例程式化(段落、表格、單元格)HTML-first與CSS
CSS 支援基本 CSS (透過 pdfHTML 附加元件)完整的 CSS3、Flexbox、網格
JavaScript完全執行
學習曲線陡峭 (PDF 坐標系統)對網路開發人員友善
內容建構手動低階物件HTML 範本

iText 透過明確的物件建構,以程式化的方式建立 PDF。 IronPdf 使用 HTML/CSS,讓網頁開發人員可以直接應用現有的技術。

程式碼比較:常見的 PDF 作業

HTML 至 PDF 轉換

最基本的操作展示了不同的方法和附加需求。

iText(需要 pdfHTML 附加元件):

// NuGet: Install-Package itext7
using iText.Html2pdf;
using System.IO;

class Program
{
    static void Main()
    {
        string html = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>";
        string outputPath = "output.pdf";

        using (FileStream fs = new FileStream(outputPath, FileMode.Create))
        {
            HtmlConverter.ConvertToPdf(html, fs);
        }
    }
}
// NuGet: Install-Package itext7
using iText.Html2pdf;
using System.IO;

class Program
{
    static void Main()
    {
        string html = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>";
        string outputPath = "output.pdf";

        using (FileStream fs = new FileStream(outputPath, FileMode.Create))
        {
            HtmlConverter.ConvertToPdf(html, fs);
        }
    }
}
$vbLabelText   $csharpLabel

IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

iText 需要獨立的 iText.Html2pdf 命名空間 (來自 pdfHTML 附加元件),手動建立一個 FileStream 並呼叫HtmlConverter.ConvertToPdf()。來直接寫入資料流。

IronPDF 創建一個 ChromePdfRenderer, 使用 HTML 字串呼叫 RenderHtmlAsPdf(), 並使用 SaveAs() 儲存。 Chromium 引擎提供完整的 CSS3 與 JavaScript 支援,無需額外的附加元件。

如需進階的 HTML 呈現選項,請探索 HTML 至 PDF 轉換指南

使用文字和圖片建立 PDF。

程式化的 PDF 建構最能清楚顯示範例的差異。

iText:

// NuGet: Install-Package itext7
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.IO.Image;

class Program
{
    static void Main()
    {
        string outputPath = "document.pdf";

        using (PdfWriter writer = new PdfWriter(outputPath))
        using (PdfDocument pdf = new PdfDocument(writer))
        using (Document document = new Document(pdf))
        {
            document.Add(new Paragraph("Sample PDF Document"));
            document.Add(new Paragraph("This document contains text and an image."));

            Image img = new Image(ImageDataFactory.Create("image.jpg"));
            img.SetWidth(200);
            document.Add(img);
        }
    }
}
// NuGet: Install-Package itext7
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.IO.Image;

class Program
{
    static void Main()
    {
        string outputPath = "document.pdf";

        using (PdfWriter writer = new PdfWriter(outputPath))
        using (PdfDocument pdf = new PdfDocument(writer))
        using (Document document = new Document(pdf))
        {
            document.Add(new Paragraph("Sample PDF Document"));
            document.Add(new Paragraph("This document contains text and an image."));

            Image img = new Image(ImageDataFactory.Create("image.jpg"));
            img.SetWidth(200);
            document.Add(img);
        }
    }
}
$vbLabelText   $csharpLabel

IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string html = @"
            <h1>Sample PDF Document</h1>
            <p>This document contains text and an image.</p>
            <img src='image.jpg' width='200' />";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("document.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string html = @"
            <h1>Sample PDF Document</h1>
            <p>This document contains text and an image.</p>
            <img src='image.jpg' width='200' />";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("document.pdf");
    }
}
$vbLabelText   $csharpLabel

iText 要求創建一個<編碼>PdfWriter</編碼,將其包裝在<編碼>PDF 文件</編碼中,創建一個文件用於佈局,然後再加入段落物件和透過 ImageDataFactory 創建的圖片物件。 每個元素都需要明確的建構和配置。

IronPdf 使用標準的 HTML - 標題、段落和 <img> 標籤 - 所有樣式都使用熟悉的 HTML 屬性或 CSS。 Chromium 引擎可處理渲染,以大幅減少的程式碼產生相同的結果。

合併多個 PDF 文件

文件合併展示了 API 複雜性的差異。

iText:

// NuGet: Install-Package itext7
using iText.Kernel.Pdf;
using iText.Kernel.Utils;
using System.IO;

class Program
{
    static void Main()
    {
        string outputPath = "merged.pdf";
        string[] inputFiles = { "document1.pdf", "document2.pdf", "document3.pdf" };

        using (PdfWriter writer = new PdfWriter(outputPath))
        using (PdfDocument pdfDoc = new PdfDocument(writer))
        {
            PdfMerger merger = new PdfMerger(pdfDoc);

            foreach (string file in inputFiles)
            {
                using (PdfDocument sourcePdf = new PdfDocument(new PdfReader(file)))
                {
                    merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages());
                }
            }
        }
    }
}
// NuGet: Install-Package itext7
using iText.Kernel.Pdf;
using iText.Kernel.Utils;
using System.IO;

class Program
{
    static void Main()
    {
        string outputPath = "merged.pdf";
        string[] inputFiles = { "document1.pdf", "document2.pdf", "document3.pdf" };

        using (PdfWriter writer = new PdfWriter(outputPath))
        using (PdfDocument pdfDoc = new PdfDocument(writer))
        {
            PdfMerger merger = new PdfMerger(pdfDoc);

            foreach (string file in inputFiles)
            {
                using (PdfDocument sourcePdf = new PdfDocument(new PdfReader(file)))
                {
                    merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages());
                }
            }
        }
    }
}
$vbLabelText   $csharpLabel

IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdfDocuments = new List<PdfDocument>
        {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf"),
            PdfDocument.FromFile("document3.pdf")
        };

        var merged = PdfDocument.Merge(pdfDocuments);
        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdfDocuments = new List<PdfDocument>
        {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf"),
            PdfDocument.FromFile("document3.pdf")
        };

        var merged = PdfDocument.Merge(pdfDocuments);
        merged.SaveAs("merged.pdf");
    }
}
$vbLabelText   $csharpLabel

iText 需要為輸出建立<編碼>PdfWriter</編碼、建立目標<編碼>PDF 文件</編碼、建立<編碼>PdfMerger</編碼、然後遍歷原始檔案以建立<編碼>PdfReader</編碼和<編碼>PDF 文件</編碼實體、呼叫 merger.Merge() 與頁面範圍,並管理所有物件的棄置。

IronPDF 使用<代碼>PdfDocument.FromFile()</代碼載入文件,建立清單,並呼叫靜態<代碼>PdfDocument.Merge()</代碼方法。 操作上顯得更加簡潔。

IronPDF教學中了解更多關於 PDF 操作的資訊。

API 對應參考。

對於評估iText遷移或比較功能的開發人員而言,此對應會顯示等效的操作:

類映射

iText 7 課程iTextSharp 類別IronPdf 同等級產品
<編碼>PdfWriter</編碼<編碼>PdfWriter</編碼<代碼>ChromePdfRenderer</代碼
<編碼>PDF 文件</編碼文件<編碼>PDF 文件</編碼
文件文件<代碼>ChromePdfRenderer.RenderHtmlAsPdf()</代碼
段落段落HTML <p>, <h1> 等。
表格PdfPTableHTML <table>
Cell<編碼>PdfPCell</編碼HTML <td>, <th>
圖片圖片HTML <img>
清單清單HTML <ul>, <ol>
清單項目清單項目HTML <li>
<編碼>PdfReader</編碼<編碼>PdfReader</編碼<代碼>PdfDocument.FromFile()</代碼
<編碼>PdfMerger</編碼不適用<代碼>PdfDocument.Merge()</代碼
<編碼>PdfTextExtractor</編碼<編碼>PdfTextExtractor</編碼<代碼>pdf.ExtractAllText()</代碼

方法映射

任務iText 7IronPDF
從 HTML 建立 PDFHtmlConverter.ConvertToPdf()<編碼>renderer.RenderHtmlAsPdf()</編碼
從 URL 建立 PDF下載 HTML + 轉換renderer.RenderUrlAsPdf()
從檔案建立 PDFHtmlConverter.ConvertToPdf(File.ReadAllText())renderer.RenderHtmlFileAsPdf()
儲存至檔案document.Close() (透過串流)<代碼>pdf.SaveAs()</代碼
儲存為 bytes<代碼>memoryStream.ToArray()</代碼<編碼>pdf.BinaryData</編碼
開啟現有的 PDFnew PdfDocument(new PdfReader(path))<代碼>PdfDocument.FromFile()</代碼
合併 PDF<代碼>PdfMerger.Merge()</代碼<代碼>PdfDocument.Merge()</代碼
擷取文字<代碼>PdfTextExtractor.GetTextFromPage()</代碼<代碼>pdf.ExtractAllText()</代碼

樣式對應

iText 7 方法IronPdf 同等級產品
設定文字對齊方式(TextAlignment.CENTER)CSS text-align: center
設定字型大小(12)CSS font-size: 12px
<編碼>SetBold()</編碼CSS font-weight: bold
<程式碼>SetBackgroundColor()</程式碼CSS background-color
設定邊界()CSS 邊框

功能比較摘要

特點iTextIronPDF
程式化 PDF 建構✅(主要方法)⚠️ (透過 HTML)
HTML 至 PDF⚠️ (需要 pdfHTML 附加元件)✅ (內建)
CSS3 支持⚠️ (Basic via pdfHTML)✅ (完整)
Flexbox/Grid
JavaScript 執行
PDF 合併✅ (PdfMerger)✅ (PdfDocument.Merge())
文字擷取✅ (PdfTextExtractor)✅ (ExtractAllText())
永久授權❌(已排除)
無 AGPL 風險❌(AGPL 或訂閱)
社群支援✅(廣泛)

當團隊考慮從iText轉移到IronPDF時。

開發團隊評估從iText過渡到IronPDF有幾個原因:

AGPL 授權陷阱: AGPL 授權對商業 Web 應用程式的限制非常嚴格。 如果您在 Web 應用程式中使用iText而未購買商業授權,AGPL 會要求您開放整個應用程式的原始碼 - 不只是 PDF 程式碼,而是整個程式碼庫。 開發專屬軟體的團隊通常無法接受這種病毒式的 License 要求。

訂閱商業許可:iText已取消永久許可,商業用途需每年續訂訂閱。 喜歡一次性購買的團隊認為IronPDF的永久 License 選項更適合預算。

pdfHTML 插件成本:要使用iText將 HTML 轉換為 PDF,開發人員必須購買單獨的 pdfHTML 插件,這會增加成本和複雜性。IronPDF在基本產品中包含 HTML 到 PDF 的轉換,並採用現代 Chromium 渲染引擎。

程式化 API 複雜性:iText需要手動建立底層 PDF,包括Paragraph表格Cell和其他物件。 具有 Web 開發經驗的團隊會發現IronPDF的 HTML/CSS 方法更直觀、更富有成效。

現代網路標準:即使有了 pdfHTML,iText 對複雜的 CSS 和 JavaScript 的支援也有限。 IronPdf 的 Chromium 引擎可為現代網頁內容提供完整的 CSS3、Flexbox、Grid 和 JavaScript 執行功能。

簡化程式碼庫:從iText的程式化方法轉換為IronPDF的 HTML 優先範式,通常會顯著減少程式碼量。 需要使用 Table,Cell段落物件的幾十行的報表表格,會變成使用 CSS 設定的簡單 HTML 表格。

優勢和考慮因素

iText的優勢

-功能全面:強大的 PDF 處理功能 -廣泛應用:龐大的使用者群體和詳盡的文檔 -跨平台:可在各種 .NET 平台上運行 -精細控制:直接操作 PDF 物件以滿足特定需求

iText注意事項

  • AGPL 授權:病毒式授權需要開源 Web 應用程式或商業訂閱 -僅限訂閱:取消永久授權
  • pdfHTML 外掛: HTML 轉 PDF 功能需另外購買。 -程序化複雜度: PDF座標系的學習曲線陡峭 -現代 CSS 支援有限:即使使用 pdfHTML 也僅支援基本的 CSS -不支援 JavaScript:無法在 HTML 內容中執行 JavaScript

IronPDF的優勢

永久授權:一次性購買選項 -無AGPL風險:保持專有程式碼閉源 -內建 HTML 轉 PDF 功能:無需單獨的插件

  • Chromium 核心:完全支援 CSS3、Flexbox、Grid 和 JavaScript -對 Web 開發人員友善:使用熟悉的 HTML/CSS 技能 -更簡潔的 API:常用操作的簡潔方法 -豐富的資源:大量的教學文檔

IronPDF注意事項

-商業許可:生產用途必需

  • HTML優先範式:與程式化建構不同的方法

結論

iText 和IronPDF代表了在 .NET 應用程式中生成 PDF 的基本不同方法。iText使用 ParagraphTableCell等類別提供全面的程式化 PDF 建構,但卻有重大的授權問題 - AGPL 要求開放網頁應用程式的原始碼,永久授權已被取消,而HTML 至 PDF則需要另外購買 pdfHTML 附加元件。

IronPDF 提供了一個現代化的選擇,使用 Chromium 引擎進行內建 HTML 到 PDF 的轉換,提供永久授權選項,且無病毒授權要求。 HTML 為先的方法可讓網路開發人員直接應用現有的技能,通常可產生更簡單、更易維護的程式碼。

由於組織要規劃 .NET 10、C# 14 以及到 2026 年的應用程式開發,因此在 AGPL 授權的程式化 PDF 建構與商業授權的 HTML 式渲染之間做出選擇,會對法律合規性與開發生產力造成重大影響。 尋求消除 AGPL 風險、降低 License 複雜性或利用網頁開發技能來產生 PDF 的團隊會發現IronPDF能有效解決這些需求。

免費試用開始評估 IronPDF,並探索全面的文件,以評估是否適合您的特定需求。