C#でEO.PdfからIronPDFに移行する方法
EO.Pdfには、開発チームを代替案の評価に駆り立てるような、アーキテクチャ上の課題がいくつかあります。 これらの問題を理解することは、移行戦略を計画する上で不可欠です。
EO.Pdfの問題について
- 126 MB という巨大なパッケージ サイズ: EO.Pdf には独自の Chromium エンジンがバンドルされており、展開フットプリントは 126 MB になります。 これはDockerイメージを膨らませ、CI/CDパイプラインを遅くし、インフラコストを増加させます。
2.レガシー アーキテクチャの障害: EO.Pdf は、Chromium に移行する前は、Internet Explorer のレンダリング エンジン上に構築されていました。 このレガシーには、IE時代からの互換性の問題、API設計の技術的負債、バージョン間の一貫性のない動作などがあります。
- Windows 中心の設計: "クロスプラットフォーム"として宣伝されているにもかかわらず、EO.Pdf の Linux および macOS のサポートは制限されています。 多くの開発者が、Windows 以外のデプロイメントに関する問題を報告しています。
4.静的グローバル オプション: EO.Pdf は構成に静的HtmlToPdf.Optionsを使用しますが、これはスレッドセーフではなく、マルチテナント Web アプリケーションでは問題が発生します。
5.ライセンスあたり 799 ドル:開発者ライセンスあたり 799 ドルという EO.Pdf は、同等またはより優れた機能を提供する代替製品と比較して高価です。
アーキテクチャの比較
| アスペクト | EO.Pdf | IronPDF |
|---|---|---|
| パッケージサイズ | 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"一般的な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ステップ 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;ステップ 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";完全な 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) | MarginTop、MarginBottomなど。 | 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!");
}
}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!");
}
}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!");
}
}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!");
}
}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.");
}
}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.");
}
}単位変換に注意してください: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!");
}
}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!");
}
}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;静的な構成からインスタンスベースの構成へ
すべてのHtmlToPdf.Options.Xをrenderer.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;ACMからHTMLへの移行
EO.Pdfのアドバンスト・コンテンツ・モデル(AcmRender、AcmText、AcmBlock)を使用している場合は、標準の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);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");コンストラクタから静的ファクトリへ
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");移行後のチェックリスト
コードの移行が完了したら、以下を確認してください:
- 生成されたPDFの視覚的な比較
- ヘッダー/フッターが正しくレンダリングされることを確認する
- セキュリティ/暗号化設定をテストする
- マージ操作を検証する
- パフォーマンスベンチマーク
- クロスプラットフォームテスト(Windows、Linux、macOS)
- EO.Pdfライセンスファイルを削除する
- ドキュメントの更新
PDFインフラストラクチャの将来性を確保する
.NET 10が目前に迫り、C# 14では新しい言語機能が導入されるため、最新の.NETネイティブサポートを備えたPDFライブラリを選択することで、長期的な互換性を確保できます。 IronPdfのインスタンスベースのスレッドセーフアーキテクチャは現代のウェブアプリケーションのパターンに合致しており、特にEO.Pdfの静的グローバルオプションが並行性の問題を引き起こすマルチテナントのSaaSアプリケーションにとって重要です。
その他のリソース
EO.PdfからIronPdfに移行することで、126MBのパッケージの肥大化、IE時代のお荷物、静的グローバルオプションによるスレッドセーフの懸念がなくなります。 インスタンスベースの構成に移行することで、PDF生成コードがマルチスレッドのWebアプリケーションで確実に動作することを保証すると同時に、真のクロスプラットフォーム・デプロイメントをサポートします。






