フッターコンテンツにスキップ
移行ガイド

C#でTextControlからIronPDFに移行する方法

TextControlからIronPDFへの移行:完全なC#開発者ガイド

TX Text Controlは、.NETエコシステムにおける包括的なドキュメントエディターコンポーネントとしての地位を確立しており、UIコントロールを組み込んだ堅牢なDOCX編集機能を提供しています。 しかし、文書の完全な編集ではなく、PDFの生成が主な要件である開発チームにとって、TextControlのアーキテクチャは、ライセンスコスト、複雑さ、実行時の依存関係において、大きなオーバーヘッドをもたらします。

このガイドでは、TextControlからIronPDFへの完全な移行経路を、移行を検討しているプロの.NET開発者のために、ステップバイステップの手順、コード比較、実用的な例で説明します。

なぜTextControlから移行するのか

通常、TextControlからの移行は、ツールを実際の要件に適合させることが中心になります。 TX Text Controlは基本的にドキュメントエディタで、PDF生成は二次的な機能として扱われます。 開発チームが移行を検討する主な理由は次のとおりです:

高価なライセンス:TextControlは、開発者1人あたり年間最低3,398ドルの商用ライセンスで動作します。 4人のチームで年間約6,749ドル、サーバーデプロイメント・ランタイムライセンスの追加費用が見込まれます。 更新費用は毎年40%で、更新へのアクセスを維持するために必須です。

後付けのPDF:コアとなるアーキテクチャはワープロであり、PDFではありません。 PDFの生成は可能ですが、中心的な機能ではなく付加的な機能であるため、出力品質は最適ではありません。

ハードウェアのバグ: インテル Iris Xe グラフィックスのバグは、新しいインテル プロセッサー (第 11 世代) のドキュメント レンダリングに影響します。

Bloated Dependencies: TextControlには、ドキュメント編集UIコンポーネントが含まれていますが、純粋にPDF生成に重点を置くのであれば、必要ないかもしれません。

ワードプロセッサーアーキテクチャ: 最新の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
SHELL

IronPDFをインストールします:

# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
SHELL

ステップ 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;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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, 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.com
$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");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

TextControlバージョンでは、ServerTextControlインスタンスを作成し、Create()を呼び出してコンテキストを初期化し、StreamType.HTMLFormatでHTMLを読み込み、StreamType.AdobePDFで保存する必要があります。 usingブロックは、適切なリソース処理のために必須です。

IronPDFはコンテキスト管理を完全に排除します。 ChromePdfRendererは初期化セレモニーを必要としません。 このようにアーキテクチャを単純化することで、認識負荷や潜在的なリソース管理のバグを軽減します。

高度な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);
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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);
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

TextControl では、特定の HeaderFooterType 列挙型を持つ HeaderFooter オブジェクトを作成し、textControl.Sections[0] を通じてドキュメント セクションにアクセスし、HeadersAndFooters コレクションに追加する必要があります。 IronPDFはシンプルなプレースホルダー構文で直接AddTextHeaderAddTextFooterメソッドを提供します。

完全なスタイルコントロールが可能な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
$vbLabelText   $csharpLabel

ヘッダーとフッターのオプションについては、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)のようにします。URLサポート
tx.Save(path, StreamType.AdobePDF).pdf.SaveAs(path)のようにします。簡単な保存
SaveSettings.PDFAConformance<コード>RenderingOptions.PdfAFormat</コードPDF/A
DocumentServer.MailMergeHTMLテンプレート + 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
$vbLabelText   $csharpLabel

課題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
$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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

課題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" .
SHELL

HTMLに変換するためのメールマージテンプレートを文書化すること。 HtmlHeaderFooterで実装するためのヘッダー/フッターの要件に注意してください。 代替ソリューションが必要と思われるDOCX編集機能を特定してください。

コード更新タスク

1.TX Text Control NuGetパッケージの削除 2.IronPdf NuGetパッケージをインストールする 3.ServerTextControlコンテキスト管理を削除します (Create()コールはなくなります)。 4.StreamType.HTMLFormat<//code> のロードを RenderHtmlAsPdf<//code> に変換してください。 5.文字列補間またはRazorを使用したメールマージからHTMLテンプレートへの変換 6.HtmlHeaderFooterまたはAddTextHeader/AddTextFooterを使用するようにヘッダー/フッターを更新してください。 7.RenderingOptionsを使用したページ設定の簡素化 8.起動時のライセンス初期化を追加

移行後のテスト

移行後、これらの点を検証してください:

  • すべてのドキュメントテンプレートが正しくレンダリングされることをテスト
  • 必要であれば、PDF/Aコンプライアンスを検証すること。
  • パスワード保護機能のテスト
  • すべてのページにヘッダー/フッターが表示されていることを確認する。
  • Intel第11世代ハードウェアで確認-IronPDFでレジストリを回避する必要はもうありません。

IronPDFに移行する主な利点

TextControlからIronPdfに移行することで、PDF生成に特化したチームにはいくつかの利点があります:

PDFファーストのアーキテクチャ: IronPDFはPDF生成に特化しており、最新のHTML5とCSS3標準を活用した堅牢なドキュメント作成とレンダリング機能を提供します。

コスト効率: IronPDFは1回限りの価格設定なので、特にTextControlの年間40%の更新が義務付けられているサブスクリプションベースのサービスと比べると、長期的にはかなり安くなります。

実証された安定性:さまざまなハードウェアにわたって信頼性を文書化し、IntelグラフィックスでTextControlが直面したような問題を回避します。

コンテキスト管理なし: ServerTextControlの作成式とリソースの廃棄パターンをなくします。 IronPDFのステートレスレンダリングはコードをシンプルにし、潜在的なメモリーリークを減らします。

最新のレンダリングエンジン:.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ドキュメントチュートリアルをご覧ください。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。