跳至页脚内容
迁移指南

如何用 C# 从 iText 迁移到 IronPDF

从 iText 迁移到 IronPDF:完整的 C# 迁移指南。

从 iText 迁移到IronPDF可将您的 .NET PDF 工作流程从需要手动构建 Paragraph,<代码>表格</代码和<代码>单元格</代码对象的编程式 API 转换为完全支持 CSS3 和JavaScript的现代 HTML 优先方法。 本指南提供了一个全面的、循序渐进的迁移路径,消除了 AGPL许可证的顾虑,也无需为专业的 .NET 开发人员单独安装 pdfHTML 附加组件。

为什么要从 iText 迁移到 IronPDF.

AGPL 许可陷阱

iText 给商业应用带来了严重的法律和商业风险,许多开发团队发现时已经为时已晚:

1.AGPL 病毒许可证:如果您在网络应用程序中使用 iText,则 AGPL 要求您开放整个应用程序的源代码--不仅仅是 PDF 代码,而是整个代码库。 这对于大多数商业软件来说都是不可能的。

2.无永久许可证:iText 取消了永久许可证,因为每年续订会增加总体拥有成本。

3.pdfHTML附加组件费用:HTML 转 PDF 功能需要使用 pdfHTML 附加组件,该组件需在基本许可的基础上另行付费购买。

4.复杂的许可审核:企业部署面临着复杂的许可和审核风险,这可能会延误项目并带来法律风险。

5.Programmatic-Only API:iText 需要使用 Paragraph, Table,<代码>单元格</代码对象手动构建低级 PDF--对于复杂的布局来说,这既麻烦又容易出错。

6.有限的现代网络渲染:即使使用 pdfHTML,复杂的 CSS 和JavaScript内容也需要大量的额外工作。

iText 与IronPDF对比

特征iText 7 / iTextSharpIronPDF
许可证AGPL(病毒式)或昂贵的订阅商业、永久选项
HTML 转 PDF单独的 pdfHTML 附加组件内置 Chromium 渲染器
CSS 支持基本 CSS完全 CSS3、Flexbox、网格
JavaScript全面执行
应用程序接口范例程式化(段落、表格、单元格)HTML 优先,带 CSS
学习曲线陡峭(PDF 坐标系)对网络开发人员友好
开源风险必须是开源网络应用程序无病毒要求
定价模式仅限订阅永久或订阅

对于计划在 2025 年和 2026 年之前采用 .NET 10 和 C# 14 的团队来说,IronPDF 提供了一个面向未来的基础,其 HTML 优先的方法可利用团队已有的网络开发技能。


迁移复杂性评估

按功能估算的工作量

特征迁移复杂性备注
HTML 至 PDF极低直接方法替换
合并 PDF更简单的应用程序接口
文本和图片HTML 取代编程
表格语言HTML 表格取代 iText 表格类
页眉/页脚语言事件处理程序 → HTML 模板
安全/加密基于属性的 API

范式转换

这次 iText 迁移的根本转变是从 程序化 PDF 构建HTML-first渲染

iText:    PdfWriter → PdfDocument → Document → Add(Paragraph) → Add(Table)
IronPDF:  ChromePdfRenderer → RenderHtmlAsPdf(htmlString) → SaveAs()

这种模式的转变是一种解放:您无需学习 iText 的对象模型,而是使用网络开发人员已经掌握的 HTML 和 CSS 技能。


开始之前

前提条件

1..NET环境:.NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+ 2.NuGet 访问:安装 NuGet 软件包的能力 3.IronPDF 许可证:从 ironpdf.com 获取许可证密钥

NuGet 软件包变更

# Remove iText packages
dotnet remove package itext7
dotnet remove package itext7.pdfhtml
dotnet remove package itextsharp

# Install IronPDF
dotnet add package IronPdf
# Remove iText packages
dotnet remove package itext7
dotnet remove package itext7.pdfhtml
dotnet remove package itextsharp

# Install IronPDF
dotnet add package IronPdf
SHELL

许可配置

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

确定 iText 的用法

# Find all iText references
grep -r "using iText\|using iTextSharp" --include="*.cs" .
grep -r "PdfWriter\|PdfDocument\|Document\|Paragraph\|Table\|Cell" --include="*.cs" .
grep -r "HtmlConverter\|ConverterProperties" --include="*.cs" .
# Find all iText references
grep -r "using iText\|using iTextSharp" --include="*.cs" .
grep -r "PdfWriter\|PdfDocument\|Document\|Paragraph\|Table\|Cell" --include="*.cs" .
grep -r "HtmlConverter\|ConverterProperties" --include="*.cs" .
SHELL

完整的 API 参考

类映射

iText 7 类iTextSharp 类IronPdf 同等产品
<代码>PdfWriter</代码<代码>PdfWriter</代码<代码>ChromePdfRenderer</代码
<代码>PDF 文档</代码<代码>文档</代码<代码>PDF 文档</代码
<代码>文档</代码<代码>文档</代码<代码>ChromePdfRenderer.RenderHtmlAsPdf()</代码
<代码>段落</代码<代码>段落</代码HTML <p>, <h1> 等。
<代码>表格</代码<代码>PDFPTable</代码HTML <table>
<代码>单元格</代码<代码>PdfPCell</代码HTML <td>, <th>
<代码>图片</代码<代码>图片</代码HTML <img>
<代码>PDF 阅读器</代码<代码>PDF 阅读器</代码<代码>PdfDocument.FromFile()</代码
<代码>PDFMerger</代码不适用<代码>PdfDocument.Merge()</代码

命名空间映射

iText 7 名称空间IronPdf 同等产品
<代码>iText.Kernel.Pdf</代码<代码>IronPdf</代码
<代码>iText.布局</代码<代码>IronPdf</代码
<代码>iText.Layout.Element</代码使用 HTML 元素
<代码>iText.Html2Pdf</代码<代码>IronPdf</代码>(内置)
<代码>iText.IO.Image</代码使用 HTML <img>
<代码>iText.Kernel.Utils</代码<代码>IronPdf</代码

代码迁移示例

示例 1:HTML 到 PDF 的转换

之前(iText 7):

// 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

After (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 并将所有内容封装在 using 语句中,以便妥善处理。 HtmlConverter.ConvertToPdf() 方法会直接写入数据流。

IronPDF 的方法更为简洁:创建一个<代码>ChromePdfRenderer</代码,使用 HTML 字符串调用 RenderHtmlAsPdf() ,然后在生成的<代码>PDF 文档</代码上调用 SaveAs() 。 没有单独的软件包,没有流管理,Chromium 渲染引擎提供卓越的 CSS3 和JavaScript支持。 有关其他渲染选项,请参阅 HTML to PDF 文档

示例 2:合并多个 PDF 文件

之前(iText 7):

// 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

After (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</代码,然后使用嵌套的 using 语句遍历每个<代码>PDF 文档</代码和<代码>PDF 阅读器</代码的源文件。 您还必须使用 merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages()) 指定页面范围。

IronPDF 将此简化为三个步骤:使用<代码>PdfDocument.FromFile()</代码加载文档,使用列表调用静态<代码>PdfDocument.Merge()</代码方法,然后保存。 使整个合并操作具有可读性和可维护性。 了解有关 合并和拆分 PDF 的更多信息。

示例 3:使用文本和图像创建 PDF.

之前(iText 7):

// 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

After (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 要求

  • 三重嵌套的 using 语句(PdfWriterPdfDocumentDocument</code)
  • 使用 new Paragraph() 为每个文本元素创建<代码>段落</代码对象
  • 使用 ImageDataFactory.Create() 加载图像
  • 创建<代码>图片</代码对象并分别调用 SetWidth()
  • 为每个元素调用 document.Add()

IronPdf 使用标准 HTML:<h1> 表示标题,<p> 表示段落,<img> 表示带有 width 属性的图像。 网络开发人员可以立即利用他们现有的技能,而设计人员则可以使用他们已经掌握的 CSS 对文档进行样式设计。


关键迁移说明

范式转变:编程到 HTML 优先

这次 iText 迁移中最重要的变化是概念上的。 iText 以编程方式生成 PDF:

// iText approach
document.Add(new Paragraph("Title")
    .SetTextAlignment(TextAlignment.CENTER)
    .SetFontSize(24)
    .SetBold());

var table = new Table(UnitValue.CreatePercentArray(3)).UseAllAvailableWidth();
table.AddHeaderCell(new Cell().Add(new Paragraph("ID")));
table.AddHeaderCell(new Cell().Add(new Paragraph("Name")));
// ... many more lines
// iText approach
document.Add(new Paragraph("Title")
    .SetTextAlignment(TextAlignment.CENTER)
    .SetFontSize(24)
    .SetBold());

var table = new Table(UnitValue.CreatePercentArray(3)).UseAllAvailableWidth();
table.AddHeaderCell(new Cell().Add(new Paragraph("ID")));
table.AddHeaderCell(new Cell().Add(new Paragraph("Name")));
// ... many more lines
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPdf 使用 HTML 和 CSS:

//IronPDFapproach
string html = @"
    <style>
        h1 { text-align: center; font-size: 24px; font-weight: bold; }
        table { width: 100%; border-collapse: collapse; }
        th { background-color: #4CAF50; color: white; padding: 8px; }
    </style>
    <h1>Title</h1>
    <table>
        <tr><th>ID</th><th>Name</th></tr>
    </table>";

var pdf = renderer.RenderHtmlAsPdf(html);
//IronPDFapproach
string html = @"
    <style>
        h1 { text-align: center; font-size: 24px; font-weight: bold; }
        table { width: 100%; border-collapse: collapse; }
        th { background-color: #4CAF50; color: white; padding: 8px; }
    </style>
    <h1>Title</h1>
    <table>
        <tr><th>ID</th><th>Name</th></tr>
    </table>";

var pdf = renderer.RenderHtmlAsPdf(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

取消 AGPL 许可

iText 的 AGPL 许可证要求开源整个网络应用程序或购买昂贵的商业许可证。IronPDF的商业许可证允许在专有软件中部署,而无需病毒许可要求。

无需 pdfHTML 附加组件

iText 需要使用单独的 pdfHTML 附加组件进行 HTML 到 PDF 的转换,该组件需额外付费。IronPDF 的基础软件包中包含基于 Chromium 的完整 HTML 渲染功能。

方法替换模式

iText 模式IronPdf 替代品
<代码>设置文本对齐方式(TextAlignment.CENTER)</代码CSS text-align: center
<代码>设置字体大小(24)</代码CSS font-size: 24px
<代码>SetBold()</代码CSS font-weight: bold
<代码>新表(3)</代码HTML <table>
<代码>添加标题单元格(new Cell().Add(new Paragraph()))HTML <th>
<代码>AddCell(new Cell().Add(new Paragraph()))HTML <td>

故障排除

问题 1:PdfWriter/文档模式

问题:代码使用<代码>PdfWriter</代码→<代码>PDF 文档</代码→<代码>文档</代码嵌套模式。

解决方案:替换为 ChromePdfRenderer

// Delete this iText pattern:
// using (var writer = new PdfWriter(outputPath))
// using (var pdfDoc = new PdfDocument(writer))
// using (var document = new Document(pdfDoc))

// Replace with:
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(outputPath);
// Delete this iText pattern:
// using (var writer = new PdfWriter(outputPath))
// using (var pdfDoc = new PdfDocument(writer))
// using (var document = new Document(pdfDoc))

// Replace with:
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(outputPath);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

问题 2:HtmlConverter 未找到

问题:代码使用 iText.Html2pdf.HtmlConverter 需要 pdfHTML 附加组件。

解决方案:使用IronPDF内置的 HTML 渲染功能:

// iText (requires pdfHTML add-on)
HtmlConverter.ConvertToPdf(html, fileStream);

//IronPDF(built-in)
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(outputPath);
// iText (requires pdfHTML add-on)
HtmlConverter.ConvertToPdf(html, fileStream);

//IronPDF(built-in)
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(outputPath);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

问题 3:PdfMerger 的复杂性

问题:iText 的<代码>PDFMerger</代码需要嵌套阅读器和页面范围规范。

解决方案:使用IronPDF的静态合并方法:

// iText merger pattern (delete this)
// 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(simple)
var merged = PdfDocument.Merge(pdfDocuments);
merged.SaveAs("merged.pdf");
// iText merger pattern (delete this)
// 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(simple)
var merged = PdfDocument.Merge(pdfDocuments);
merged.SaveAs("merged.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

迁移清单

迁移前

  • [ ] 清点代码库中的所有 iText API 调用
  • [ ] 识别程序化 PDF 构建模式(段落、表格、单元格)
  • [文档 HtmlConverter 的用法(pdfHTML 附加组件)
  • [评估 AGPL 合规性风险
  • [ ] 获取 IronPdf 许可证密钥

代码迁移

  • [ ] 删除 iText NuGet 软件包:<代码>dotnet 移除软件包 itext7</代码
  • [ ] 安装 IronPdf NuGet 软件包:<代码>dotnet 添加软件包 IronPdf</ 代码
  • [ ] 更新命名空间导入(<代码>使用 iText.* → <代码>使用 IronPdf)
  • [ ] 使用<代码>ChromePdfRenderer</代码替换 PdfWriter/Document 模式。
  • [ ] 将 Paragraph/Table/Cell 转换为 HTML 元素
  • [ ] 将 HtmlConverter.ConvertToPdf() 替换为 RenderHtmlAsPdf()
  • [更新合并操作为 PdfDocument.Merge()
  • [ ] 在启动时添加许可证密钥初始化

测试

  • [ ] 测试所有 PDF 生成路径
  • [ ] 验证视觉输出是否符合预期
  • [ ] 测试复杂的 HTML/CSS 内容
  • [ ] 基准性能

后迁移

  • [ ] 删除 iText 许可证文件和参考资料
  • [ ] 更新文档
  • [ ] 取消 iText 订阅(如适用)
  • [将传统的 iText 代码归档

结论

从 iText 迁移到IronPDF可以消除 AGPL 许可陷阱,同时简化您的 PDF 生成代码。 从程序化构建到 HTML 优先渲染的模式转变意味着您的团队可以利用现有的网络开发技能,而无需学习 iText 的对象模型。

本次迁移的主要变化有 1.许可:AGPL (病毒) → 商业 (许可) 2.HTML 支持:独立的 pdfHTML 附加组件 → 内置 Chromium 3.API范式:程序化(段落、表格、单元格)→HTML/CSS 4.合并:复杂的 PdfMerger → 简单的 PdfDocument.Merge() 5.学习曲线:PDF 坐标系 → 对网络开发人员友好

探索完整的IronPdf文档教程API参考,加速您的 iText 迁移。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。