比較

Text Control 與 IronPDF:技術比較指南

當.NET開發人員評估 PDF 產生庫時,企業討論中常會出現兩種解決方案:TX Text Control 和IronPDF。 雖然兩者都能產生 PDF 輸出,但它們代表了截然不同的建築概念。 本次技術比較將對這兩個函式庫進行分析,以幫助架構師和開發人員為其.NET應用程式做出明智的決策。

了解 TX 文字控制

TX Text Control 是一個功能全面的文件編輯器元件,它強調 DOCX 編輯功能,並嵌入了 UI 控制項。 PDF 產生是其更廣泛的文件處理架構中的輔助功能。 該平台提供強大的文件編輯功能,使其適用於需要豐富文字編輯介面的應用。

然而,這種全面性也帶來了一些開發團隊應該仔細評估的因素:

-昂貴的授權費用: TX 文字控制 採用商業授權模式,起價為每位開發者 3,398 美元以上,且每年必須續費 40% 才能繼續獲得更新。

  • PDF 作為輔助功能:核心架構優先考慮文字處理而非 PDF 生成,將 PDF 輸出視為附加功能。 -已知硬體問題:已記錄的英特爾 Iris Xe 顯示卡渲染錯誤會影響第 11 代英特爾處理器,需要透過登錄修改來解決。 -冗餘相依性:包含一些對於以 PDF 為中心的工作流程來說可能不必要的文件編輯 UI 元件 -複雜的 API:需要 ServerTextControl 上下文管理和選擇模型模式

了解IronPDF

IronPDF採用了截然不同的方法,主要專注於 PDF 生成,而不包含 UI 元件或 DOCX 編輯工具。 該庫以其精簡、量身定制的設計脫穎而出,專門針對 PDF 的生成和操作進行了優化,使其成為一款高效的 PDF 優先架構工具。

IronPDF的主要特點包括:

  • PDF優先架構:從底層架構開始就專為PDF生成而設計,提供強大的文件創建和渲染功能
  • Chromium 渲染引擎:利用現代 HTML5 和 CSS3 標準,並提供完整的JavaScript執行支持 -成本效益:一次性授權模式免去了持續的訂閱費用。 -穩定性已得到驗證:在各種硬體配置下均展現出可靠性,避免了平台特定的渲染問題。 -整合簡單:無需上下文管理或複雜的初始化模式

價格比較

TextControl 和IronPDF之間的許可結構隨著時間的推移顯示出顯著的成本差異:

方面 TX 文字控制 IronPDF
基礎許可 每位開發商 3,398 美元以上 每位開發人員一次性支付 749 美元
年度續約 40% 強制性 可選支援
4人小組(一年級) 約 6,749 美元 約 2,996 美元
三年總成本 每位開發商 5,750 美元以上 每位開發商 749 美元
UI元件 捆綁式(可能導致臃腫) 僅限 PDF 格式
伺服器運行時 附加許可 包括

功能對比

下表列出了 TextControl 和IronPDF在關鍵維度上的技術差異:

特徵 TX 文字控制 IronPDF
主要關注點 DOCX 編輯 PDF生成
PDF品質 基本附加功能 高核心功能
HTML 轉 PDF 是的(次要的) 是的(主要)
CSS 支援 有限的 完整的 CSS3
JavaScript執行 有限的 完整版 ES2024
PDF檔案的URL 需要複雜的設置 原生支援
頁首/頁尾 複雜 API 簡單的基於HTML的
郵件合併 專有系統 HTML模板
PDF/A 合規性 是的 是的
密碼保護 是的 是的
數位簽名 是的 是的
合併PDF 有限的 支援
拆分PDF 有限的 支援
水印 複雜實施 簡單的HTML/CSS
硬體相容性 已知的英特爾 Iris 問題 在所有設備上均穩定
情境管理 必需的 不需要
跨平台 以 Windows 為中心的 是的

API架構差異

TextControl 和IronPDF的一個關鍵區別在於它們的 API 設計理念和初始化模式。

文字控制項方法

TextControl 需要透過 ServerTextControl 類別進行明確上下文管理。 所有操作都必須在呼叫 Create() 之後的 using 程式碼區塊內進行:

// 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);
            }
        }
    }
}
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, StreamType.HTMLFormat)
                textControl.Save("output.pdf", StreamType.AdobePDF)
            End Using
        End Sub
    End Class
End Namespace
$vbLabelText   $csharpLabel

這種模式需要了解 TextControl 特有的類別、流類型和上下文生命週期。

IronPDF方法

IronPDF完全消除了上下文管理。 ChromePdfRenderer類別提供了一個無狀態的 API,開發者可以立即使用:

// 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

有關 HTML 轉換功能的全面指導,請參閱HTML 轉 PDF 教學

API對應參考

正在評估從 TextControl 過渡到IronPDF 的團隊會發現此映射有助於理解概念等效性:

TX 文字控制 IronPDF
ServerTextControl.Create() new ChromePdfRenderer()
tx.Load(html, StreamType.HTMLFormat) renderer.RenderHtmlAsPdf(html)
tx.Load(url, StreamType.HTMLFormat) renderer.RenderUrlAsPdf(url)
tx.Save(path, StreamType.AdobePDF) pdf.SaveAs(path)
SaveSettings.PDFAConformance RenderingOptions.PdfAFormat
DocumentServer.MailMerge HTML範本 + Razor
DocumentTarget.HeadersAndFooters HtmlHeaderFooter
LoadSettings RenderingOptions
StreamType.AdobePDF 預設輸出

合併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);
            }
        }
    }
}
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, StreamType.AdobePDF)

                Dim pdf2 As Byte() = File.ReadAllBytes("document2.pdf")
                textControl.Load(pdf2, StreamType.AdobePDF, LoadAppendMode.Append)

                textControl.Save("merged.pdf", StreamType.AdobePDF)
            End Using
        End Sub
    End Class
End Namespace
$vbLabelText   $csharpLabel

IronPDF實現

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

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);
            }
        }
    }
}
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, StreamType.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實現

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

對於更複雜的頁首設計, IronPDF也支援HtmlHeaderFooter 類,接受完整的 HTML 和 CSS 樣式:

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

URL 轉 PDF

將即時網頁轉換為 PDF 可以揭示各個庫在處理網頁內容方面的架構差異。

文字控制項方法

TextControl 需要透過其 HTML 格式處理程序手動載入 URL,而該處理程序提供的 CSS 和JavaScript支援有限:

using (ServerTextControl tx = new ServerTextControl())
{
    tx.Create();

    LoadSettings loadSettings = new LoadSettings();
    loadSettings.ApplicationFieldFormat = ApplicationFieldFormat.MSWord;
    tx.Load("https://example.com/invoice", StreamType.HTMLFormat, loadSettings);

    SaveSettings saveSettings = new SaveSettings();
    saveSettings.PDFAConformance = PDFAConformance.PDFa1b;
    tx.Save("output.pdf", StreamType.AdobePDF, saveSettings);
}
using (ServerTextControl tx = new ServerTextControl())
{
    tx.Create();

    LoadSettings loadSettings = new LoadSettings();
    loadSettings.ApplicationFieldFormat = ApplicationFieldFormat.MSWord;
    tx.Load("https://example.com/invoice", StreamType.HTMLFormat, loadSettings);

    SaveSettings saveSettings = new SaveSettings();
    saveSettings.PDFAConformance = PDFAConformance.PDFa1b;
    tx.Save("output.pdf", StreamType.AdobePDF, saveSettings);
}
Imports ServerTextControlNamespace

Using tx As New ServerTextControl()
    tx.Create()

    Dim loadSettings As New LoadSettings()
    loadSettings.ApplicationFieldFormat = ApplicationFieldFormat.MSWord
    tx.Load("https://example.com/invoice", StreamType.HTMLFormat, loadSettings)

    Dim saveSettings As New SaveSettings()
    saveSettings.PDFAConformance = PDFAConformance.PDFa1b
    tx.Save("output.pdf", StreamType.AdobePDF, saveSettings)
End Using
$vbLabelText   $csharpLabel

IronPDF方法

IronPDF透過其 Chromium 引擎提供原生 URL 渲染,執行JavaScript並套用所有樣式:

var renderer = new ChromePdfRenderer();

// PDF/A compliance - simple property
renderer.RenderingOptions.PdfAFormat = PdfAVersions.PdfA1B;

var pdf = renderer.RenderUrlAsPdf("https://example.com/invoice");
pdf.SaveAs("output.pdf");
var renderer = new ChromePdfRenderer();

// PDF/A compliance - simple property
renderer.RenderingOptions.PdfAFormat = PdfAVersions.PdfA1B;

var pdf = renderer.RenderUrlAsPdf("https://example.com/invoice");
pdf.SaveAs("output.pdf");
Dim renderer = New ChromePdfRenderer()

' PDF/A compliance - simple property
renderer.RenderingOptions.PdfAFormat = PdfAVersions.PdfA1B

Dim pdf = renderer.RenderUrlAsPdf("https://example.com/invoice")
pdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

RenderUrlAsPdf 方法可以擷取完整的渲染頁面,包括動態產生的內容,因此非常適合使用 React、Angular 或 Vue.js 等框架建立的現代 Web 應用程式。

頁面設定和配置

配置頁面尺寸、邊距和方向展示了不同的文件設定方法。

文字控制項實現

TextControl 使用基於節的頁面設置,單位為 TWIPS:

using (ServerTextControl tx = new ServerTextControl())
{
    tx.Create();
    tx.Load(html, StreamType.HTMLFormat);

    // Complex page settings through sections
    foreach (Section section in tx.Sections)
    {
        section.Format.PageSize = PageSize.A4;
        section.Format.PageMargins = new PageMargins(
            1440, 1440, 1440, 1440); // TWIPS
        section.Format.Landscape = true;
    }

    tx.Save("output.pdf", StreamType.AdobePDF);
}
using (ServerTextControl tx = new ServerTextControl())
{
    tx.Create();
    tx.Load(html, StreamType.HTMLFormat);

    // Complex page settings through sections
    foreach (Section section in tx.Sections)
    {
        section.Format.PageSize = PageSize.A4;
        section.Format.PageMargins = new PageMargins(
            1440, 1440, 1440, 1440); // TWIPS
        section.Format.Landscape = true;
    }

    tx.Save("output.pdf", StreamType.AdobePDF);
}
Imports TXTextControl

Using tx As New ServerTextControl()
    tx.Create()
    tx.Load(html, StreamType.HTMLFormat)

    ' Complex page settings through sections
    For Each section As Section In tx.Sections
        section.Format.PageSize = PageSize.A4
        section.Format.PageMargins = New PageMargins(1440, 1440, 1440, 1440) ' TWIPS
        section.Format.Landscape = True
    Next

    tx.Save("output.pdf", StreamType.AdobePDF)
End Using
$vbLabelText   $csharpLabel

IronPDF實現

IronPDF將頁面設定集中在渲染選項中,並採用直覺的毫米級計量單位:

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 25;    // mm
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.MarginLeft = 25;
renderer.RenderingOptions.MarginRight = 25;

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 25;    // mm
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.MarginLeft = 25;
renderer.RenderingOptions.MarginRight = 25;

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
Dim renderer = New ChromePdfRenderer()

renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
renderer.RenderingOptions.MarginTop = 25 ' mm
renderer.RenderingOptions.MarginBottom = 25
renderer.RenderingOptions.MarginLeft = 25
renderer.RenderingOptions.MarginRight = 25

Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

密碼保護和安全

這兩個庫都支援 PDF 安全功能,但 API 模式不同。

文字控制項實現

using (ServerTextControl tx = new ServerTextControl())
{
    tx.Create();
    tx.Load(html, StreamType.HTMLFormat);

    SaveSettings saveSettings = new SaveSettings();
    saveSettings.UserPassword = "user123";
    saveSettings.MasterPassword = "owner456";

    tx.Save("protected.pdf", StreamType.AdobePDF, saveSettings);
}
using (ServerTextControl tx = new ServerTextControl())
{
    tx.Create();
    tx.Load(html, StreamType.HTMLFormat);

    SaveSettings saveSettings = new SaveSettings();
    saveSettings.UserPassword = "user123";
    saveSettings.MasterPassword = "owner456";

    tx.Save("protected.pdf", StreamType.AdobePDF, saveSettings);
}
Imports ServerTextControlNamespace

Using tx As New ServerTextControl()
    tx.Create()
    tx.Load(html, StreamType.HTMLFormat)

    Dim saveSettings As New SaveSettings()
    saveSettings.UserPassword = "user123"
    saveSettings.MasterPassword = "owner456"

    tx.Save("protected.pdf", StreamType.AdobePDF, saveSettings)
End Using
$vbLabelText   $csharpLabel

IronPDF實現

IronPDF透過SecuritySettings屬性提供精細的安全控制:

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);

pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;

pdf.SaveAs("protected.pdf");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);

pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;

pdf.SaveAs("protected.pdf");
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)

pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.OwnerPassword = "owner456"
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights

pdf.SaveAs("protected.pdf")
$vbLabelText   $csharpLabel

當團隊考慮 TextControl 的替代方案時

以下幾種情況通常會促使開發團隊評估 TextControl 的替代方案:

成本最佳化

TextControl 的授權費用起價為每位開發者 3,398 美元以上,每年強制續約 40%,三年總擁有成本達到每位開發者 5,750 美元以上。 主要專注於 PDF 產生的團隊通常會發現,當存在價格低得多的替代方案時,這種定價很難讓人信服。

硬體相容性問​​題

已記錄的 Intel Iris Xe 顯示卡錯誤會影響第 11 代 Intel 處理器,需要透過登錄機碼變通方法才能部署 TextControl。 IronPDF 基於 Chromium 的渲染技術徹底消除了這些特定於硬體的渲染問題。

PDF優先要求

當主要用途是產生 PDF 而不是編輯文件時,TextControl 的文字處理器架構會引入不必要的複雜性。 對於不需要 DOCX 編輯功能或嵌入式 UI 控制項的應用程式來說,IronPDF 以 PDF 為先的設計理念使其受益匪淺。

現代網路技術集成

TextControl 對 CSS 和JavaScript 的支援有限,這給使用現代前端框架的應用程式帶來了挑戰。 IronPDF 完全支援 HTML5、CSS3 和 ES2024 JavaScript ,確保能夠準確渲染現代 Web 內容。

簡化部署

TextControl 的 ServerTextControl 上下文管理和 UI 元件依賴關係增加了部署的複雜度。 IronPDF是一個獨立的NuGet包,沒有外部相依性或複雜的初始化模式。

範本和郵件合併的替代方案

TextControl 的專有郵件合併系統使用帶有合併欄位的 DOCX 範本。 IronPDF以標準的 HTML 模板方法取代了這種方法:

// Use standard C# string interpolation
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");
// Use standard C# string interpolation
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 {.CustomerName = "John Doe", .InvoiceNumber = "12345", .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

對於更複雜的模板場景, IronPDF可以與Razor引擎和其他模板框架整合。 有關詳細的實作模式,請參閱Razor範本整合指南

.NET相容性和未來適應性

這兩個函式庫都支援目前的.NET實作。 IronPDF持續進行積極開發和定期更新,確保與.NET 8、 .NET 9 以及包括預計於 2026 年推出的.NET 10 在內的未來版本相容。該程式庫在其 API 中全面支援 async/await,符合現代 C# 開發實踐,包括 C# 13 中的功能以及預期的 C# 14 功能。

附加 PDF 功能

除了產生文件之外, IronPDF還提供文件操作功能,從而擴展了其用途:

-合併 PDF將多個文件合併成單一文件 -拆分文檔將頁面範圍提取到單獨的 PDF 文件中 -數位簽章套用加密簽章來驗證文件的真實性 -浮水印透過 HTML/CSS 新增文字或圖像浮水印

結論

儘管TX Text Control和IronPDF都能產生PDF輸出,但它們的主要用途並不相同。 TextControl 是一款功能全面的文件編輯器,具有 DOCX 操作和嵌入式 UI 控件,非常適合需要豐富的文字編輯介面以及文件匯出功能的應用程式。

IronPDF專注於從 HTML 和 Web 內容生成 PDF,為需要將 HTML、URL 或動態生成的內容轉換為 PDF 的開發人員提供了一個簡化的解決方案,而無需完整的文件編輯基礎架構的開銷。 它基於 Chromium 的渲染技術確保了與瀏覽器顯示完全匹配的像素級輸出,而其 API 設計則優先考慮了簡潔性和與標準 Web 開發工作流程的整合。

選擇哪種方案取決於專案需求:如果專案需要全面編輯文件並匯出 PDF,則 TextControl 更合適;如果專案需要直接從 Web 內容產生 PDF,則 IronPDF 更符合其優勢。 對於目前主要使用 TextControl 產生 PDF 的團隊而言,評估IronPDF可能會發現大幅降低成本和簡化部署的機會,同時又不犧牲 PDF 品質。

如需更多實施指導,請查閱IronPDF文件教程,其中涵蓋具體用例和高級功能。