跳過到頁腳內容
遷移指南

如何在 C# 中從 iText 轉移到 IronPDF

從 iText 轉移到 IronPDF:完整的 C# 遷移指南。

從 iText 轉換到IronPDF可將您的 .NET PDF 工作流程從需要手動建構 Paragraph, Table, 和Cell物件的程式化 API 轉換為完全支援 CSS3 和JavaScript的現代化 HTML-first 方法。 本指南提供了一個全面的、循序漸進的轉換路徑,消除了 AGPL許可證的疑慮,也不需要為 Professional .NET 開發人員另外安裝 pdfHTML 附加元件。

為什麼要從 iText 轉移到 IronPDF?

AGPL 授權陷阱

iText 為商業應用程式帶來嚴重的法律與商業風險,許多開發團隊發現時已為時已晚:

1.AGPL 原始碼授權條款:如果您在 Web 應用程式中使用 iText,AGPL 會要求您開放整個應用程式的原始碼,不只是 PDF 程式碼,而是整個程式碼庫。 這對於大多數的商業軟體來說是不可能的。

2.No Perpetual License:iText 已取消永久授權,避免每年續訂而增加總擁有成本。

3.pdfHTML 附加元件費用:HTML 至 PDF 功能需要 pdfHTML 附加元件,此附加元件需在基本授權之外以額外費用單獨銷售。

4.複雜的授權稽核:企業部署面臨複雜的授權和稽核風險,可能會延誤專案並產生法律風險。

5.Programmatic-Only API:iText 需要使用 ParagraphTableCell 物件進行手動低階 PDF 建構 - 對於複雜的佈局而言,既費事又容易出錯。

6.有限的現代網路渲染:即使使用 pdfHTML,複雜的 CSS 和JavaScript內容也需要大量的額外工作。

iText 與IronPDF的比較

特點iText 7 / iTextSharpIronPDF
許可證AGPL(病毒式)或昂貴的訂閱商業、永久選項
HTML 至 PDF獨立的 pdfHTML 附加元件內建 Chromium 渲染器
CSS 支援基本 CSS完整的 CSS3、Flexbox、網格
JavaScript完全執行
API 範例程式化(段落、表格、單元格)HTML-first與CSS
學習曲線陡峭 (PDF 坐標系統)對網路開發人員友善
開放原始碼風險必須開源網路應用程式無病毒要求
定價模式僅訂閱永久或訂閱

對於計劃在 2025 年和 2026 年之前採用 .NET 10 和 C# 14 的團隊而言,IronPDF 提供了一個面向未來的基礎,其 HTML 為先的方法可充分利用團隊已有的網路開發技能。


遷移複雜性評估

按功能估計的工作量

特點遷移複雜性筆記
HTML 至 PDF非常低直接方法替換
合併 PDF更簡單的 API
文字與圖片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> 等。
表格PdfPTableHTML <table>
Cell<編碼>PdfPCell</編碼HTML <td>, <th>
圖片圖片HTML <img>
<編碼>PdfReader</編碼<編碼>PdfReader</編碼<代碼>PdfDocument.FromFile()</代碼
<編碼>PdfMerger</編碼不適用<代碼>PdfDocument.Merge()</代碼

命名空間對應

iText 7 命名空間IronPdf 同等級產品
<編碼>iText.Kernel.Pdf</編碼<編碼>IronPdf</編碼
<編碼>iText.Layout</編碼<編碼>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 合併作業需要大量的boilerplate:為輸出建立<編碼>PdfWriter</編碼,將其包裝在<編碼>PDF 文件</編碼中,建立<編碼>PdfMerger</編碼,然後透過每個<編碼>PDF 文件</編碼和<編碼>PdfReader</編碼的嵌套 using 語句遍歷原始檔案。 您也必須使用 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 語句 (PdfWriter, PdfDocument, Document)
  • 使用 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
new Table(3)HTML <table>
AddHeaderCell(new Cell().Add(new Paragraph()))HTML <th>
AddCell(new Cell().Add(new Paragraph()))HTML <td>

疑難排解

第 1 期:PdfWriter/Document 模式

問題:程式碼使用<編碼>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 add package 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 坐標系統 → Web 開發人員友好

探索完整的IronPdf文件教程API參考,加速您的iText遷移。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。