跳過到頁腳內容
遷移指南

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

從 TextControl 轉換到 IronPDF:完整的 C# 開發人員指南。

TX Text Control 已經成為 .NET 生態系統中的全面性文件編輯元件,提供內嵌 UI 控制的強大 DOCX 編輯功能。 然而,對於主要需求為 PDF 產生而非完整文件編輯的開發團隊而言,TextControl 的架構在 License 成本、複雜性和執行時依賴性方面帶來顯著的開銷。

本指南提供了從 TextControl 到IronPDF的完整轉換路徑,為評估此轉換的 .NET 專業開發人員提供了分步說明、程式碼比較以及實用範例。

為何要從 TextControl 遷移?

從 TextControl 遷移的決定通常是以將您的工具與實際需求相匹配為中心。TX 文本控制基本上是一個文件編輯器,將 PDF 生成視為次要功能。 開發團隊考慮遷移的主要原因包括

高昂的授權費用:TextControl 採用商業授權,每位開發人員每年的授權費用至少為 $3,398 美元。 一個四人團隊預計每年投資約 6,749 美元,伺服器部署運行時 License 需額外支付費用。 每年的續約費用為 40%,這是維持更新存取權的必要條件。

PDF as Afterthought:核心架構是文字處理,而非 PDF。 雖然可以產生 PDF,但這只是附加功能,而非核心重點,導致輸出品質未達最佳。

硬體 Bugs:Intel Iris Xe Graphics Bug 會影響較新的 Intel 處理器 (第 11 代) 的文件呈現,需要註冊表的變通方法來解決。

Bloated Dependencies:TextControl 包含文件編輯 UI 元件,如果您的重點純粹是 PDF 產生,您可能不需要這些元件。

文字處理器架構:未針對現代 Web 應用程式所需的 HTML 至 PDF 工作流程進行最佳化。

複雜的 API:ServerTextControl 上下文管理和選擇模型為簡單的 PDF 生成任務增加了不必要的複雜性。

成本比較

範疇TX 文本控制IronPDF
基本授權$3,398+大幅降低
年度續約必須達到 40可選支援
每位開發人員
UI 元件捆綁式(臃腫)以 PDF 為主
3 年總成本$5,750+低很多

IronPDFvs TextControl:功能比較

了解架構上的差異有助於技術決策者評估遷移投資:

特點TX 文本控制IronPDF
主要焦點DOCX 編輯生成 PDF
授權費用每位開發人員每年 3,398 美元每位開發人員一次性 749 美元
PDF 品質基本、附加功能高、核心功能
硬體相容性Intel Iris 的已知問題在所有裝置上都能保持穩定
與 UI 整合需要 UI 元件沒有臃腫的 UI 元件
HTML/CSS 渲染使用 HTML 的錯誤現代 HTML5/CSS3
HTML 至 PDF是 (次要)是 (主要)
CSS 支援限額完整的 CSS3
JavaScript限額完整的 ES2024
URL 至 PDF複雜的設定原生語言
頁首/頁尾複雜的 API簡單的 HTML
郵件合併專屬HTML 範本
PDF/A
密碼保護
數位簽名
合併 PDF限額
分割 PDF限額
上下文管理要求不需要
跨平台以 Windows 為重點

快速入門:TextControl 到IronPDF的遷移。

只要完成這些基本步驟,就可以立即開始遷移。

步驟 1:取代 NuGet 套件

移除所有 TextControl 套件:

# Remove TX Text Control
dotnet remove package TXTextControl.TextControl
dotnet remove package TXTextControl.DocumentServer
# Remove TX Text Control
dotnet remove package TXTextControl.TextControl
dotnet remove package TXTextControl.DocumentServer
SHELL

安裝 IronPDF:

# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
SHELL

步驟 2:更新命名空間

用 IronPdf 命名空間取代 TextControl 命名空間:

// Before (TextControl)
using TXTextControl;
using TXTextControl.DocumentServer;

// After (IronPDF)
using IronPdf;
// Before (TextControl)
using TXTextControl;
using TXTextControl.DocumentServer;

// After (IronPDF)
using IronPdf;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

步驟 3:初始化授權

在應用程式啟動時加入授權初始化:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

程式碼遷移範例

將 HTML 轉換為 PDF

最常見的使用案例展示了這些 .NET PDF 函式庫之間的架構差異。

TextControl 方法:

// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";

                textControl.Load(html, StreamType.HTMLFormat);
                textControl.Save("output.pdf", StreamType.AdobePDF);
            }
        }
    }
}
// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";

                textControl.Load(html, StreamType.HTMLFormat);
                textControl.Save("output.pdf", StreamType.AdobePDF);
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF 方法:

// NuGet: Install-Package IronPdf
using IronPdf;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";

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

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";

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

TextControl 版本需要建立 ServerTextControl 實例、呼叫 Create() 來初始化上下文、使用 StreamType.HTMLFormat 載入 HTML,以及使用<編碼>StreamType.AdobePDF</編碼儲存。 using 區塊必須正確處理資源。

IronPdf 完全消除了上下文管理。 ChromePdfRenderer 不需要任何初始化儀式 - 建立它、渲染 HTML 並儲存。 這種架構上的簡化可減少認知負荷和潛在的資源管理錯誤。

如需進階的 HTML 至IronPDF情境,請參閱 HTML 至 PDF 轉換指南

合併多個 PDF 文件

PDF 合併揭示了這些函式庫在複雜性上的另一個顯著差異。

TextControl 方法:

// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                byte[] pdf1 = File.ReadAllBytes("document1.pdf");
                textControl.Load(pdf1, StreamType.AdobePDF);

                byte[] pdf2 = File.ReadAllBytes("document2.pdf");
                textControl.Load(pdf2, StreamType.AdobePDF, LoadAppendMode.Append);

                textControl.Save("merged.pdf", StreamType.AdobePDF);
            }
        }
    }
}
// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                byte[] pdf1 = File.ReadAllBytes("document1.pdf");
                textControl.Load(pdf1, StreamType.AdobePDF);

                byte[] pdf2 = File.ReadAllBytes("document2.pdf");
                textControl.Load(pdf2, StreamType.AdobePDF, LoadAppendMode.Append);

                textControl.Save("merged.pdf", StreamType.AdobePDF);
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF 方法:

// NuGet: Install-Package IronPdf
using IronPdf;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var pdf1 = PdfDocument.FromFile("document1.pdf");
            var pdf2 = PdfDocument.FromFile("document2.pdf");

            var merged = PdfDocument.Merge(pdf1, pdf2);
            merged.SaveAs("merged.pdf");
        }
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var pdf1 = PdfDocument.FromFile("document1.pdf");
            var pdf2 = PdfDocument.FromFile("document2.pdf");

            var merged = PdfDocument.Merge(pdf1, pdf2);
            merged.SaveAs("merged.pdf");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

TextControl 需要將檔案讀入位元組陣列、管理 ServerTextControl 上下文,以及使用 LoadAppendMode.Append 合併文件。IronPDF的PdfDocument.Merge()方法只需一次明確的呼叫即可處理一切。

如需進階合併情境,包括選擇性抽取頁面,請參閱 合併與分割 PDF 指南

新增頁首與頁尾

具有動態頁碼的頁首和頁尾會展示 API 複雜性的差異。

TextControl 方法:

// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                string html = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>";
                textControl.Load(html, StreamType.HTMLFormat);

                HeaderFooter header = new HeaderFooter(HeaderFooterType.Header);
                header.Text = "Document Header";
                textControl.Sections[0].HeadersAndFooters.Add(header);

                HeaderFooter footer = new HeaderFooter(HeaderFooterType.Footer);
                footer.Text = "Page {page} of {numpages}";
                textControl.Sections[0].HeadersAndFooters.Add(footer);

                textControl.Save("output.pdf", StreamType.AdobePDF);
            }
        }
    }
}
// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                string html = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>";
                textControl.Load(html, StreamType.HTMLFormat);

                HeaderFooter header = new HeaderFooter(HeaderFooterType.Header);
                header.Text = "Document Header";
                textControl.Sections[0].HeadersAndFooters.Add(header);

                HeaderFooter footer = new HeaderFooter(HeaderFooterType.Footer);
                footer.Text = "Page {page} of {numpages}";
                textControl.Sections[0].HeadersAndFooters.Add(footer);

                textControl.Save("output.pdf", StreamType.AdobePDF);
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF 方法:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            string html = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>";

            var pdf = renderer.RenderHtmlAsPdf(html);

            pdf.AddTextHeader("Document Header");
            pdf.AddTextFooter("Page {page} of {total-pages}");

            pdf.SaveAs("output.pdf");
        }
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            string html = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>";

            var pdf = renderer.RenderHtmlAsPdf(html);

            pdf.AddTextHeader("Document Header");
            pdf.AddTextFooter("Page {page} of {total-pages}");

            pdf.SaveAs("output.pdf");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

TextControl 需要使用特定的 HeaderFooterType 枚舉來建立 HeaderFooter 物件,透過 textControl.Sections[0] 來存取文件區段,並加入到 HeadersAndFooters 集合中。 IronPdf 提供直接的 AddTextHeaderAddTextFooter 方法,並使用簡單的占位符語法。

對於具有完整樣式控制的 HTML 型標頭,IronPDF 也支援<編碼>HtmlHeaderFooter</編碼:

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; text-align: center; font-size: 12pt;'>
            Company Report
        </div>",
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; text-align: right; font-size: 10pt;'>
            Page {page} of {total-pages}
        </div>",
    MaxHeight = 25
};
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; text-align: center; font-size: 12pt;'>
            Company Report
        </div>",
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; text-align: right; font-size: 10pt;'>
            Page {page} of {total-pages}
        </div>",
    MaxHeight = 25
};
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

標頭和頁尾文件中瞭解更多關於標頭和頁尾選項的資訊。

TextControl API 到IronPDF的映射參考。

此對應可透過顯示直接的 API 對應關係來加速遷移:

TX 文本控制IronPDF筆記
<代碼>ServerTextControl.Create()</代碼新的 ChromePdfRenderer()無上下文管理
tx.Load(html, StreamType.HTMLFormat)renderer.RenderHtmlAsPdf(html)直接渲染
tx.Load(url, StreamType.HTMLFormat)renderer.RenderUrlAsPdf(url)URL 支援
tx.Save(path,StreamType.AdobePDF)<代碼>pdf.SaveAs(路徑)</代碼簡單保存
SaveSettings.PDFAConformanceRenderingOptions.PdfAFormatPDF/A
DocumentServer.MailMergeHTML 模板 + Razor模板合併
<編碼>DocumentTarget.HeadersAndFooters</編碼<編碼>HtmlHeaderFooter</編碼標題/頁腳
<編碼>載入設定</編碼渲染選項配置
<編碼>StreamType.AdobePDF</編碼預設輸出PDF 為主要格式

常見的遷移問題與解決方案

問題 1:ServerTextControl 上下文

TextControl 的每個操作都需要 Create()using 區塊。

解決方案:IronPDF沒有上下文管理:

// Just create and use
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// Just create and use
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

第 2 期:StreamType 轉換

TextControl 會載入不同的格式,並透過 StreamType 枚舉轉換為 PDF。

解決方案:IronPDF可直接渲染 HTML,無需進行中間格式轉換:

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

問題 3:DOCX 範本。

TextControl使用 DOCX 檔案製作具有郵件合併功能的範本。

解決方案:使用 C# 字串插值或 Razor 轉換為 HTML 模板:

var data = new { CustomerName = "John Doe", InvoiceNumber = "12345", Total = "$1,500.00" };

var html = $@"
<html>
<head>
    <style>
        body {{ font-family: Arial; padding: 40px; }}
        h1 {{ color: #333; }}
        .total {{ font-size: 24px; color: green; }}
    </style>
</head>
<body>
    <h1>Invoice #{data.InvoiceNumber}</h1>
    <p>Customer: {data.CustomerName}</p>
    <p class='total'>Total: {data.Total}</p>
</body>
</html>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("invoice.pdf");
var data = new { CustomerName = "John Doe", InvoiceNumber = "12345", Total = "$1,500.00" };

var html = $@"
<html>
<head>
    <style>
        body {{ font-family: Arial; padding: 40px; }}
        h1 {{ color: #333; }}
        .total {{ font-size: 24px; color: green; }}
    </style>
</head>
<body>
    <h1>Invoice #{data.InvoiceNumber}</h1>
    <p>Customer: {data.CustomerName}</p>
    <p class='total'>Total: {data.Total}</p>
</body>
</html>";

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

第 4 期:Intel Iris Xe 顯示錯誤

TextControl已記錄第 11 代 Intel 處理器的呈現問題,需要註冊表變通。

解決方案:IronPDF使用 Chromium 演算法 - 不需要硬體加速 bug 或修改註冊表。

TextControl 移轉清單

遷移前的任務

審核您的程式碼庫,以辨識所有 TextControl 的用法:

grep -r "using TXTextControl" --include="*.cs" .
grep -r "ServerTextControl\|Load\|Save" --include="*.cs" .
grep -r "using TXTextControl" --include="*.cs" .
grep -r "ServerTextControl\|Load\|Save" --include="*.cs" .
SHELL

文件郵件合併範本轉換為 HTML。 請注意使用<編碼>HtmlHeaderFooter</編碼實作的 header/footer 要求。 找出任何可能需要替代解決方案的 DOCX 編輯功能。

程式碼更新任務

1.移除TX 文本控制NuGet 套件 2.安裝 IronPdf NuGet 套件 3.移除 ServerTextControl 上下文管理 (不再呼叫 Create()) 4.將 StreamType.HTMLFormat 載入轉換為 RenderHtmlAsPdf 5.使用字串插值或 Razor 將郵件合併轉換為 HTML 模板 6.更新標頭/標腳以使用<編碼>HtmlHeaderFooter</編碼或 AddTextHeader/AddTextFooter 7.使用渲染選項簡化頁面設定 8.在啟動時加入授權初始化

後遷移測試

轉移後,驗證這些方面:

  • 測試所有文件範本是否能正確呈現
  • 必要時驗證PDF/A合規性
  • 測試密碼保護功能
  • 確認頁首/頁腳出現在所有頁面上
  • 在 Intel 第 11 代硬體上檢查-使用 IronPdf 不再需要註冊表變通程式

遷移到IronPDF的主要優點。

從 TextControl 轉移到IronPDF為專注於 PDF 產生的團隊提供了多項優勢:

PDF-First 架構:IronPDF 專為 PDF 生成量身打造,利用現代 HTML5 和 CSS3 標準提供強大的文件創建和渲染功能。

成本效益:IronPDF 的一次性定价使其随着时间的推移而显著降低成本,特别是与 TextControl 基于订阅的服务(每年必须续订 40%)相比。

經過驗證的穩定性:在各種硬體上都有可靠的記錄,可避免 TextControl 使用 Intel 顯示卡時所遇到的問題。

無上下文管理:消除 ServerTextControl 建立儀式和資源處理模式。IronPDF的無狀態渲染簡化了程式碼,並減少了潛在的記憶體洩漏。

現代的渲染引擎:IronPDF for .NET 10 和 C# 14 在 2026 年之前的採用率不斷增加,IronPDF 基於 Chromium 的渲染可確保與當前和未來的 Web 標準相容。

結論

TX Text Control 擁有完整的 DOCX 編輯功能和內嵌的 UI 控制項,是出色的綜合文件編輯器元件。 然而,對於主要需求是從 HTML、URL 或資料產生 PDF 的開發團隊而言,文件編輯基礎架構代表了不必要的複雜性和成本。

IronPDF 以更簡單的 API、現代化的 HTML5/CSS3 渲染,以及大幅降低的總擁有成本,提供專注的 PDF 生成功能。遷移路徑簡單直接:取代 NuGet 套件、取消上下文管理,並將 StreamType 作業轉換為直接渲染呼叫。

立即使用 免費試用 IronPDF 開始您的遷移,並評估專門為您的開發工作流程製作 PDF 所帶來的差異。

如需全面的實施指導,請探索 IronPDF 文件教學

Curtis Chau
技術作家

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

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