比较

iText 与 IronPDF:技术比较指南

iText与 IronPDF:许可、API 范例和 .NET 中的现代 PDF 生成。

当 .NET 开发人员评估 PDF 库时,iText(包括iText 7和传统的 iTextSharp)成为具有广泛 PDF 操作能力的综合选择。 然而,iText 带来了重大的许可证问题--AGPL 许可证要求任何使用iText的网络应用程序必须开源其整个代码库,或者支付昂贵的商业订阅费用。 IronPdf 提供了一种与众不同的方法:一个具有永久许可选项、内置 HTML 到 PDF 转换功能和现代 Chromium 渲染引擎的商业库。

本比较从技术相关的维度对这两个库进行了研究,以帮助专业开发人员和架构师针对其 .NET PDF 需求做出明智的决定。

了解iText/ iTextSharp.

iText 是一个拥有双重许可证的 PDF 库,支持从头开始生成 PDF、修改现有文档以及执行添加文本、图像和安全功能等操作。 该库使用编程式 API 方法,开发人员使用 PdfWriter, PdfDocument, Document, Paragraph,<代码>表格</代码和<代码>单元格</代码等类构建 PDF 内容。

iText 7 使用的命名空间包括:iText.Kernel.PdfiText.LayoutiText.Layout.ElementiText.Html2pdf。 PDF 创建遵循的模式是创建<代码>PdfWriter</代码并将其封装在<代码>PDF 文档</代码中,然后创建<代码>文档</代码用于内容布局。 文本通过<代码>段落</代码对象添加,表格通过<代码>表格</代码和<代码>单元格</代码对象添加,图像通过<代码>图片</代码类和 ImageDataFactory 添加。

对于 HTML 到 PDF 的转换,iText 需要单独的 pdfHTML 附加组件,该附加组件可通过 iText.Html2pdf 名称空间的<代码>HtmlConverter.ConvertToPdf()</代码方法获得。 此附加功能需单独购买,费用另计。

iText 采用 AGPL 许可证,该许可证具有病毒特征--任何在网络应用程序中采用 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-to-PDF单独的 pdfHTML 附加组件(额外收费)内置 Chromium 渲染器
开源风险必须是 AGPL 下的开源网络应用程序无病毒要求
定价模式仅限订阅永久或订阅
永久选项消除可提供

对于商业网络应用程序来说,AGPL 许可证陷阱尤其棘手。 如果您在未购买商业许可证的情况下在网络应用程序中使用 iText,则 AGPL 要求您将整个应用程序开源,不仅仅是 PDF 代码,而是整个代码库。

API 范例比较

不同库的基本 API 设计理念有很大不同。

方面iTextIronPDF
API范例程式化(段落、表格、单元格)HTML 优先,带 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);
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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);
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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());
                }
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

iText 要求为输出创建<代码>PdfWriter</代码,创建目标<代码>PDF 文档</代码,创建<代码>PDFMerger</代码,然后遍历源文件以创建<代码>PDF 阅读器</代码和<代码>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> 等。
<代码>表格</代码<代码>PDFPTable</代码HTML <table>
<代码>单元格</代码<代码>PdfPCell</代码HTML <td>, <th>
<代码>图片</代码<代码>图片</代码HTML <img>
<代码>列表</代码<代码>列表</代码HTML <ul>, <ol>
<代码>列表项</代码<代码>列表项</代码HTML <li>
<代码>PDF 阅读器</代码<代码>PDF 阅读器</代码<代码>PdfDocument.FromFile()</代码
<代码>PDFMerger</代码不适用<代码>PdfDocument.Merge()</代码
<代码>PDFTextExtractor</代码<代码>PDFTextExtractor</代码<代码>pdf.ExtractAllText()</代码

方法映射

任务iText 7IronPDF
从 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 同等产品
<代码>设置文本对齐方式(TextAlignment.CENTER)</代码CSS text-align: center
<代码>设置字体大小(12)</代码CSS font-size: 12px
<代码>SetBold()</代码CSS font-weight: bold
<代码>SetBackgroundColor()</代码CSS background-color
<代码>SetBorder()</代码CSS <代码>边框</代码

功能对比摘要

特征iTextIronPDF
程序化 PDF 构建✅(主要方法)⚠️ (通过 HTML)
HTML 转 PDF⚠️ (需要 pdfHTML 附加组件)✅(内置)
CSS3 支持⚠️ (通过 pdfHTML 进行基本翻译)✅(全文)
Flexbox/Grid
JavaScript 执行
PDF 合并✅(<代码>PdfMerger</代码)✅ (PdfDocument.Merge())
文本提取✅(<代码>PDFTextExtractor</代码)✅ (ExtractAllText())
永久许可❌(已淘汰)
无 AGPL 风险❌ (AGPL 或订阅)
社区支持✅(广泛)

团队何时考虑从iText迁移到 IronPDF?

开发团队评估从iText过渡到IronPDF有几个原因:

AGPL许可陷阱:AGPL许可对商业网络应用程序有很大限制。 如果您在未购买商业许可证的情况下在网络应用程序中使用 iText,则 AGPL 要求您将整个应用程序开源,不仅仅是 PDF 代码,而是整个代码库。 开发专有软件的团队通常无法接受这种病毒式的 License 要求。

仅限订阅的商业许可:iText 取消了永久许可,商业用途需要每年续订。 喜欢一次性购买的团队认为IronPDF的永久 License 选项更适合预算编制。

pdfHTML 附加组件的成本:要使用iText将 HTML 转换为 PDF,开发人员必须投资购买单独的 pdfHTML 附加组件,这会增加成本和复杂性。IronPDF在基础产品中包含 HTML 到 PDF 的转换,并配有现代 Chromium 渲染引擎。

程序 API 复杂性:iText 需要使用 Paragraph, Table,<代码>单元格</代码和其他对象手动构建低级 PDF。 具有网络开发经验的团队会发现IronPDF的 HTML/CSS 方法更直观、更富有成效。

现代网络标准:即使使用 pdfHTML,iText 对复杂 CSS 和 JavaScript 的支持也很有限。 IronPdf 的 Chromium 引擎可为现代网页内容提供完整的 CSS3、Flexbox、Grid 和 JavaScript 执行功能。

简化代码库:从iText的编程方法转换到IronPDF的 HTML 优先范例通常会大大减少代码量。 需要几十行的 Table,<代码>单元格</代码和<代码>段落</代码对象的报告表格变成了带有 CSS 样式的简单 HTML 表格。

优势和考虑因素

iText的优势

  • 全面的功能集:广泛的 PDF 操作功能
  • 广泛采用:庞大的社区和丰富的文档
  • 跨平台:适用于各种 .NET 平台
  • 细粒度控制:直接操作 PDF 对象,满足特殊需求

iText注意事项

  • AGPL 许可证:病毒许可证要求开源网络应用程序或商业订阅
  • 仅限订阅:取消永久许可
  • pdfHTML 附加组件:HTML 转 PDF 需要单独购买
  • 程序复杂性:PDF 坐标系的陡峭学习曲线
  • 有限的现代 CSS:即使使用 pdfHTML 也能提供基本的 CSS 支持
  • 无 JavaScript:不能在 HTML 内容中执行 JavaScript

IronPDF的优势

  • 永久许可:可选择一次性购买
  • 无 AGPL 风险:保持专有代码闭源
  • 内置 HTML 转 PDF:无需单独的附加组件
  • Chromium 引擎:完全支持 CSS3、Flexbox、网格和 JavaScript
  • 对网络开发人员友好:使用熟悉的 HTML/CSS 技能
  • 更简单的 API:常用操作的简明方法
  • 全面的资源:广泛的教程文档

IronPDF注意事项

  • 商业许可:生产使用要求
  • HTML 优先范式:与程序化构建不同的方法

结论

iText 和IronPDF代表了在 .NET 应用程序中生成 PDF 的根本不同方法。iText使用 ParagraphTable 和<代码>单元格</代码等类提供全面的编程式 PDF 构建,但存在重大的许可问题--AGPL 要求开源网络应用程序,永久许可已被取消,HTML-to-PDF 需要单独购买 pdfHTML 附加组件。

IronPDF 提供了一个现代化的替代方案,使用 Chromium 引擎进行内置 HTML 到 PDF 的转换,提供永久许可选项,并且没有病毒许可要求。 HTML 优先的方法允许网络开发人员直接应用现有的技能,通常会产生更简单、更易维护的代码。

随着企业对 .NET 10、C# 14 以及 2026 年之前的应用程序开发进行规划,在 AGPL 许可的程序化 PDF 构建和商业许可的基于 HTML 的渲染之间做出选择,会对法律合规性和开发效率产生重大影响。 寻求消除 AGPL 风险、降低 License 复杂性或利用网络开发技能生成 PDF 的团队会发现IronPDF能有效满足这些要求。

通过免费试用开始评估 IronPDF,并浏览全面的文档以评估是否适合您的特定需求。