C#でTextControlからIronPDFに移行する方法
TX Text Controlは、.NETエコシステムにおける包括的なドキュメントエディターコンポーネントとしての地位を確立しており、UIコントロールを組み込んだ堅牢なDOCX編集機能を提供しています。 しかし、文書の完全な編集ではなく、PDFの生成が主な要件である開発チームにとって、TextControlのアーキテクチャは、ライセンスコスト、複雑さ、実行時の依存関係において、大きなオーバーヘッドをもたらします。
このガイドでは、TextControlからIronPDFへの完全な移行経路を、移行を検討しているプロ for .NET開発者のために、ステップバイステップの手順、コード比較、実用的な例で説明します。
なぜTextControlから移行するのか
通常、TextControlからの移行は、ツールを実際の要件に適合させることが中心になります。 TX Text Controlは基本的にドキュメントエディタで、PDF生成は二次的な機能として扱われます。 開発チームが移行を検討する主な理由は次のとおりです:
高価なライセンス: TextControl は、開発者 1 人あたり年間最低 3,398 ドルの商用ライセンスで動作します。 4人のチームで年間約6,749ドル、サーバーデプロイメント・ランタイムライセンスの追加費用が見込まれます。 更新費用は毎年40%で、更新へのアクセスを維持するために必須です。
後付けの PDF:コアとなるアーキテクチャは PDF ではなくワードプロセッサです。 PDFの生成は可能ですが、中心的な機能ではなく付加的な機能であるため、出力品質は最適ではありません。
ハードウェア バグ: Intel Iris Xe グラフィックス バグは、新しい Intel プロセッサ (第 11 世代) でのドキュメント レンダリングに影響し、解決するにはレジストリの回避策が必要になります。
肥大化した依存関係: TextControl には、純粋に PDF 生成に重点を置いている場合には必要のないドキュメント編集 UI コンポーネントが含まれています。
ワードプロセッサ アーキテクチャ:最新の Web アプリケーションで要求される HTML から PDF へのワークフローには最適化されていません。
複雑な API: ServerTextControl のコンテキスト管理および選択モデルにより、単純な PDF 生成タスクに不必要な複雑さが加わります。
コスト比較
| アスペクト | TXテキストコントロール | IronPDF |
|---|---|---|
| 基本ライセンス | $3,398+ | 大幅値下げ |
| 年間更新 | 40% 必須 | オプションサポート |
| 開発者あたり | はい | はい |
| UIコンポーネント | バンドル(肥大化) | PDFフォーカス |
| 3年間の総費用 | $5,750+ | はるかに低い |
IronPdfとTextControlの比較:機能の比較
アーキテクチャの違いを理解することは、技術的な意思決定者が移行への投資を評価するのに役立ちます:
| フィーチャー | TXテキストコントロール | IronPDF |
|---|---|---|
| 主な対象 | DOCX編集 | PDF生成 |
| ライセンス費用 | 開発者 1 名あたり年間 3,398 ドル | 開発者1名につき1回のみ749ドル |
| PDF品質 | 基本的なアドオン機能 | 高いコア機能 |
| ハードウェアの互換性 | インテル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: 名前空間の更新
TextControl名前空間をIronPdf名前空間に置き換えてください:
// 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
ステップ 3: ライセンスの初期化
アプリケーション起動時のライセンス初期化を追加します:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
コード移行の例
HTML を PDF に変換する
最も一般的な使用例は、これら for .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);
}
}
}
}
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
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
TextControl バージョンでは、ServerTextControl インスタンスを作成し、Create() を呼び出してコンテキストを初期化し、StreamType.HTMLFormat を使用して HTML を読み込み、StreamType.AdobePDF を使用して保存する必要があります。 using ブロックは、リソースを適切に処分するために必須です。
IronPDFはコンテキスト管理を完全に排除します。 ChromePdfRenderer には初期化の儀式は必要ありません。作成して HTML をレンダリングし、保存するだけです。 このようにアーキテクチャを単純化することで、認識負荷や潜在的なリソース管理のバグを軽減します。
高度なHTMLからPDFへのシナリオについては、HTMLからPDFへの変換ガイドをご覧ください。
複数のPDFをマージする
PDFのマージは、これらのライブラリ間のもう1つの重要な複雑性の違いを明らかにします。
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
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
TextControl では、ファイルをバイト配列に読み込み、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);
}
}
}
}
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
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
TextControl では、特定の列挙型を持つオブジェクトを作成し、ドキュメント セクションにアクセスしてコレクションに追加する必要があります。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
};
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
}
ヘッダーとフッターのオプションについては、headers and footers documentationをご覧ください。
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) |
tx.Save(path, StreamType.AdobePDF) |
pdf.SaveAs(path) |
SaveSettings.PDFAConformance |
RenderingOptions.PdfAFormat |
DocumentServer.MailMerge |
HTMLテンプレート + Razor |
DocumentTarget.HeadersAndFooters |
HtmlHeaderFooter |
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)
課題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);
Dim pdf = renderer.RenderHtmlAsPdf(html)
課題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");
Option Strict On
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 = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("invoice.pdf")
課題4: Intel Iris Xe グラフィックスのバグ
TextControlは、第11世代のIntelプロセッサーでレンダリングの問題が文書化されており、レジストリの回避策が必要です。
ソリューション: 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" .
HTMLに変換するためのメールマージテンプレートを文書化すること。 HtmlHeaderFooter を使用した実装のヘッダー/フッター要件に注意してください。 代替ソリューションが必要と思われるDOCX編集機能を特定してください。
コード更新タスク
1.TX Text Control NuGetパッケージの削除 2.IronPdf NuGetパッケージをインストールする
ServerTextControlコンテキスト管理を削除します (Create()呼び出しはなくなります)StreamType.HTMLFormatロードをRenderHtmlAsPdfに変換します。 5.文字列補間またはRazorを使用したメールマージからHTMLテンプレートへの変換- ヘッダー/フッターを更新して、
HtmlHeaderFooterまたはAddTextFooterを使用します。 RenderingOptionsを使用してページ設定を簡素化します。 8.起動時のライセンス初期化を追加
移行後のテスト
移行後、これらの点を検証してください:
- すべてのドキュメントテンプレートが正しくレンダリングされることをテスト
- 必要であれば、PDF/Aコンプライアンスを検証すること。
- パスワード保護機能のテスト
- すべてのページにヘッダー/フッターが表示されていることを確認する。
- Intel第11世代ハードウェアで確認-IronPDFでレジストリを回避する必要はもうありません。
IronPDFに移行する主な利点
TextControlからIronPdfに移行することで、PDF生成に特化したチームにはいくつかの利点があります:
PDF ファースト アーキテクチャ: IronPDFは PDF 生成に特化しており、最新の HTML5 および CSS3 標準を活用して強力なドキュメント作成およびレンダリング機能を提供します。
コスト効率:IronPDFの 1 回限りの価格設定により、特に年間 40% の更新が必須の TextControl のサブスクリプションベースのサービスと比較すると、長期的には大幅に安くなります。
実証済みの安定性:さまざまなハードウェアにわたる信頼性が文書化されており、Intel グラフィックスを使用した TextControl で発生するような問題を回避します。
コンテキスト管理なし: ServerTextControl 作成セレモニーとリソース破棄パターンを排除します。 IronPDFのステートレスレンダリングはコードをシンプルにし、潜在的なメモリーリークを減らします。
最新のレンダリング エンジン: .NET 10 と C# 14 の採用が 2026 年まで増加するにつれて、IronPDF の Chromium ベースのレンダリングにより、現在および将来の Web 標準との互換性が確保されます。

