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

C#でEO.PdfからIronPDFに移行する方法

EO.Pdfには、開発チームを代替案の評価に駆り立てるような、アーキテクチャ上の課題がいくつかあります。 これらの問題を理解することは、移行戦略を計画する上で不可欠です。

EO.Pdfの問題について

  1. 126 MB という巨大なパッケージ サイズ: EO.Pdf には独自の Chromium エンジンがバンドルされており、展開フットプリントは 126 MB になります。 これはDockerイメージを膨らませ、CI/CDパイプラインを遅くし、インフラコストを増加させます。

2.レガシー アーキテクチャの障害: EO.Pdf は、Chromium に移行する前は、Internet Explorer のレンダリング エンジン上に構築されていました。 このレガシーには、IE時代からの互換性の問題、API設計の技術的負債、バージョン間の一貫性のない動作などがあります。

  1. Windows 中心の設計: "クロスプラットフォーム"として宣伝されているにもかかわらず、EO.Pdf の Linux および macOS のサポートは制限されています。 多くの開発者が、Windows 以外のデプロイメントに関する問題を報告しています。

4.静的グローバル オプション: EO.Pdf は構成に静的HtmlToPdf.Optionsを使用しますが、これはスレッドセーフではなく、マルチテナント Web アプリケーションでは問題が発生します。

5.ライセンスあたり 799 ドル:開発者ライセンスあたり 799 ドルという EO.Pdf は、同等またはより優れた機能を提供する代替製品と比較して高価です。

アーキテクチャの比較

アスペクトEO.PdfIronPDF
パッケージサイズ126MB最適化 (~50MB)
レガシーな問題IEの移行荷物クリーンでモダンなコードベース
プラットフォームサポートWindowsに特化真のクロスプラットフォーム
コンフィギュレーション静的/グローバル(スレッドセーフではない)インスタンスベース、スレッドセーフ
APIデザイン混合(HtmlToPdf + ACM)統一された一貫性のある
ドキュメント制限的包括的なチュートリアル
モダン.NET.NET 標準.NET 6/7/8/9+ ネイティブ
非同期サポートについて制限的完全なasync/await

主な移行のメリット

1.フットプリントが50%小さくなる: IronPDFの最適化されたChromiumパッケージ 2.真のクロスプラットフォーム: Windows、Linux、macOS、Dockerで同じように動作します 3.スレッドセーフ構成:インスタンスベースのレンダラーオプション 4.モダンAPI:一貫性のある直感的なメソッド名 5.より充実したドキュメント:豊富なチュートリアルと例

移行前の準備

前提条件

あなたの環境がこれらの要件を満たしていることを確認してください:

  • .NET Framework 4.6.2+または.NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+またはC#拡張機能付きVS Code
  • NuGetパッケージマネージャへのアクセス
  • IronPDFライセンスキー (ironpdf.com にて無料トライアル可能)

EO.Pdfの使用法を監査する

ソリューションディレクトリで以下のコマンドを実行し、すべてのEO.Pdf参照を特定します:

# Find all EO.Pdf references
grep -r "EO.Pdf\|HtmlToPdf\|AcmRender\|PdfDocument" --include="*.cs" .

# Check NuGet packages
dotnet list package | grep -i "EO.Pdf"
# Find all EO.Pdf references
grep -r "EO.Pdf\|HtmlToPdf\|AcmRender\|PdfDocument" --include="*.cs" .

# Check NuGet packages
dotnet list package | grep -i "EO.Pdf"
SHELL

一般的なEO.Pdfの名前空間

  • EO.Pdf<//code> - コアHTMLからPDFへ
  • EO.Pdf.Acm<//code> - アドバンストコンテンツモデル(ACM)
  • EO.Pdf.Contents - 低レベルのコンテンツ操作
  • EO.Pdf.Drawing<//code> - グラフィックス操作

コアパターンの変更を理解する

EO.PdfとIronPDFの最も重要なアーキテクチャの違いはコンフィギュレーションスコープです。 EO.Pdfは、すべての変換に影響するグローバルオプションを持つ静的メソッドを使用しています。これは、ウェブアプリケーションでスレッドセーフの問題を引き起こすパターンです。 IronPDFはローカルオプションを持つインスタンスベースのレンダラーを使用し、各変換が分離されていることを保証します。

ステップごとの移行プロセス

ステップ 1: NuGet パッケージを更新する。

EO.Pdfを削除し、IronPdfをインストールしてください:

# Remove EO.Pdf
dotnet remove package EO.Pdf

# Install IronPDF
dotnet add package IronPdf
# Remove EO.Pdf
dotnet remove package EO.Pdf

# Install IronPDF
dotnet add package IronPdf
SHELL

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

EO.Pdf名前空間をIronPDF.Pdfに置き換えてください:

// Remove these
using EO.Pdf;
using EO.Pdf.Acm;

// Add this
using IronPdf;
// Remove these
using EO.Pdf;
using EO.Pdf.Acm;

// Add this
using IronPdf;
$vbLabelText   $csharpLabel

ステップ 3: ライセンスの設定

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
$vbLabelText   $csharpLabel

完全な API 移行のリファレンス

コア クラス マッピング

EO.PdfクラスIronPDF 同等物ノート
<コード>HtmlToPdf</コード<コード>ChromePdfRenderer</コードインスタンスベース
<コード>PdfDocument</コード<コード>PdfDocument</コード似ているが異なる手法
<コード>HtmlToPdfOptions</コード<コード>ChromePdfRenderOptions</コードRenderingOptions経由
<コード>AcmRender</コード不要代わりにHTML/CSSを使用してください
<コード>AcmText</コードHTML <span><p>
<コード>AcmBlock</コードHTML <コード>
</コード

メソッドマッピング

EO.PdfメソッドIronPDF メソッドノート
<コード>HtmlToPdf.ConvertHtml(html, path)renderer.RenderHtmlAsPdf(html) then SaveAs(path).IronPDFの2ステップ
<コード>HtmlToPdf.ConvertUrl(url, path)renderer.RenderUrlAsPdf(url) then SaveAs(path).
PdfDocument.Save(パス)pdf.SaveAs(path)のようにします。
new PdfDocument(path).PdfDocument.FromFile(パス)静的ファクトリ
doc.Append(other)を追加します。PdfDocument.Merge(doc1, doc2).静的マージ方式

オプション マッピング

EO.PdfオプションIronPDF レンダリングオプションノート
Options.PageSize = PdfPageSizes.A4.PaperSize = PdfPaperSize.A4.
Options.OutputArea<//code> (RectangleF)MarginTopMarginBottomなど。mmの個々のプロパティ

コード移行の例

HTMLからPDFへの変換

基本的なHTMLからPDFへの変換は、静的メソッドからインスタンスベースのレンダリングへの移行を示しています。

EO.Pdfの実装:

// NuGet: Install-Package EO.Pdf
using EO.Pdf;
using System;

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

        HtmlToPdf.ConvertHtml(html, "output.pdf");

        Console.WriteLine("PDF created successfully!");
    }
}
// NuGet: Install-Package EO.Pdf
using EO.Pdf;
using System;

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

        HtmlToPdf.ConvertHtml(html, "output.pdf");

        Console.WriteLine("PDF created successfully!");
    }
}
$vbLabelText   $csharpLabel

IronPDFの実装:

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

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

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

        Console.WriteLine("PDF created successfully!");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

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

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

        Console.WriteLine("PDF created successfully!");
    }
}
$vbLabelText   $csharpLabel

IronPDFの2段階パターン(レンダリングしてから保存)は、保存する前にPdfDocumentオブジェクトにアクセスして追加操作を行うことができます。 その他のオプションについては、HTML to PDF documentationを参照してください。

URLからPDFへの変換

EO.Pdfの実装:

// NuGet: Install-Package EO.Pdf
using EO.Pdf;
using System;

class Program
{
    static void Main()
    {
        string url = "https://www.example.com";

        HtmlToPdf.ConvertUrl(url, "webpage.pdf");

        Console.WriteLine("PDF from URL created successfully!");
    }
}
// NuGet: Install-Package EO.Pdf
using EO.Pdf;
using System;

class Program
{
    static void Main()
    {
        string url = "https://www.example.com";

        HtmlToPdf.ConvertUrl(url, "webpage.pdf");

        Console.WriteLine("PDF from URL created successfully!");
    }
}
$vbLabelText   $csharpLabel

IronPDFの実装:

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

class Program
{
    static void Main()
    {
        string url = "https://www.example.com";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf(url);
        pdf.SaveAs("webpage.pdf");

        Console.WriteLine("PDF from URL created successfully!");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        string url = "https://www.example.com";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf(url);
        pdf.SaveAs("webpage.pdf");

        Console.WriteLine("PDF from URL created successfully!");
    }
}
$vbLabelText   $csharpLabel

IronPdfのRenderUrlAsPdfは完全なJavaScript実行とモダンなCSSサポートを提供します。 その他のオプションについては、URL to PDF documentationを参照してください。

カスタム設定の HTML ファイル

この例では、EO.PdfのOutputAreaがインチであるのに対して、IronPDFの各マージンプロパティはミリメートルであるという設定パターンの決定的な違いを示しています。

EO.Pdfの実装:

// NuGet: Install-Package EO.Pdf
using EO.Pdf;
using System;

class Program
{
    static void Main()
    {
        HtmlToPdfOptions options = new HtmlToPdfOptions();
        options.PageSize = PdfPageSizes.A4;
        options.OutputArea = new RectangleF(0.5f, 0.5f, 7.5f, 10.5f);

        HtmlToPdf.ConvertUrl("file:///C:/input.html", "output.pdf", options);
        Console.WriteLine("PDF with custom settings created.");
    }
}
// NuGet: Install-Package EO.Pdf
using EO.Pdf;
using System;

class Program
{
    static void Main()
    {
        HtmlToPdfOptions options = new HtmlToPdfOptions();
        options.PageSize = PdfPageSizes.A4;
        options.OutputArea = new RectangleF(0.5f, 0.5f, 7.5f, 10.5f);

        HtmlToPdf.ConvertUrl("file:///C:/input.html", "output.pdf", options);
        Console.WriteLine("PDF with custom settings created.");
    }
}
$vbLabelText   $csharpLabel

IronPDFの実装:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        renderer.RenderingOptions.MarginLeft = 20;
        renderer.RenderingOptions.MarginRight = 20;

        var pdf = renderer.RenderHtmlFileAsPdf("C:/input.html");
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF with custom settings created.");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        renderer.RenderingOptions.MarginLeft = 20;
        renderer.RenderingOptions.MarginRight = 20;

        var pdf = renderer.RenderHtmlFileAsPdf("C:/input.html");
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF with custom settings created.");
    }
}
$vbLabelText   $csharpLabel

単位変換に注意してください:EO.PdfはOutputAreaでインチを使っていますが、IronPdfはミリを使っています。 変換にはinches × 25.4 = mm<//code>. その他のオプションについては、rendering options documentationを参照してください。

複数のPDFをマージする

PDFのマージはEO.PdfのAppendループパターンとIronPDFの静的なMergeメソッドの違いを示しています。

EO.Pdfの実装:

// NuGet: Install-Package EO.Pdf
using EO.Pdf;
using System;

class Program
{
    static void Main()
    {
        PdfDocument doc1 = new PdfDocument("file1.pdf");
        PdfDocument doc2 = new PdfDocument("file2.pdf");

        PdfDocument mergedDoc = new PdfDocument();
        mergedDoc.Append(doc1);
        mergedDoc.Append(doc2);

        mergedDoc.Save("merged.pdf");

        Console.WriteLine("PDFs merged successfully!");
    }
}
// NuGet: Install-Package EO.Pdf
using EO.Pdf;
using System;

class Program
{
    static void Main()
    {
        PdfDocument doc1 = new PdfDocument("file1.pdf");
        PdfDocument doc2 = new PdfDocument("file2.pdf");

        PdfDocument mergedDoc = new PdfDocument();
        mergedDoc.Append(doc1);
        mergedDoc.Append(doc2);

        mergedDoc.Save("merged.pdf");

        Console.WriteLine("PDFs merged successfully!");
    }
}
$vbLabelText   $csharpLabel

IronPDFの実装:

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

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("file1.pdf");
        var pdf2 = PdfDocument.FromFile("file2.pdf");

        var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
        merged.SaveAs("merged.pdf");

        Console.WriteLine("PDFs merged successfully!");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("file1.pdf");
        var pdf2 = PdfDocument.FromFile("file2.pdf");

        var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
        merged.SaveAs("merged.pdf");

        Console.WriteLine("PDFs merged successfully!");
    }
}
$vbLabelText   $csharpLabel

IronPdfの静的なMergeメソッドはドキュメントのコレクションを受け入れ、複数のドキュメントのマージを簡素化します。 コンストラクタ (new PdfDocument(path)) から静的ファクトリ (PdfDocument.FromFile(path)) への変更に注意してください。 その他のオプションについては、 PDF 結合のドキュメントを参照してください。

重要な移行に関する注意事項

マージン単位の変換

EO.PdfはOutputAreaでインチを使用しています。 IronPDFはミリメートルを使用しています。 変換にはinches × 25.4 = mm<//code> を使用して変換します。

// EO.Pdf - 0.5 inch margins
options.OutputArea = new RectangleF(0.5f, 0.5f, 7.5f, 10.5f);

//IronPDF- equivalent in millimeters (0.5" = 12.7mm)
renderer.RenderingOptions.MarginTop = 12.7;
renderer.RenderingOptions.MarginBottom = 12.7;
renderer.RenderingOptions.MarginLeft = 12.7;
renderer.RenderingOptions.MarginRight = 12.7;
// EO.Pdf - 0.5 inch margins
options.OutputArea = new RectangleF(0.5f, 0.5f, 7.5f, 10.5f);

//IronPDF- equivalent in millimeters (0.5" = 12.7mm)
renderer.RenderingOptions.MarginTop = 12.7;
renderer.RenderingOptions.MarginBottom = 12.7;
renderer.RenderingOptions.MarginLeft = 12.7;
renderer.RenderingOptions.MarginRight = 12.7;
$vbLabelText   $csharpLabel

静的な構成からインスタンスベースの構成へ

すべてのHtmlToPdf.Options.Xrenderer.RenderingOptions.Xに置き換えてください:

// EO.Pdf - static options (NOT thread-safe!)
HtmlToPdf.Options.PageSize = PdfPageSizes.A4;

//IronPDF- instance options (thread-safe)
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
// EO.Pdf - static options (NOT thread-safe!)
HtmlToPdf.Options.PageSize = PdfPageSizes.A4;

//IronPDF- instance options (thread-safe)
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
$vbLabelText   $csharpLabel

ACMからHTMLへの移行

EO.Pdfのアドバンスト・コンテンツ・モデル(AcmRenderAcmTextAcmBlock)を使用している場合は、標準のHTML/CSSに移行してください:

// EO.Pdf ACM approach
var acmContent = new AcmContent();
acmContent.Add(new AcmText("Sample Text"));

//IronPDFHTML approach
var html = "<div>Sample Text</div>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// EO.Pdf ACM approach
var acmContent = new AcmContent();
acmContent.Add(new AcmText("Sample Text"));

//IronPDFHTML approach
var html = "<div>Sample Text</div>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
$vbLabelText   $csharpLabel

2段階保存パターン

EO.PdfはConvertHtml()で直接保存します。 IronPDFはPdfDocumentオブジェクトを返し、SaveAs()を呼び出します:

// EO.Pdf - one step
HtmlToPdf.ConvertHtml(html, "output.pdf");

//IronPDF- two steps (enables manipulation before save)
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// EO.Pdf - one step
HtmlToPdf.ConvertHtml(html, "output.pdf");

//IronPDF- two steps (enables manipulation before save)
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
$vbLabelText   $csharpLabel

コンストラクタから静的ファクトリへ

new PdfDocument(path)PdfDocument.FromFile(パス)。に置き換えてください:

// EO.Pdf
var doc = new PdfDocument("file.pdf");

// IronPDF
var doc = PdfDocument.FromFile("file.pdf");
// EO.Pdf
var doc = new PdfDocument("file.pdf");

// IronPDF
var doc = PdfDocument.FromFile("file.pdf");
$vbLabelText   $csharpLabel

移行後のチェックリスト

コードの移行が完了したら、以下を確認してください:

  • 生成されたPDFの視覚的な比較
  • ヘッダー/フッターが正しくレンダリングされることを確認する
  • セキュリティ/暗号化設定をテストする
  • マージ操作を検証する
  • パフォーマンスベンチマーク
  • クロスプラットフォームテスト(Windows、Linux、macOS)
  • EO.Pdfライセンスファイルを削除する
  • ドキュメントの更新

PDFインフラストラクチャの将来性を確保する

.NET 10が目前に迫り、C# 14では新しい言語機能が導入されるため、最新の.NETネイティブサポートを備えたPDFライブラリを選択することで、長期的な互換性を確保できます。 IronPdfのインスタンスベースのスレッドセーフアーキテクチャは現代のウェブアプリケーションのパターンに合致しており、特にEO.Pdfの静的グローバルオプションが並行性の問題を引き起こすマルチテナントのSaaSアプリケーションにとって重要です。

その他のリソース


EO.PdfからIronPdfに移行することで、126MBのパッケージの肥大化、IE時代のお荷物、静的グローバルオプションによるスレッドセーフの懸念がなくなります。 インスタンスベースの構成に移行することで、PDF生成コードがマルチスレッドのWebアプリケーションで確実に動作することを保証すると同時に、真のクロスプラットフォーム・デプロイメントをサポートします。

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

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

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