iText vs IronPDF:技術比較指南
本次比較從相關技術方面考察了這兩個程式庫,以幫助開發人員和架構師針對其.NET PDF 需求做出明智的決策。
iText/iTextSharp 概述
iText 是一個雙重授權的 PDF 庫,允許從頭開始建立 PDF,修改現有文檔,並執行新增文字、影像和安全功能等任務。 本函式庫採用程式化 API 方法,開發人員可以使用諸如 Table 和 @--CODE-1775--@@、Table 和 @@CO-1775--@@、Table 和 @@CO-1777--DE-1777--DE-17772 內容。
iText 7 使用諸如 iText.Layout.Element 和 iText.Html2pdf 之類的命名空間。 PDF 建立包括建立一個 PdfWriter,將其包裝在 PdfDocument 中,然後建立一個 Document 用於內容佈局。 文字透過 Paragraph 物件添加,表格透過 Table 和 Cell 物件添加,圖像透過 Image 類別和 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 生成機制,並具有 RenderUrlAsPdf() 和 RenderHtmlFileAsPdf() 等方法。 該庫返回 PdfDocument 對象,這些對象可以用 SaveAs() 保存,也可以用 BinaryData 存取。 配置使用 RenderingOptions 屬性來設定紙張大小、邊距、頁首和頁尾。
IronPDF提供永久許可和訂閱許可兩種選擇,且無病毒式許可要求。 此基礎產品內建了 HTML 轉 PDF 功能,無需單獨的插件。
授權和商業模式比較
這些庫之間最顯著的差異在於許可和商業影響。
| 特徵 | iText 7 / iTextSharp | IronPDF |
|---|---|---|
| 執照 | AGPL(病毒式傳播)或昂貴的訂閱 | 商業永續選擇權 |
| HTML 轉 PDF | 單獨的pdfHTML插件(需額外付費) | 內建 Chromium 渲染器 |
| 開源風險 | 必須以 AGPL 協定開源 Web 應用程式。 | 無病毒感染要求 |
| 定價模式 | 僅限訂閱用戶 | 永久或訂閱 |
| 永續選擇權 | 淘汰 | 可用的 |
AGPL 授權陷阱對商業 Web 應用程式來說尤其成問題。 如果您在未購買商業許可證的情況下在 Web 應用程式中使用 iText,則 AGPL 要求您開源整個應用程式——不僅僅是 PDF 程式碼,而是整個程式碼庫。
API範式比較
各個函式庫的基本 API 設計理念有顯著差異。
| 方面 | iText | IronPDF |
|---|---|---|
| API範式 | 程序化(段落、表格、單元格) | HTML優先,CSS優先 |
| CSS 支援 | 基礎 CSS(透過 pdfHTML 插件) | 完整的 CSS3、Flexbox 和 Grid 架構 |
| JavaScript | 沒有任何 | 全面執行 |
| 學習曲線 | 陡峭(PDF座標系) | 對網路開發人員友好 |
| 內容建構 | 手動低階對象 | HTML模板 |
iText 透過顯式物件建構以程式設計方式建構 PDF。 IronPDF使用 HTML/CSS,使 Web 開發人員能夠直接應用現有技能。
程式碼比較:常見 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);
}
}
}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");
}
}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);
}
}
}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");
}
}iText 需要建立一個 PdfWriter,將其包裝在 PdfDocument 中,建立一個 Document 用於佈局,然後新增 Paragraph 物件和透過 Paragraph 物件和透過 @@--CODE-1811--CODE-181-- 每個元素都需要明確的構造和配置。
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());
}
}
}
}
}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");
}
}iText 需要為輸出建立一個 PdfWriter,建立一個目標 PdfDocument,建立一個 PdfMerger,然後遍歷原始檔以建立 PdfReader 和 PdfReader 和 PdfReader 和 @@--CODE-1817。 merger.Merge(),並管理所有物件的處置。
IronPDF使用 PdfDocument.FromFile() 載入文檔,建立一個列表,並呼叫靜態 PdfDocument.Merge() 方法。 操作步驟明顯更簡潔。
欲了解更多關於 PDF 操作的信息,請參閱IronPDF教學。
API對應參考
對於正在評估 iText 遷移或比較功能的開發人員來說,此映射顯示了等效操作:
類別映射
| iText 7 課 | iTextSharp 類 | IronPDF當量 |
|---|---|---|
PdfWriter | PdfWriter | ChromePdfRenderer |
PdfDocument | Document | PdfDocument |
Document | Document | ChromePdfRenderer.RenderHtmlAsPdf() |
Paragraph | Paragraph | HTML <p>, <h1> 等。 |
Table | PdfPTable | HTML <table> |
Cell | PdfPCell | HTML <td>, <th> |
Image | Image | HTML <img> |
List | List | HTML <ul>, <ol> |
ListItem | ListItem | HTML <li> |
PdfReader | PdfReader | PdfDocument.FromFile() |
PdfMerger | 不適用 | PdfDocument.Merge() |
PdfTextExtractor | PdfTextExtractor | pdf.ExtractAllText() |
方法映射
| 任務 | iText 7 | IronPDF |
|---|---|---|
| 從 HTML 建立 PDF | HtmlConverter.ConvertToPdf() | renderer.RenderHtmlAsPdf() |
| 從 URL 建立 PDF | 下載 HTML 並轉換 | renderer.RenderUrlAsPdf() |
| 從文件建立 PDF | HtmlConverter.ConvertToPdf(File.ReadAllText()) | renderer.RenderHtmlFileAsPdf() |
| 儲存到文件 | document.Close()(透過串流媒體) | pdf.SaveAs() |
| 儲存為位元組 | memoryStream.ToArray() | pdf.BinaryData |
| 開啟現有PDF | new PdfDocument(new PdfReader(path)) | PdfDocument.FromFile() |
| 合併PDF | PdfMerger.Merge() | PdfDocument.Merge() |
| 提取文字 | PdfTextExtractor.GetTextFromPage() | pdf.ExtractAllText() |
樣式映射
| iText 7 方法 | IronPDF當量 |
|---|---|
SetTextAlignment(TextAlignment.CENTER) | CSS text-align: center |
SetFontSize(12) | CSS font-size: 12px |
SetBold() | CSS font-weight: bold |
SetBackgroundColor() | CSS background-color |
SetBorder() | CSS border |
功能對比總結
| 特徵 | iText | IronPDF |
|---|---|---|
| 程序化 PDF 構建 | ✅(主要方法) | ⚠️(透過 HTML) |
| HTML 轉 PDF | ⚠️(需要 pdfHTML 插件) | ✅(內建) |
| CSS3 支持 | ⚠️(基本格式為pdfHTML) | ✅(完整版) |
| Flexbox/Grid | ❌ | ✅ |
| JavaScript執行 | ❌ | ✅ |
| PDF合併 | ✅ (PdfMerger) | ✅ (PdfDocument.Merge()) |
| 文字擷取 | ✅ (PdfTextExtractor) | ✅ (ExtractAllText()) |
| 永久許可 | ❌(已淘汰) | ✅ |
| 無AGPL風險 | ❌(AGPL 或訂閱) | ✅ |
| 社區支持 | ✅(詳盡) | ✅ |
當團隊考慮從 iText 遷移到IronPDF時
開發團隊基於以下幾個原因評估從 iText 過渡到IronPDF :
AGPL 授權陷阱: AGPL 授權對商業 Web 應用程式的限制非常嚴格。 如果您在未購買商業許可證的情況下在 Web 應用程式中使用 iText,則 AGPL 要求您開源整個應用程式——不僅僅是 PDF 程式碼,而是整個程式碼庫。 開發專有軟體的團隊通常無法接受這種病毒式許可要求。
訂閱商業許可: iText 已取消永久許可,商業用途需每年續訂訂閱。 對於偏好一次性購買的團隊來說,IronPDF 的永久許可選項更適合預算。
pdfHTML 插件成本:要使用 iText 將 HTML 轉換為 PDF,開發人員必須購買單獨的 pdfHTML 插件,這會增加成本和複雜性。 IronPDF 的基礎產品包含 HTML 到 PDF 的轉換功能,並採用現代化的 Chromium 渲染引擎。
程式化 API 複雜性: iText 需要手動建立底層 PDF,使用 Cell 和其他物件。 有網頁開發經驗的團隊發現 IronPDF 的 HTML/CSS 方法更直覺、更有效率。
現代網路標準:即使使用 pdfHTML,iText 對複雜的 CSS 和JavaScript 的支援也有限。 IronPDF 的 Chromium 引擎為現代 Web 內容提供完整的 CSS3、Flexbox、Grid 和JavaScript執行功能。
簡化程式碼庫:從 iText 的程式化方法轉換為 IronPDF 的 HTML 優先範式,通常會顯著減少程式碼量。 需要數十行包含 Cell 和 Paragraph 物件的報表表格,會變成具有 CSS 樣式的簡單 HTML 表格。
優勢與考量
iText 的優勢
-功能全面:強大的 PDF 處理功能 -廣泛應用:龐大的使用者群體和詳盡的文檔 -跨平台:可在各種.NET平台上運行 -精細控制:直接操作 PDF 物件以滿足特定需求
iText 注意事項
- AGPL 授權:病毒式授權需要開源 Web 應用程式或商業訂閱 -僅限訂閱:取消永久授權
- pdfHTML 外掛: HTML 轉 PDF 功能需另外購買。 -程序化複雜度: PDF座標系的學習曲線陡峭 -現代 CSS 支援有限:即使使用 pdfHTML 也僅支援基本的 CSS -不支援JavaScript:無法在 HTML 內容中執行JavaScript
IronPDF 的優勢
永久授權:一次性購買選項 -無AGPL風險:保持專有程式碼閉源 -內建 HTML 轉 PDF 功能:無需單獨的插件
IronPDF注意事項
-商業許可:生產用途必需
- HTML優先範式:與程式化建構不同的方法
結論
iText 和IronPDF代表了.NET應用程式中產生 PDF 的兩種截然不同的方法。 iText 提供全面的程式化 PDF 建置功能,使用諸如 Table 和 Cell 之類的類,但存在嚴重的許可問題——AGPL 要求開源 Web 應用程式,永久許可已被取消,並且 轉印 PDF 需要單獨購買。
IronPDF提供了一種現代化的替代方案,它使用 Chromium 引擎內建 HTML 到 PDF 轉換功能,提供永久許可選項,並且沒有病毒式許可要求。 HTML優先方法讓Web開發人員直接應用現有技能,通常會產生更簡單、更易於維護的程式碼。
隨著各組織規劃.NET 10、C# 14 以及到 2026 年的應用程式開發,在 AGPL 許可的程序化 PDF 構建和商業許可的基於 HTML 的渲染之間進行選擇,會對法律合規性和開發效率產生重大影響。 對於希望消除 AGPL 風險、降低許可複雜性或利用 Web 開發技能產生 PDF 的團隊而言, IronPDF可以有效地滿足這些需求。
