跳至頁尾內容
影片

如何在 C# | IronPDF 中填寫和編輯 PDF 表單

TX Text Control 已經在 .NET 生態系統中建立了一個全面的文件編輯元件,提供強大的 DOCX 編輯功能,並配有嵌入式 UI 控制項。 然而,對於主要需求是 PDF 生成而不是完整文件編輯的開發團隊來說,TextControl 的架構在授權成本、複雜性和運行時依賴性方面帶來了顯著的開銷。

本指南為專業 .NET 開發人員提供了從 TextControl 遷移到IronPDF的完整遷移路徑,包含逐步說明、程式碼比較和實際的例子,供評估此轉變。

為什麼從 TextControl 遷移

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

昂貴的授權: 單一TX Text Control .NET Server開發者授權為 $4,198,永久授權並附一年更新/支援; 四個開發者的團隊授權為 $8,398,永久授權加一年的支援(來自 textcontrol.com 的價格)。 年度訂閱續期約為列表價的 40%(大約 $1,698/年/開發者),續約窗口在到期後 30 天內關閉。 生產部署還需要單獨的伺服器運行時授權。

PDF 作為次要路徑: 核心架構是文字處理引擎(優先處理 DOCX/RTF), PDF 作為匯出途徑而不是主要表面。

捆綁的編輯器表面:TX Text Control配有 DOCX 編輯 UI 組件,當僅需伺服器端 PDF 生成時,這些可能是不必要的。

文字處理架構: HTML 導入是通過文字處理管道而不是基於 Chromium 的渲染,因此 HTML5/CSS3 的忠實度通常會比瀏覽器引擎的 PDF 程式庫更弱。

ASP.NET 中的 STA 相容性: ServerTextControl 可以追溯到 하나 STA COM 風格的組件模型,在與 STA 相容的執行緒上最為可靠,這 complicates 現代 ASP.NET Core 堆棧中的非同步/MTA 託管。

複雜的 API: ServerTextControl 的上下文管理加上單獨的 StringStreamType / BinaryStreamType / StreamType 枚舉和選擇驅動的文件模型,使簡單的 PDF 生成任務增加了負擔。

成本比較

方面 TX Text Control .NET Server IronPDF
單一開發者 $4,198 永久 + 1年支援 一次性的開發者授權
4人團隊 $8,398 永久 + 1年支援 每個席位較低
年度續期 列表價約 40% (約 $1,698/開發者/年) 可選支援
伺服器運行時 生產需要單獨的運行時授權 不需要
UI 組件 綁定的 DOCX 編輯器表面 專注於 PDF

IronPDFvs TextControl: 功能比較

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

功能 TX Text Control IronPDF
主要焦點 DOCX / 文字處理 PDF生成
授權費用 (單一開發者) $4,198 永久 + 1 年; ~40%/年 續期 一次性的開發者授權
PDF 生成 文字處理引擎上的匯出路徑 核心功能
伺服器運行時授權 生產需要 不需要
執行緒 ASP.NET 中的 STA 相容性 不需要 STA
HTML/CSS 渲染 通過文字處理管道匯入 HTML Chromium HTML5/CSS3
HTML轉PDF 是(次要) 是(主要)
CSS支持 有限 完整支持 CSS3
JavaScript 有限 完整的ES2024
URL到PDF 複雜的設置 本機
頁眉/頁腳 複雜的API 簡單的HTML
合併郵件 專有的 HTML 模板
PDF/A
密碼保護
數位簽名
合併PDF 有限
拆分PDF 有限
上下文管理 必需的 不需要
跨平臺 Windows 為主 Windows / Linux / macOS / Docker

快速開始:從 TextControl 到IronPDF的遷移

可以立即透過這些基本步驟開始遷移。

步驟 1:替換 NuGet 套件

TX Text Control 的無頭伺服器運行時並未作為單一公開的 NuGet 包分發 —— 公開包是 TXTextControl.Web(編輯器伴侶),而實際的 ServerTextControl 運行時則通過授權的 Windows 安裝程式/MSI 或廠商的私人 NuGet 提供。 移除通常意味著解除安裝這些由安裝程式提供的包加上 TXTextControl.Web 並解除安裝 MSI。

# RemoveTX Text Controlpackages (names depend on which were installed
# from the licensed installer / private feed / public NuGet)
dotnet remove package TXTextControl.Web

# Then installIronPDF(single self-contained package)
dotnet add package IronPdf
# RemoveTX Text Controlpackages (names depend on which were installed
# from the licensed installer / private feed / public NuGet)
dotnet remove package TXTextControl.Web

# Then installIronPDF(single self-contained package)
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;
Imports TXTextControl
Imports TXTextControl.DocumentServer

' After (IronPDF)
Imports IronPdf
$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, StringStreamType.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, StringStreamType.HTMLFormat);
                textControl.Save("output.pdf", StreamType.AdobePDF);
            }
        }
    }
}
Imports TXTextControl
Imports System.IO

Namespace TextControlExample
    Class Program
        Shared Sub Main(ByVal args As String())
            Using textControl As New ServerTextControl()
                textControl.Create()

                Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"

                textControl.Load(html, StringStreamType.HTMLFormat)
                textControl.Save("output.pdf", StreamType.AdobePDF)
            End Using
        End Sub
    End Class
End Namespace
$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");
        }
    }
}
Imports IronPdf

Namespace IronPdfExample
    Class Program
        Shared Sub Main(ByVal args As String())
            Dim renderer = New ChromePdfRenderer()

            Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"

            Dim pdf = renderer.RenderHtmlAsPdf(html)
            pdf.SaveAs("output.pdf")
        End Sub
    End Class
End Namespace
$vbLabelText   $csharpLabel

TextControl 版本需要建立一個 ServerTextControl 實例,呼叫 Create() 初始化上下文,使用 StreamType.HTMLFormat 載入 HTML,然後使用 StreamType.AdobePDF 保存。 正確資源處理的 using 區塊是必須的。

IronPDF 完全消除了上下文管理。 ChromePdfRenderer 不需要初始化儀式 —— 建立它,渲染 HTML,然後保存。 這種架構簡化減少了認知負擔和潛在的資源管理錯誤。

如需進階 HTML 到 PDF 的場景,請參見 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, BinaryStreamType.AdobePDF);

                byte[] pdf2 = File.ReadAllBytes("document2.pdf");
                textControl.Append(pdf2, BinaryStreamType.AdobePDF, AppendSettings.StartWithNewSection);

                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, BinaryStreamType.AdobePDF);

                byte[] pdf2 = File.ReadAllBytes("document2.pdf");
                textControl.Append(pdf2, BinaryStreamType.AdobePDF, AppendSettings.StartWithNewSection);

                textControl.Save("merged.pdf", StreamType.AdobePDF);
            }
        }
    }
}
Imports TXTextControl
Imports System.IO

Namespace TextControlExample
    Class Program
        Shared Sub Main(ByVal args As String())
            Using textControl As New ServerTextControl()
                textControl.Create()

                Dim pdf1 As Byte() = File.ReadAllBytes("document1.pdf")
                textControl.Load(pdf1, BinaryStreamType.AdobePDF)

                Dim pdf2 As Byte() = File.ReadAllBytes("document2.pdf")
                textControl.Append(pdf2, BinaryStreamType.AdobePDF, AppendSettings.StartWithNewSection)

                textControl.Save("merged.pdf", StreamType.AdobePDF)
            End Using
        End Sub
    End Class
End Namespace
$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");
        }
    }
}
Imports IronPdf

Namespace IronPdfExample
    Class Program
        Shared Sub Main(ByVal args As String())
            Dim pdf1 = PdfDocument.FromFile("document1.pdf")
            Dim pdf2 = PdfDocument.FromFile("document2.pdf")

            Dim merged = PdfDocument.Merge(pdf1, pdf2)
            merged.SaveAs("merged.pdf")
        End Sub
    End Class
End Namespace
$vbLabelText   $csharpLabel

TextControl 需要將文件讀取到位元組陣列,管理 ServerTextControl 上下文,並用 AppendBinaryStreamType.AdobePDFAppendSettings.StartWithNewSection 呼叫來連接文件。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, StringStreamType.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, StringStreamType.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);
            }
        }
    }
}
Imports TXTextControl
Imports System.IO

Namespace TextControlExample
    Class Program
        Shared Sub Main(ByVal args As String())
            Using textControl As New ServerTextControl()
                textControl.Create()

                Dim html As String = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>"
                textControl.Load(html, StringStreamType.HTMLFormat)

                Dim header As New HeaderFooter(HeaderFooterType.Header)
                header.Text = "Document Header"
                textControl.Sections(0).HeadersAndFooters.Add(header)

                Dim footer As New HeaderFooter(HeaderFooterType.Footer)
                footer.Text = "Page {page} of {numpages}"
                textControl.Sections(0).HeadersAndFooters.Add(footer)

                textControl.Save("output.pdf", StreamType.AdobePDF)
            End Using
        End Sub
    End Class
End Namespace
$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");
        }
    }
}
Imports IronPdf
Imports IronPdf.Rendering

Namespace IronPdfExample
    Class Program
        Shared Sub Main(args As String())
            Dim renderer As New ChromePdfRenderer()

            Dim html As String = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>"

            Dim pdf = renderer.RenderHtmlAsPdf(html)

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

            pdf.SaveAs("output.pdf")
        End Sub
    End Class
End Namespace
$vbLabelText   $csharpLabel

TextControl 需要建立具有特定 HeaderFooterType 枚舉的 HeaderFooter 物件,通過 textControl.Sections[0] 存取文件部分,並新增到 HeadersAndFooters 集合中。IronPDF提供直接的 AddTextHeaderAddTextFooter 方法(通過 TextHeaderFooter),並且使用簡單的位置符號。

要達成基於 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
};
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
    .HtmlFragment = "
        <div style='width: 100%; text-align: center; font-size: 12pt;'>
            Company Report
        </div>",
    .MaxHeight = 30
}

renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
    .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 Text Control IronPDF
ServerTextControl.Create() new ChromePdfRenderer()
tx.Load(html, StringStreamType.HTMLFormat) renderer.RenderHtmlAsPdf(html)
tx.Load(bytes, BinaryStreamType.AdobePDF) PdfDocument.FromFile(...) / FromBinaryData(...)
tx.Save(path, StreamType.AdobePDF) pdf.SaveAs(path)
tx.Append(bytes, BinaryStreamType.AdobePDF, AppendSettings.StartWithNewSection) PdfDocument.Merge(a, b)
SaveSettings.PDFAConformance RenderingOptions.PdfAFormat
DocumentServer.MailMerge HTML 模板 + Razor
HeaderFooter + Sections[i].HeadersAndFooters HtmlHeaderFooter / TextHeaderFooter
LoadSettings RenderingOptions
StreamType.AdobePDF 預設輸出

常見遷移問題及解決方案

問題 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);
' Just create and use
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

問題 2:StreamType 轉換

TextControl 需要在三個不同枚舉中切換——對字串重載使用 StringStreamType,對位元組[]重載使用 BinaryStreamType,對文件路徑保存使用 StreamType——以載入不同格式並匯出到 PDF。

解決方案:IronPDF直接渲染 HTML 不需中間格式轉換:

// No format conversion needed
var pdf = renderer.RenderHtmlAsPdf(html);
// No format conversion needed
var pdf = renderer.RenderHtmlAsPdf(html);
Dim pdf = renderer.RenderHtmlAsPdf(html)
$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");
Imports IronPdf

Dim data = New With {Key .CustomerName = "John Doe", Key .InvoiceNumber = "12345", Key .Total = "$1,500.00"}

Dim 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>"

Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("invoice.pdf")
$vbLabelText   $csharpLabel

問題 4:ASP.NET 中的 STA 相容性

TextControl ServerTextControl 歷史上可追溯到一個 STA COM 風格的組件模型,並且當在與 STA 相容的執行緒上託管時最為可靠(如在經典 Web Forms 中使用 [ASPCOMPAT],或者在 ASP.NET Core 中將呼叫包裝在專用的 STA 執行緒/隊列中)。 將其自由與 MTA 工作者執行緒混合使用可能在負載下產生偶發的執行緒相容性錯誤。

解決方案:IronPDF沒有 STA 要求,且能在 MTA 工作者執行緒、異步控制器以及 .NET 6/7/8/9 下的 Linux 容器中正常運行。

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 編輯功能。

程式碼更新任務

  1. 移除TX Text ControlNuGet 包
  2. 安裝IronPDFNuGet 套件
  3. 移除 ServerTextControl 上下文管理(不再需要 Create() 呼叫)
  4. StringStreamType.HTMLFormat 載入轉換為 RenderHtmlAsPdf
  5. 將合併郵件轉換為帶有字串插值或 Razor 的 HTML 模板
  6. 更新頁眉/頁腳以使用 HtmlHeaderFooterAddTextFooter
  7. 使用 RenderingOptions 簡化頁面設置
  8. 在啟動時新增授權初始化

遷移後測試

遷移後,驗證以下方面:

  • 測試所有文件模板正確渲染
  • 驗證PDF/A合規性是否必要
  • 測試密碼保護功能
  • 驗證頁眉/頁腳是否顯示在所有頁面上
  • 驗證 ASP.NET Core 在 MTA 工作用執行緒上的托管以及 Linux 容器——IronPDF 沒有 STA 相容性需求

遷移到IronPDF的關鍵好處

從 TextControl 遷移到IronPDF為專注於 PDF 生成的團隊提供了多種優勢:

PDF 優先架構:IronPDF是專為 PDF 生成而設計,通過利用現代 HTML5 和 CSS3 標準,提供文件建立和渲染能力。

成本效益:IronPDF的一次性開發者定價與TX Text Control .NET Server的 $4,198 勝過+ 1年入門級別和 ~40%/年續用模式對比,特別是當考慮到單獨的伺服器運行時授權時。

無 STA 相容性:IronPDF可在 ASP.NET Core 的標準 MTA 工作者執行緒、異步控制器和 Linux 容器中運行,不需要 ServerTextControl 從其 COM 風格執行緒模型繼承的 STA 相容性託管考慮。

無上下文管理: 消除 @ @--CODE-5072--@@ 的建立儀式和三枚舉 (StringStreamType / BinaryStreamType / StreamType) 載入/保存舞 – ChromePdfRenderer 是無狀態的。

現代渲染引擎:IronPDF的 Chromium-based 渲染針對當前的 HTML5/CSS3/JavaScript 標準而非文字處理引擎 HTML 匯入路徑。

請注意Text Control 是其各自擁有者的註冊商標。 本網站未與 Text Control 附屬、經 Text Control 批准或由 Text Control 贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供參考,反映撰寫時公開可用的資訊。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話