PrinceXML與IronPDF:技術比較指南
當 .NET 開發人員評估 PDF 生成程式庫時,兩種解決方案經常在企業討論中出現:TX Text Control 和 IronPDF。 雖然兩者都可以產生 PDF 輸出,但它們代表了根本不同的架構哲學。 這項技術比較檢查了這兩個程式庫,以幫助架構師和開發人員為其.NET應用程式做出明智的決策。
了解 TX Text Control
TX Text Control 是一個全面的文件編輯元件,著重於具備嵌入式 UI 控制的 DOCX 編輯功能。 PDF 生成作為其更廣泛的文件處理架構中的次要功能存在。 該平台提供廣泛的文件編輯功能,適合需要豐富文字編輯介面的應用程式。
然而,這個全面的性質引入了開發團隊應仔細評估的考慮因素:
- 昂貴的授權: TX Text Control 按商業授權運行,每位開發者起價為 $3,398+,且要求每年強制續約 40% 才能維持更新存取
- PDF 作為次要功能: 核心架構優先考慮文字處理而非 PDF 生成,將 PDF 輸出視為附加功能
- 已知的硬體問題: 已記錄的 Intel Iris Xe Graphics 渲染錯誤,影響第 11 代 Intel 處理器,需要註冊表解決方式
- 臃腫的依賴: 包含文件編輯 UI 元件,對於以 PDF 為重點的工作流程可能是不必要的
- 複雜的 API: 需要 ServerTextControl 上下文管理和選擇模式模式
了解IronPDF
IronPDF 採取截然不同的方法,專注於 PDF 生成,而不新增 UI 元件或 DOCX 編輯工具。 該程式庫以精簡的量身定制設計脫穎而出,專門優化 PDF 生成和操作,使其成為高效的 PDF 首要架構工具。
IronPDF的關鍵特性包括:
- PDF 首要架構: 從頭開始設計以生成 PDF,提供強大的文件建立和渲染能力
- Chromium 渲染引擎: 利用現代 HTML5 和 CSS3 標準,完全支援 JavaScript 執行
- 成本效益: 一次性授權模式消除了持續的訂閱成本
- 已證明的穩定性: 在各種硬體配置上的可靠性記錄,避免平臺特定的渲染問題
- 簡單整合: 不需要上下文管理或複雜的初始化模式
價格比較
TextControl 和IronPDF之間的授權結構揭示了隨著時間的推移而顯著的成本差異:
| 方面 | TX Text Control | IronPDF |
|---|---|---|
| 基本授權 | 每位開發者 $3,398+ | $2,998 每位開發者一次性 |
| 年度續約 | 40% 強制 | 可選支援 |
| 4人團隊 (第1年) | 約 $6,749 | 約 $2,996 |
| 總計3年成本 | 每位開發者 $5,750+ | $2,998 每位開發者 |
| UI 元件 | 捆綁 (可能臃腫) | 僅以 PDF 為重點 |
| 伺服器運行時 | 額外授權 | 包含 |
功能比較
下面的表格突出顯示了 TextControl 和IronPDF在關鍵維度上的技術差異:
| 功能 | TX Text Control | IronPDF |
|---|---|---|
| 主要焦點 | DOCX 編輯 | PDF 生成 |
| PDF 質量 | 基本,附加功能 | 高,核心功能 |
| HTML到PDF | 是 (次要) | 是 (主要) |
| CSS支援 | 有限 | 完全支持 CSS3 |
| JavaScript 執行 | 有限 | 完整的ES2024 |
| URL 至 PDF | 需要複雜設置 | 原生支持 |
| 頁眉/頁腳 | 複雜API | 簡單的基於HTML的 |
| 郵件合併 | 專有系統 | HTML 範本 |
| PDF/A合規性 | 是 | 是 |
| 密碼保護 | 是 | 是 |
| 數位簽名 | 是 | 是 |
| 合併 PDF s | 有限 | 支持 |
| 分割 PDF s | 有限 | 支持 |
| 水印 | 複雜的實作 | 簡單的HTML/CSS |
| 硬體相容性 | 已知的 Intel Iris 問題 | 在所有裝置上穩定 |
| 上下文管理 | 需要 | 無需 |
| 跨平台 | 以Windows為主 | 是 |
API 架構差異
TextControl 和IronPDF之間的關鍵區別在於它們的 API 設計哲學和初始化模式。
TextControl 方法
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這種模式需要了解 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有關HTML轉換能力的全面指南,請參閱 HTML到PDF教程。
API映射參考
評估從TextControl轉向IronPDF的團隊會發現此映射有助於理解概念等價:
| TX Text Control | 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 實現
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 NamespaceIronPDF實施
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 NamespacePdfDocument.Merge 方法 接受任意數量的文件,返回一個新的合併 PDF,而無需上下文管理或手動字節陣列處理。
頁眉、頁腳和頁碼
使用動態頁碼新增頁眉和頁腳顯示出顯著的 API 複雜性差異。
TextControl 實現
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 NamespaceIronPDF實施
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對於更複雜的頁眉設計,IronPDF 也支援接受完整 HTML 和 CSS 樣式的 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
}URL 轉 PDF
將即時網頁轉換為 PDF 揭示了每個程式庫如何處理網頁內容的架構差異。
TextControl 方法
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 UsingIronPDF方法
IronPDF 提供原生的 URL 渲染,透過其 Chromium 引擎執行 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")RenderUrlAsPdf 方法 捕捉完整的渲染頁面,包括動態生成的內容,非常適合使用 React、Angular 或 Vue.js 等框架構建的現代 Web 應用程式。
頁面設置與配置
配置頁面尺寸、邊距和方向顯示了不同的文件設置方法。
TextControl 實現
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 UsingIronPDF實施
IronPDF 將頁面設置集中在 RenderingOptions 中,具有直觀的毫米為基礎的測量單位:
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")密碼保護與安全性
兩個程式庫都支援 PDF 安全功能,但 API 模式不同。
TextControl 實現
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 UsingIronPDF實施
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")當團隊考慮 TextControl 的替代方案時
幾個場景通常促使開發團隊評估 TextControl 的替代方案:
成本優化
由於 TextControl 授權起價為每位開發者 $3,398+,並且需要 40% 的年度續約,三年的總擁有成本超過每位開發者 $5,750+。 主要專注於 PDF 生成的團隊通常發現當替代方案存在時,很難證明這一價格合理,因為替代方案的成本明顯較低。
硬體相容性考量
已記錄的 Intel Iris Xe Graphics 錯誤影響第11代 Intel處理器,TextControl 部署需要註冊表解決方法。IronPDF的基於Chromium的渲染完全消除了這些硬體特定的渲染問題。
PDF 首要需求
當 PDF 生成而非文件編輯是主要使用情境時,TextControl 的文字處理器架構引入了不必要的複雜性。 不需要 DOCX 編輯能力或嵌入式 UI 控件的應用程式受益於IronPDF的專注 PDF 首要設計。
現代網路技術整合
TextControl 對 CSS 和 JavaScript 的有限支援為使用當代前端框架的應用程式帶來挑戰。IronPDF提供完整的HTML5、CSS3和ES2024 JavaScript 支援,以確保現代網頁內容的準確渲染。
簡化部署
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 = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("invoice.pdf")對於更複雜的模板情境,IronPDF 整合了 Razor 引擎和其他模板框架。 請參閱 Razor 模板整合指南 ,以獲取詳細的實施模式。
.NET相容性和未來準備
兩個程式庫都支持當前的.NET實施。IronPDF保持積極地開發,提供定期更新,確保與 .NET 8、.NET 9 和即將於 2026 年推出的 .NET 10 相容。 該程式庫的 async/await 支援貫穿其 API,符合現代 C# 開發 做法,包括 C# 13 可用的功能和預期的 C# 14 功能。
額外的 PDF 功能
除了生成之外,IronPDF還提供文件操作功能,擴展了其效用:
結論
儘管 TX Text Control 和IronPDF均可生成 PDF 輸出,但它們服務的主要目的不同。 TextControl 作為全面的文件編輯器而優秀,具有 DOCX 操作和嵌入式 UI 控件,非常適合需要豐富文字編輯介面以及文件匯出功能的應用程式。
IronPDF 專注於從 HTML 和網頁內容生成 PDF,為需要從 HTML、URL 或動態生成內容轉換為 PDF 的開發人員提供精簡的解決方案,無需全套的文件編輯基礎設施。 其基於Chromium的渲染確保像素完美的輸出匹配瀏覽器顯示,而其API設計則優先考慮簡單性和與標準Web開發工作流程整合。
它們之間的選擇取決於專案需求:全面的文件編輯與PDF匯出偏好TextControl,而簡單地從網頁內容生成PDF則符合IronPDF的優勢。 對於目前主要使用 TextControl 進行 PDF 生成的團隊而言,評估IronPDF可能會發現顯著的成本降低和簡化的部署機會,而不需犧牲 PDF 的質量。
如需額外的實施指南,請探索IronPDF文件和教程,涵蓋特定用例和高級功能。
