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

C#でXFINIUM.PDFからIronPdfへ移行する方法

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

XFINIUM.PDFは、C#でプログラム的にPDFを作成・編集するための包括的なツールを提供するクロスプラットフォームのPDFライブラリです。 このライブラリは、GeneratorとViewerの2つのエディションを提供していますが、座標ベースのグラフィックス・プログラミングに依存しているため、ドキュメントを多用するアプリケーションを構築する開発チームにとっては大きな課題となります。 すべての要素をピクセル座標を使って手作業で配置しなければならないため、単純な文書のはずが複雑な描画の練習になってしまいます。

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

なぜXFINIUM.PDFから移行するのか

XFINIUM.PDFは、座標ベースのグラフィックスプログラミングに依存する低レベルのPDFライブラリであり、開発者はページ上のすべての要素を手動で配置することを余儀なくされます。 要件が変わると、このアプローチはメンテナンスの悪夢となります。 開発チームが移行を検討する主な理由は次のとおりです:

HTMLサポートなし:XFINIUM.PDFは、HTML/CSSを直接PDFに変換することはできません。 低レベルの描画プリミティブを使用したプログラムによるPDF作成に重点を置いており、広範なHTML-to-PDF機能を必要とするプロジェクトでは十分ではないかもしれません。

座標ベース APIDrawString("text", font, brush, 50, 100)のようなピクセル座標による手動ポジショニングは、ページ上のすべての要素に対して必要です。

手動フォント管理:フォントオブジェクトは、PdfStandardFontPdfBrushのようなクラスを使用して明示的に作成し、管理する必要があります。

CSSスタイリングなし: 最新のWebスタイリングをサポートしていません。 色、フォント、レイアウトは、プログラムのメソッド呼び出しによって手動で処理する必要があります。

JavaScriptレンダリングなし:静的コンテンツのみ。 XFINIUM.PDFは、動的なWebコンテンツのレンダリングやJavaScriptの実行はできません。

複雑なテキストレイアウト:単純な1行テキストを超えるものについては、手作業によるテキストの計測と折り返しの計算が必要です。

限られたコミュニティリソース: 主要なソリューションと比較して、例題やチュートリアルなどのコミュニティが提供するリソースが不足しているため、新規ユーザーが使い始めるのが難しくなります。

核心的な問題: グラフィックス API 対 HTML

XFINIUM.PDFは、ドキュメントデザイナーではなく、グラフィックプログラマーのように考えることを強制します:

// XFINIUM.PDF: Position every element manually
page.Graphics.DrawString("Invoice", titleFont, titleBrush, 50, 50);
page.Graphics.DrawString("Customer:", labelFont, brush, 50, 80);
page.Graphics.DrawString(customer.Name, valueFont, brush, 120, 80);
// ... hundreds of lines for a simple document
// XFINIUM.PDF: Position every element manually
page.Graphics.DrawString("Invoice", titleFont, titleBrush, 50, 50);
page.Graphics.DrawString("Customer:", labelFont, brush, 50, 80);
page.Graphics.DrawString(customer.Name, valueFont, brush, 120, 80);
// ... hundreds of lines for a simple document
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFは使い慣れたHTML/CSSを使用しています:

// IronPDF: Declarative HTML
var html = @"<h1>Invoice</h1><p><b>Customer:</b> " + customer.Name + "</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
// IronPDF: Declarative HTML
var html = @"<h1>Invoice</h1><p><b>Customer:</b> " + customer.Name + "</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFとXFINIUM.PDFの比較:機能比較

アーキテクチャの違いを理解することは、技術的な意思決定者が移行への投資を評価するのに役立ちます:

フィーチャーXFINIUM.PDFIronPDF
HTMLからPDFへHTMLのサポートは限定的で、プログラムによるPDF作成に重点を置いています。包括的なサポートによる完全なHTMLからPDFへの変換
コミュニティ&サポートコミュニティが小さく、利用可能なオンラインリソースが少ない広範なドキュメントとチュートリアルを備えた大規模コミュニティ
ライセンス開発者ベースの商用ライセンス商用
クロスプラットフォーム・サポート強力なクロスプラットフォーム機能クロスプラットフォームにも対応
CSSサポートなし完全なCSS3
JavaScript(ジャバスクリプトなしフルES2024
フレックスボックス/グリッドなしはい
自動レイアウトなしはい
自動改ページなしはい
マニュアルポジショニング必須オプション(CSSポジショニング)
ラーニングカーブ高(座標系)低レベル(HTML/CSS)
コードの正確さ非常に高い低レベル

クイックスタート:XFINIUM.PDFからIronPDFへの移行

これらの基本的なステップを踏めば、すぐにでも移行を開始できます。

ステップ 1: NuGet パッケージを置き換える。

XFINIUM.PDFを削除してください:

# Remove XFINIUM.PDF
dotnet remove package Xfinium.Pdf
# Remove XFINIUM.PDF
dotnet remove package Xfinium.Pdf
SHELL

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

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

ステップ 2: 名前空間の更新

XFINIUM.PDF名前空間をIronPdf名前空間に置き換えてください:

// Before (XFINIUM.PDF)
using Xfinium.Pdf;
using Xfinium.Pdf.Graphics;
using Xfinium.Pdf.Content;
using Xfinium.Pdf.FlowDocument;

// After (IronPDF)
using IronPdf;
// Before (XFINIUM.PDF)
using Xfinium.Pdf;
using Xfinium.Pdf.Graphics;
using Xfinium.Pdf.Content;
using Xfinium.Pdf.FlowDocument;

// 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ライブラリの複雑さの違いを明らかにします。

XFINIUM.PDFのアプローチ:

// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Actions;
using Xfinium.Pdf.FlowDocument;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument document = new PdfFixedDocument();
        PdfFlowDocument flowDocument = new PdfFlowDocument();

        string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        PdfFlowContent content = new PdfFlowContent();
        content.AppendHtml(html);
        flowDocument.AddContent(content);

        flowDocument.RenderDocument(document);
        document.Save("output.pdf");
    }
}
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Actions;
using Xfinium.Pdf.FlowDocument;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument document = new PdfFixedDocument();
        PdfFlowDocument flowDocument = new PdfFlowDocument();

        string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        PdfFlowContent content = new PdfFlowContent();
        content.AppendHtml(html);
        flowDocument.AddContent(content);

        flowDocument.RenderDocument(document);
        document.Save("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFのアプローチ:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

XFINIUM.PDFは、PdfFixedDocumentPdfFlowDocumentPdfFlowContentオブジェクトを作成し、AppendHtml()を呼び出し、フロードキュメントにコンテンツを追加し、固定ドキュメントにレンダリングし、最後に保存する必要があります。 IronPDFはこれを3行に単純化します: レンダラーを作成し、HTMLをレンダリングし、保存します。

高度なHTMLからPDFへのシナリオについては、HTMLからPDFへの変換ガイドをご覧ください。

複数のPDFをマージする

PDFマージは、APIの複雑さの違いを明確に示します。

XFINIUM.PDFのアプローチ:

// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument output = new PdfFixedDocument();

        FileStream file1 = File.OpenRead("document1.pdf");
        PdfFixedDocument pdf1 = new PdfFixedDocument(file1);

        FileStream file2 = File.OpenRead("document2.pdf");
        PdfFixedDocument pdf2 = new PdfFixedDocument(file2);

        for (int i = 0; i < pdf1.Pages.Count; i++)
        {
            output.Pages.Add(pdf1.Pages[i]);
        }

        for (int i = 0; i < pdf2.Pages.Count; i++)
        {
            output.Pages.Add(pdf2.Pages[i]);
        }

        output.Save("merged.pdf");

        file1.Close();
        file2.Close();
    }
}
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument output = new PdfFixedDocument();

        FileStream file1 = File.OpenRead("document1.pdf");
        PdfFixedDocument pdf1 = new PdfFixedDocument(file1);

        FileStream file2 = File.OpenRead("document2.pdf");
        PdfFixedDocument pdf2 = new PdfFixedDocument(file2);

        for (int i = 0; i < pdf1.Pages.Count; i++)
        {
            output.Pages.Add(pdf1.Pages[i]);
        }

        for (int i = 0; i < pdf2.Pages.Count; i++)
        {
            output.Pages.Add(pdf2.Pages[i]);
        }

        output.Save("merged.pdf");

        file1.Close();
        file2.Close();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFのアプローチ:

// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        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;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        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

XFINIUM.PDFは、出力文書を作成し、ファイルストリームを開き、各文書を読み込み、手動でページを繰り返し、1つずつ追加し、保存し、ストリームを閉じる必要があります。 IronPDFは単一のPdfDocument.Merge()メソッドを提供し、すべての複雑さを内部で処理します。

その他のマージ オプションについては、PDF マージ ドキュメントを参照してください。

テキストと画像でPDFを作成する

内容が混在する文書は、基本的なパラダイムの違いを示しています。

XFINIUM.PDFのアプローチ:

// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Graphics;
using Xfinium.Pdf.Core;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument document = new PdfFixedDocument();
        PdfPage page = document.Pages.Add();

        PdfStandardFont font = new PdfStandardFont(PdfStandardFontFace.Helvetica, 24);
        PdfBrush brush = new PdfBrush(PdfRgbColor.Black);

        page.Graphics.DrawString("Sample PDF Document", font, brush, 50, 50);

        FileStream imageStream = File.OpenRead("image.jpg");
        PdfJpegImage image = new PdfJpegImage(imageStream);
        page.Graphics.DrawImage(image, 50, 100, 200, 150);
        imageStream.Close();

        document.Save("output.pdf");
    }
}
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Graphics;
using Xfinium.Pdf.Core;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument document = new PdfFixedDocument();
        PdfPage page = document.Pages.Add();

        PdfStandardFont font = new PdfStandardFont(PdfStandardFontFace.Helvetica, 24);
        PdfBrush brush = new PdfBrush(PdfRgbColor.Black);

        page.Graphics.DrawString("Sample PDF Document", font, brush, 50, 50);

        FileStream imageStream = File.OpenRead("image.jpg");
        PdfJpegImage image = new PdfJpegImage(imageStream);
        page.Graphics.DrawImage(image, 50, 100, 200, 150);
        imageStream.Close();

        document.Save("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFのアプローチ:

// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string imageBase64 = Convert.ToBase64String(File.ReadAllBytes("image.jpg"));
        string html = $@"
            <html>
                <body>
                    <h1>Sample PDF Document</h1>
                    <img src='data:image/jpeg;base64,{imageBase64}' width='200' height='150' />
                </body>
            </html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string imageBase64 = Convert.ToBase64String(File.ReadAllBytes("image.jpg"));
        string html = $@"
            <html>
                <body>
                    <h1>Sample PDF Document</h1>
                    <img src='data:image/jpeg;base64,{imageBase64}' width='200' height='150' />
                </body>
            </html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

XFINIUM.PDFは、文書の作成、ページの追加、フォントとブラシのオブジェクトの作成、特定の座標でのテキストの描画、画像ストリームを開く、PdfJpegImageの作成、寸法を持つ座標での画像の描画、ストリームの終了、保存を必要とします。 IronPDFはbase64画像を埋め込んだ標準的なHTMLを使用しています。

XFINIUM.PDFAPIからIronPDFへのマッピングリファレンス

このマッピングは、APIと同等のものを直接示すことで、移行を加速します:

XFINIUM.PDFIronPDFノート
<コード>PdfFixedDocument</コード<コード>ChromePdfRenderer</コードドキュメントではなく、レンダラーを作成
<コード>PdfPage</コード自動翻訳HTMLコンテンツから作成されたページ
page.Graphics.DrawString()HTMLテキスト要素<p><h1><span>など。
page.Graphics.DrawImage()<img>タグHTML画像
<コード>page.Graphics.DrawLine()</コードCSS borderまたは<hr>を使用してください。HTML/CSSライン
page.Graphics.DrawRectangle()<div>上のCSS borderHTMLボックス
<コード>PdfStandardFont</コードCSS <コード>font-family</コードフォントオブジェクトは不要
<コード>PdfRgbColor</コードCSS <コード>カラー</コード標準CSSカラー
<コード>PdfBrush</コードCSSプロパティ背景、色など
<コード>PdfJpegImage</コード<img>タグとbase64またはファイルパス
document.Save(stream)を実行します。pdf.SaveAs()または pdf.BinaryData複数の出力オプション
<コード>PdfFlowDocument</コード<コード>RenderHtmlAsPdf()</コードHTMLフルサポート
PdfFlowContent.AppendHtml()を使用してください。<コード>RenderHtmlAsPdf()</コード直接HTMLレンダリング

一般的な移行の問題と解決策

課題1: 座標ベースのレイアウト

XFINIUM.PDF:すべて正確なX,Y座標が必要で、手動での位置決めが必要です。

ソリューション: HTML/CSSフローレイアウトを使用する。 絶対位置指定が必要な場合は、CSSを使用してください:

.positioned-element {
    position: absolute;
    top: 100px;
    left: 50px;
}

課題2:フォントオブジェクト管理

XFINIUM.PDF:各フォントのPdfStandardFontまたはPdfUnicodeTrueTypeFontオブジェクトを作成します。

ソリューション: CSS font-familyを使用してください:

<style>
    body { font-family: Arial, sans-serif; }
    h1 { font-family: 'Times New Roman', serif; font-size: 24px; }
</style>
<style>
    body { font-family: Arial, sans-serif; }
    h1 { font-family: 'Times New Roman', serif; font-size: 24px; }
</style>
HTML

課題3: カラーハンドリング

XFINIUM.PDF:色のためのPdfRgbColorPdfBrushオブジェクトを作成します。

解決策:標準的なCSSの色を使用する:

.header { color: navy; background-color: #f5f5f5; }
.warning { color: rgb(255, 0, 0); }
.info { color: rgba(0, 0, 255, 0.8); }

課題4:マニュアルの改ページ

XFINIUM.PDF:Y位置を追跡し、コンテンツがオーバーフローしたときに手動で新しいページを作成します。

ソリューション: IronPDFは自動改ページを処理します。 明示的な制御にはCSSを使用してください:

.section { page-break-after: always; }
.keep-together { page-break-inside: avoid; }

課題5:画像の読み込み

XFINIUM.PDF:ファイルストリームを開き、PdfJpegImageオブジェクトを作成し、座標で描画し、ストリームを閉じます。

ソリューション: ファイルパスまたはbase64データを含むHTML <img>タグを使用してください:

<img src="image.jpg" width="200" height="150" />
<!-- or -->
<img src="data:image/jpeg;base64,..." />
<img src="image.jpg" width="200" height="150" />
<!-- or -->
<img src="data:image/jpeg;base64,..." />
HTML

XFINIUM.PDF移行チェックリスト

マイグレーション前のタスク

コードベースを監査して、すべてのXFINIUM.PDFの使用法を特定してください:

grep -r "using Xfinium.Pdf" --include="*.cs" .
grep -r "Graphics.DrawString\|Graphics.DrawImage\|Graphics.DrawLine" --include="*.cs" .
grep -r "using Xfinium.Pdf" --include="*.cs" .
grep -r "Graphics.DrawString\|Graphics.DrawImage\|Graphics.DrawLine" --include="*.cs" .
SHELL

座標ベースのレイアウトを文書化し、すべてのX,Y位置決め値に注意してください。 フォントと色のオブジェクト(PdfStandardFontPdfRgbColorPdfBrush)を識別します。 PdfFixedDocument.Pages.Add()を使用して、マージされたPDFワークフローをマップします。

コード更新タスク

1.Xfinium.Pdf NuGet パッケージの削除 2.IronPdf NuGetパッケージをインストールする 3.名前空間のインポートをXfinium.PdfからIronPdfに更新してください。 4.DrawString()コールをHTMLテキスト要素に変換する 5.DrawImage()コールをHTMLの<img>タグに変換する。 6.DrawRectangle()DrawLine()を CSS ボーダーに変換する 7.PdfStandardFontをCSSのfont-familyに置き換えてください。 8.PdfRgbColorPdfBrushをCSSカラーに置き換えてください。 9.ページ ループ マージを PdfDocument.Merge() に置き換えてください。 10.起動時にIronPDFライセンスの初期化を追加する

移行後のテスト

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

  • ビジュアル出力を比較し、外観が期待に一致することを確認する。
  • 新しいHTML/CSSアプローチによるテキストレンダリングの検証
  • CSSを使用した画像ポジショニングのチェック
  • 期待どおりに改ページが行われることを確認
  • PDFのセキュリティ設定が正しく適用されていることを確認する
  • すべてのターゲットプラットフォームでテスト

IronPDFに移行する主な利点

XFINIUM.PDFからIronPDFに移行することで、いくつかの重要な利点が得られます:

HTMLベースのコンテンツ作成:ウェブ開発者は、既存のHTMLとCSSのスキルを活用できます。 座標ベースの描画APIを学んだり、フォントやブラシのオブジェクトを管理したりする必要はありません。

自動レイアウト:テキストの折り返し、ページネーション、フローレイアウトは自動的に行われます。 要素の位置や改ページを手動で計算する必要はありません。

最新のCSSサポート:FlexboxとGridレイアウトを含む完全なCSS3。 レスポンシブデザインはPDFに直接翻訳します。

簡素化された PDF 操作: PdfDocument.Merge()のような一般的な操作のための単一メソッド呼び出しが、複雑なページ反復ループを置き換えます。

アクティブ開発:2026年まで.NET 10とC# 14の採用が増加する中、IronPDFの定期的なアップデートは現在と将来の.NETバージョンとの互換性を保証します。

豊富なドキュメント:XFINIUM.PDFの小規模なエコシステムと比較して、包括的なドキュメント、チュートリアル、サポートリソースを持つ大規模なコミュニティ。

結論

XFINIUM.PDFは、強力なクロスプラットフォーム機能を備えた包括的なPDF操作ツールを提供します。 しかし、座標ベースのグラフィックス・プログラミングのアプローチでは、文書生成タスクに不必要な複雑さが生じます。 すべての要素で、手作業による位置決め、フォントオブジェクトの作成、明示的な色管理が必要です。

IronPdfはPDFの生成をグラフィックプログラミングの練習から、慣れ親しんだHTML/CSS開発に変えます。 NuGetパッケージを置き換え、描画コマンドをHTML要素に変換し、スタイリングとレイアウトにCSSを活用します。

IronPDFの無料トライアルで今すぐ移行を開始し、HTMLベースのドキュメント生成のシンプルさを体験してください。

包括的な実装ガイダンスについては、IronPDFドキュメントチュートリアルをご覧ください。

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

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

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