如何在 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安裝 IronPDF:
# Install IronPDF
dotnet add package IronPdf# Install IronPDF
dotnet add package IronPdf步驟 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步驟 3:初始化授權
在應用程式啟動時加入授權初始化:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"程式碼遷移範例
將 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.comIronPDF 方法:
// 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.comTextControl 版本需要建立 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.comIronPDF 方法:
// 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.comTextControl 需要將檔案讀入位元組陣列、管理 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.comIronPDF 方法:
// 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.comTextControl 需要使用特定的 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
};IRON VB CONVERTER ERROR developers@ironsoftware.com在 標頭和頁尾文件中瞭解更多關於標頭和頁尾選項的資訊。
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.PDFAConformance | RenderingOptions.PdfAFormat | PDF/A |
DocumentServer.MailMerge | HTML 模板 + 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第 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問題 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第 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" .文件郵件合併範本轉換為 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 文件和 教學。






