MIGRATION GUIDES How to Migrate from TextControl to IronPDF in C# Curtis Chau 發表日期:2026年2月1日 下載 IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 開始免費試用 法學碩士副本 法學碩士副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 TX Text Control 已成為 .NET 生態系統中全面的文件編輯器元件,提供強大的 DOCX 編輯功能和嵌入式 UI 控制項。 然而,對於主要需求是產生 PDF 而不是完整編輯文件的開發團隊來說,TextControl 的架構在授權成本、複雜性和執行時間依賴性方面帶來了巨大的開銷。 本指南提供了從 TextControl 到 IronPDF 的完整遷移路徑,包括逐步說明、程式碼比較和實用範例,供正在評估此過渡的專業 .NET 開發人員參考。 為什麼要從 TextControl 遷移? 從 TextControl 遷移的決定通常取決於您的工具是否符合您的實際需求。 TX 文字控制 本質上是一個文件編輯器,它將 PDF 產生視為次要功能。 開發團隊考慮遷移的主要原因包括: 昂貴的授權費用: TextControl 採用商業許可,每位開發者每年最低收費 3,398 美元。 一個四人團隊每年預計投資約 6,749 美元,此外還需要支付伺服器部署運行時許可證的費用。 續約費用每年為 40%,這是維持更新存取權限的必要條件。 PDF 是事後新增的:核心架構是文字處理,而不是 PDF。 雖然可以產生 PDF 文件,但這更像是一項附加功能,而不是核心功能,因此輸出品質不夠理想。 硬體漏洞: Intel Iris Xe 顯示卡漏洞會影響較新的 Intel 處理器(第 11 代)中的文件渲染,需要透過登錄變通方法來解決。 臃腫的依賴項: TextControl 包含文件編輯 UI 元件,如果您只專注於產生 PDF,則可能不需要這些元件。 文字處理器架構:未針對現代 Web 應用程式所需的 HTML 到 PDF 工作流程進行最佳化。 複雜的 API: ServerTextControl 上下文管理和選擇模型為簡單的 PDF 生成任務增加了不必要的複雜性。 成本比較 方面 TX 文字控制 IronPDF 基本許可 3,398美元以上 顯著降低 年度續約 40% 強制性 可選支援 開發商 是的 是的 UI元件 捆綁式(臃腫) 以PDF為重點 三年總成本 5,750美元以上 低得多 IronPDF 與 TextControl:功能對比 了解架構差異有助於技術決策者評估遷移投資: 特徵 TX 文字控制 IronPDF 主要關注點 DOCX 編輯 PDF生成 許可證費用 每位開發商每年 3,398 美元 每位開發人員一次性支付 749 美元 PDF品質 基本附加功能 高核心功能 硬體相容性 Intel Iris 的已知問題 在所有設備上均穩定 與使用者介面集成 需要 UI 元件 沒有使用者介面組件臃腫 HTML/CSS渲染 HTML有缺陷 現代 HTML5/CSS3 HTML 轉 PDF 是的(次要的) 是的(主要) CSS 支援 有限的 完整的 CSS3 JavaScript 有限的 完整版 ES2024 PDF檔案的URL 複雜的設定 本國的 頁首/頁尾 複雜 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:更新命名空間 將 TextControl 命名空間替換為 IronPdf 命名空間: // Before (TextControl) using TXTextControl; using TXTextControl.DocumentServer; // After (IronPDF) using IronPdf; // Before (TextControl) using TXTextControl; using TXTextControl.DocumentServer; // After (IronPDF) using IronPdf; $vbLabelText $csharpLabel 步驟 3:初始化許可證 在應用程式啟動時新增許可證初始化: IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; $vbLabelText $csharpLabel 程式碼遷移範例 將 HTML 轉換為 PDF 最常見的用例反映了這些 .NET PDF 程式庫之間的架構差異。 文字控制項方法: // 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); } } } } $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"); } } } $vbLabelText $csharpLabel TextControl 版本需要建立一個ServerTextControl實例,呼叫Create()初始化上下文,使用StreamType.HTMLFormat載入 HTML,並使用StreamType.AdobePDF儲存。 using程式碼區塊對於正確釋放資源至關重要。 IronPDF 完全消除了上下文管理。 ChromePdfRenderer不需要初始化過程——創建它,渲染 HTML,然後儲存。 這種架構簡化降低了認知負荷和潛在的資源管理錯誤。 如需更進階的 HTML 轉 PDF 場景,請參閱HTML 轉 PDF 轉換指南。 合併多個PDF文件 PDF 合併揭示了這些庫之間另一個顯著的複雜性差異。 文字控制項方法: // 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); } } } } $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"); } } } $vbLabelText $csharpLabel TextControl 需要將檔案讀入位元組數組,管理ServerTextControl上下文,並使用LoadAppendMode.Append合併文件。 IronPDF 的PdfDocument.Merge()方法只需一次明確呼叫即可處理所有操作。 對於包含選擇性頁面擷取在內的進階合併場景,請參閱合併和分割 PDF 指南。 新增頁首和頁尾 帶有動態頁碼的頁首和頁尾體現了 API 複雜性的差異。 文字控制項方法: // 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); } } } } $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"); } } } $vbLabelText $csharpLabel TextControl 需要建立具有特定HeaderFooterType枚舉的HeaderFooter對象,透過textControl.Sections[0]存取文件部分,並添加到HeadersAndFooters集合中。 IronPDF 提供直接的AddTextHeader和AddTextFooter方法,並採用簡單的佔位符語法。 對於具有完整樣式控制的基於 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 }; $vbLabelText $csharpLabel 有關頁首和頁尾選項的更多信息,請參閱頁首和頁尾文檔。 TextControl API 到 IronPDF 映射參考 此映射透過顯示直接的 API 等效項來加速遷移: TX 文字控制 IronPDF 筆記 ServerTextControl.Create() new 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(path) 簡單保存 SaveSettings.PDFAConformance RenderingOptions.PdfAFormat PDF/A DocumentServer.MailMerge HTML範本 + Razor 模板合併 DocumentTarget.HeadersAndFooters HtmlHeaderFooter 頁首/頁尾 LoadSettings RenderingOptions 配置 StreamType.AdobePDF 預設輸出 PDF是主要的 常見遷移問題及解決方案 問題 1:伺服器文字控制項上下文 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); $vbLabelText $csharpLabel 問題 2:流類型轉換 TextControl透過StreamType枚舉載入不同格式並將其轉換為 PDF。 解決方案: IronPDF 直接渲染 HTML,無需中間格式轉換: // No format conversion needed var pdf = renderer.RenderHtmlAsPdf(html); // No format conversion needed var pdf = renderer.RenderHtmlAsPdf(html); $vbLabelText $csharpLabel 第三期: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"); $vbLabelText $csharpLabel 問題 4:Intel Iris Xe 顯示卡缺陷 TextControl已記錄了第 11 代英特爾處理器的渲染問題,需要透過登錄修改來解決。 解決方案: IronPDF 使用 Chromium 渲染-無需硬體加速漏洞或登錄機碼修改。 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實作時對頁首/頁尾的要求。 找出所有可能需要替代解決方案的 DOCX 編輯功能。 程式碼更新任務 刪除 TX 文字控制項 NuGet 套件 安裝 IronPdf NuGet 套件 移除ServerTextControl上下文管理(不再呼叫Create() ) 將StreamType.HTMLFormat載入轉換為RenderHtmlAsPdf 使用字串插值或 Razor 將郵件合併轉換為 HTML 模板 更新頁首/頁尾,使用HtmlHeaderFooter或AddTextHeader / AddTextFooter 使用RenderingOptions簡化頁面設置 新增啟動時許可證初始化功能 遷移後測試 遷移完成後,請確認以下幾個面向: 測試所有文件範本是否正確渲染 如有需要,請驗證 PDF/A 合規性 測試密碼保護功能 確認所有頁面上都顯示了頁首/頁尾 -檢查 Intel 第 11 代硬體-IronPDF 不再需要註冊表變通方法 遷移到 IronPDF 的主要優勢 從 TextControl 遷移到 IronPDF 可以為專注於 PDF 產生的團隊帶來以下幾個優勢: PDF優先架構: IronPDF專為PDF生成而設計,利用現代HTML5和CSS3標準,提供強大的文件建立和渲染功能。 成本效益: IronPDF 的一次性定價使其長期成本顯著降低,尤其是與 TextControl 的訂閱服務(強制每年續費 40%)相比。 穩定性已驗證:在各種硬體上都有可靠性記錄,避免了像 TextControl 使用 Intel 顯示卡時遇到的問題。 無需上下文管理:消除ServerTextControl建立過程和資源處置模式。 IronPDF 的無狀態渲染簡化了程式碼並減少了潛在的記憶體洩漏。 現代渲染引擎:隨著 .NET 10 和 C# 14 的普及,IronPDF 基於 Chromium 的渲染技術確保了與當前和未來 Web 標準的兼容性。 Curtis Chau 立即與工程團隊聊天 技術撰稿人 Curtis Chau 擁有電腦科學學士學位(卡爾頓大學),專長於前端開發,精通 Node.js、TypeScript、JavaScript 和 React。Curtis 對製作直覺且美觀的使用者介面充滿熱情,他喜歡使用現代化的架構,並製作結構良好且視覺上吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 也有濃厚的興趣,他喜歡探索整合硬體與軟體的創新方式。在空閒時間,他喜歡玩遊戲和建立 Discord bots,將他對技術的熱愛與創意結合。 相關文章 發表日期 2026年2月1日 How to Migrate from ZetPDF to IronPDF in C# Master the migration from ZetPDF to IronPDF with this complete C# guide. Switch from a coordinate-based library to a modern HTML-to-PDF solution. Includes code examples for HTML conversion, merging PDFs, and removing PDFSharp dependencies. 閱讀更多 發表日期 2026年2月1日 How to Migrate from Scryber.Core to IronPDF in C# Master the migration from Scryber.Core to IronPDF with this complete C# guide. Switch from custom XML/HTML parsing to a modern Chromium renderer. Includes code examples for HTML conversion, URL rendering, and replacing proprietary bindings. 閱讀更多 發表日期 2026年2月1日 How to Migrate from XFINIUM.PDF to IronPDF in C# Master the migration from XFINIUM.PDF to IronPDF with this complete C# guide. Switch from manual coordinate-based positioning to declarative HTML/CSS rendering. Includes code examples for replacing graphics primitives and automatic layout. 閱讀更多 How to Migrate from TuesPechkin to IronPDF in C#How to Migrate from Telerik Reporti...
發表日期 2026年2月1日 How to Migrate from ZetPDF to IronPDF in C# Master the migration from ZetPDF to IronPDF with this complete C# guide. Switch from a coordinate-based library to a modern HTML-to-PDF solution. Includes code examples for HTML conversion, merging PDFs, and removing PDFSharp dependencies. 閱讀更多
發表日期 2026年2月1日 How to Migrate from Scryber.Core to IronPDF in C# Master the migration from Scryber.Core to IronPDF with this complete C# guide. Switch from custom XML/HTML parsing to a modern Chromium renderer. Includes code examples for HTML conversion, URL rendering, and replacing proprietary bindings. 閱讀更多
發表日期 2026年2月1日 How to Migrate from XFINIUM.PDF to IronPDF in C# Master the migration from XFINIUM.PDF to IronPDF with this complete C# guide. Switch from manual coordinate-based positioning to declarative HTML/CSS rendering. Includes code examples for replacing graphics primitives and automatic layout. 閱讀更多