EO.Pdf vs IronPDF:技術比較ガイド
EO.Pdf vs IronPdf:.NET開発者のための技術比較
.NET開発者がPDF生成ライブラリを評価する際、Chromiumベースのレンダリング機能を持つ商用オプションとしてEO.Pdfが浮上します。 しかし、126MBという巨大なパッケージサイズ、レガシーなInternet Explorerへの移行の手荷物、静的なグローバル設定というアプローチから、多くのチームが代替案を検討しています。 IronPdfはインスタンスベースのスレッドセーフなコンフィギュレーションと真のクロスプラットフォームサポートで最適化されたChromium実装を提供します。
この比較では、プロの開発者やアーキテクトが.NET PDFの要件について十分な情報を得た上で決定できるように、技術的に関連する次元で両ライブラリを検証します。
EO.Pdfを理解する
EO.Pdfは、開発者ライセンスあたり799ドルで提供される商用PDFライブラリで、高品質のPDF生成のためのChromiumベースのレンダリングを特徴としています。 このライブラリは、独自のInternet Explorerレンダリング基盤からChromiumベースのシステムに移行したカスタムエンジン上に構築されたアーキテクチャを誇っています。
このような近代化にもかかわらず、EO.PdfのChromiumへの移行は、Internet Explorer時代のレガシーに起因する互換性の問題をもたらしました。 このライブラリは、独自のChromiumエンジンをバンドルしているため、126MBという大きなデプロイメントフットプリントが発生し、Dockerイメージが膨張し、CI/CDパイプラインが遅くなり、インフラコストが増加します。
また、EO.Pdfはクロスプラットフォームツールとして位置づけられていますが、そのパフォーマンスと使いやすさは主にWindows中心であり、Linuxのサポートは後回しにされがちです。 このライブラリは、静的なHtmlToPdf.Optionsを設定に使用しているため、マルチテナントWebアプリケーションではスレッドセーフの問題が発生します。
IronPDFの理解
IronPDFは最新の.NET環境のために作られた.NET PDFライブラリで、最適化されたChromiumパッケージングアプローチによりフットプリントが小さくなっています(約50MB)。 このライブラリは、Windowsを優遇するのではなく、すべてのプラットフォームを同等にサポートしているため、多様な環境で展開されるアプリケーションに適しています。
IronPDFはChromePdfRendererオブジェクトを通してインスタンスベースのコンフィギュレーションを使用し、同時実行シナリオでのスレッドセーフな動作を保証します。 各レンダラー インスタンスは独自の RenderingOptions<//code> を維持し、他の操作から設定を分離します。
アーキテクチャと構成の比較
これらの.NET PDFライブラリの基本的なアーキテクチャの違いは、構成アプローチとデプロイメント特性にあります。
| アスペクト | EO.Pdf | IronPDF |
|---|---|---|
| パッケージサイズ | 126MB | ~50MB(最適化済み) |
| レガシーな問題 | IEの移行荷物 | クリーンでモダンなコードベース |
| プラットフォームサポート | Windowsに特化 | 真のクロスプラットフォーム |
| コンフィギュレーション。 | 静的/グローバル | インスタンスベース、スレッドセーフ |
| 価格 | 799ドル/開発者 | 競争力のある価格設定 |
| APIデザイン。 | 混合(HtmlToPdf + ACM) | 統一された一貫性のある |
| ドキュメント | 制限的 | 包括的なチュートリアル |
| モダン.NET | .NET 標準 | .NET 6/7/8/9+ ネイティブ |
| 非同期サポートについて | 制限的 | 完全なasync/await |
構成モデルは、重要な違いを表しています。 EO.Pdfの静的なHtmlToPdf.Optionsは、すべての変換にグローバルに影響し、マルチスレッド・アプリケーションで競合状態を引き起こします。 IronPdfのインスタンスベースのアプローチにより、レンダラーごとに分離されたコンフィギュレーションが保証されます。
コードの比較:一般的なPDF操作
HTMLからPDFへの変換
HTMLコンテンツをPDFに変換すると、基本的なAPIの違いがわかります。
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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDF:
// 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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comEO.Pdfは、ファイルパスに直接保存する静的なHtmlToPdf.ConvertHtml()メソッドを使用します。 IronPDFは2段階のアプローチを使用します:RenderHtmlAsPdf()は、SaveAs()を呼び出す前にさらに操作できるPdfDocumentオブジェクトを返します。 この2ステップのパターンは、マージ、透かしの追加、セキュリティ設定の適用などの後処理操作の柔軟性を高めます。
高度なHTMLレンダリングオプションについては、HTMLからPDFへの変換ガイドをご覧ください。
URLからPDFへの変換
ウェブページをPDF文書としてキャプチャすると、同様のAPIパターンが示されます。
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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDF:
// 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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comEO.Pdfは静的なConvertUrl()を使用し、IronPdfはインスタンスベースのRenderUrlAsPdf()を使用します。 同じスレッドセーフティーの区別が適用されます。
URL レンダリングの詳細については、URL to PDF documentationを参照してください。
PDFマージ操作
複数のPDFドキュメントを組み合わせることで、さまざまなオブジェクトモデルのアプローチを示します。
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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDF:
// 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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comEO.Pdfはコンストラクタ(new PdfDocument(path))でドキュメントをロードし、Append()を使って空のコンテナにドキュメントを追加します。 IronPDFは静的なファクトリーメソッド(PdfDocument.FromFile())と、コレクションを受け取りマージされた結果を返す静的なPdfDocument.Merge()メソッドを使用します。
その他のマージ操作については、PDFマージドキュメントを参照してください。
カスタムページ設定
ページサイズと余白の設定は、設定モデルの違いを示しています。
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.");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDF:
// 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.");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comEO.PdfはHtmlToPdfOptionsを使用し、OutputAreaはインチ単位のRectangleFとして指定されます。 IronPDFはRenderingOptionsオブジェクトで個々のマージンプロパティ(MarginTop, MarginBottom, MarginLeft, MarginRight)をミリメートル単位で使用します。 単位の違いは変換が必要です:inches × 25.4 = millimeters.
メソッド マッピング リファレンス
EO.Pdfの移行を評価したり、機能を比較したりする開発者のために、このマッピングは同等の操作を示しています:
コア オペレーション
| EO.Pdf | IronPDF | ノート |
|---|---|---|
| <コード>HtmlToPdf.ConvertHtml(html, path) | renderer.RenderHtmlAsPdf(html) then SaveAs(). | IronPDFの2ステップ |
| <コード>HtmlToPdf.ConvertUrl(url, path) | renderer.RenderUrlAsPdf(url) then SaveAs(). | |
| <コード>HtmlToPdf.Options.PageSize</コード | renderer.RenderingOptions.PaperSize。 | 静的ではなくインスタンス |
| <コード>HtmlToPdf.Options.OutputArea</コード | <コード>マージントップ/ボトム/レフト/ライト</コード | 個々のプロパティ (mm) |
new PdfDocument(path). | PdfDocument.FromFile(パス)。 | 静的ファクトリ |
doc.Append(other)を追加します。 | PdfDocument.Merge(doc1, doc2). | 静的マージ方式 |
doc.Save(パス)を実行します。 | pdf.SaveAs(path)のようにします。 |
コンフィギュレーション マッピング
| EO.Pdfオプション | IronPDF レンダリングオプション | ノート |
|---|---|---|
Options.PageSize = PdfPageSizes.A4. | PaperSize = PdfPaperSize.A4. | |
Options.PageSize = PdfPageSizes.Letter. | PaperSize = PdfPaperSize.Letter. | |
Options.OutputArea<//code> (RectangleF) | MarginTop、MarginBottomなど。 | 個々のプロパティ |
| <コード>Options.BaseUrl</コード | <コード>ベースURL</コード | 同じコンセプト |
クラスマッピング
| EO.Pdfクラス | IronPDF 同等物 | ノート |
|---|---|---|
| <コード>HtmlToPdf</コード | <コード>ChromePdfRenderer</コード | インスタンスベース |
| <コード>PdfDocument</コード | <コード>PdfDocument</コード | さまざまな方法 |
| <コード>HtmlToPdfOptions</コード | <コード>ChromePdfRenderOptions</コード | RenderingOptions経由 |
| <コード>AcmRender</コード | 不要 | 代わりにHTML/CSSを使用してください |
| <コード>AcmText</コード | HTML <span>、<p>。 | |
| <コード>AcmBlock</コード | HTML <コード> </コード |
機能比較の概要
| フィーチャー | EO.Pdf | IronPDF |
|---|---|---|
| HTMLからPDFへ | ✅ | ✅ |
| URLからPDFへ | ✅ | ✅ |
| PDFマージ | ✅ | ✅ |
| ページ操作 | ✅ | ✅ |
| ヘッダー/フッター | ✅ | ✅ (HTMLベース) |
| セキュリティ/暗号化 | ✅ | ✅ |
| フォームフィールド | ✅ | ✅ |
| 透かし | ✅ | ✅ |
| ACMレンダリング | ✅ | HTML/CSS (ACMなし) |
| スレッドセーフ設定 | ❌ (静的) | ✅ (インスタンス) |
| クロスプラットフォーム | 制限的 | フルサポート |
スレッド安全性の問題
EO.Pdfの静的コンフィギュレーションは、マルチスレッド・アプリケーションにおいて根本的な問題を引き起こします:
// EO.Pdf - DANGER: Static options affect ALL threads!
HtmlToPdf.Options.PageSize = PdfPageSizes.A4;
HtmlToPdf.Options.OutputArea = new RectangleF(0.5f, 0.5f, 7.5f, 10.5f);
HtmlToPdf.ConvertHtml(html, "output.pdf");// EO.Pdf - DANGER: Static options affect ALL threads!
HtmlToPdf.Options.PageSize = PdfPageSizes.A4;
HtmlToPdf.Options.OutputArea = new RectangleF(0.5f, 0.5f, 7.5f, 10.5f);
HtmlToPdf.ConvertHtml(html, "output.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.com複数の同時リクエストを処理するWebアプリケーションでは、1つのリクエストの設定が他のすべてのリクエストに影響します。 このため、予期しない設定でPDFが生成される可能性があるレース状態が発生します。
IronPdfのインスタンスベースのアプローチはこの問題を解決します:
//IronPDF- Thread-safe, isolated options per renderer instance
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 12.7;
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");//IronPDF- Thread-safe, isolated options per renderer instance
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 12.7;
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.com各<コード>ChromePdfRenderer</コードインスタンスは独自の設定を維持し、同時実行シナリオでの分離を保証します。
チームがEO.PdfからIronPDFへの移行を検討するとき
開発チームがEO.PdfからIronPdfへの移行を評価する理由はいくつかあります:
パッケージサイズの最適化: EO.Pdfの126MBのパッケージサイズは、Dockerイメージを膨張させ、CI/CDパイプラインを遅くし、インフラストラクチャのコストを増加させます。 IronPDFの最適化されたパッケージング(~50MB)はデプロイの効率を大幅に改善します。
スレッドセーフの要件:マルチテナントのWebアプリケーションでは、リクエストごとに分離された設定が必要です。EO.Pdfの静的なHtmlToPdf.Optionsは競合状態を引き起こしますが、IronPDFのインスタンスベースのアプローチはそれを排除します。
クロスプラットフォーム展開:LinuxやmacOS環境をターゲットにしたアプリケーションは、EO.PdfのWindows中心の設計では限界があります。 IronPdfは一貫した動作で真のクロスプラットフォームをサポートします。
Legacy Baggage Avoidance: EO.PdfがInternet ExplorerからChromiumに移行したことで、互換性の問題が発生しました。 IronPdfのクリーンでモダンなコードベースはこのような技術的負債を回避します。
最新の.NETサポート:.NET 6/7/8/9+をターゲットとするアプリケーションは、EO.Pdfの.NET Standardをターゲットとするアプリケーションに対して、IronPDFのネイティブサポートから恩恵を受けます。
ACMへの移行: EO.Pdfのアドバンストコンテンツモデル(AcmRender, AcmText、 AcmBlock)を使用しているチームは、IronPDFのHTML/CSSアプローチがよりシンプルで保守しやすいことを実感しています。
長所と考慮点
EO.Pdfの強み
- クロムレンダリング:高品質のW3C準拠出力
- 確立されたライブラリ:本番環境で実証済み
- シングルステップ変換:
ConvertHtml()による直接ファイル出力
EO.Pdfについての考察
- 巨大なパッケージサイズ: 126MBのデプロイメントフットプリント
- レガシーIEの手荷物:移行による互換性の問題
- 静的構成: マルチテナントアプリにおけるスレッド安全性の問題
- Windows中心:限定的なLinux/macOSサポート
- 価格: 開発者ライセンスあたり799ドル
- 限られたドキュメント:少ないチュートリアルと例
IronPDFの強み
IronPDFについての考察
- 2ステップ保存:レンダリングは
PdfDocumentを返し、次にSaveAs()を呼び出します。 - 単位の違い:余白にミリメートルを使用(対EO.Pdfインチ)
結論
EO.PdfとIronPDFはどちらも.NET開発者のためにChromiumベースのPDF生成を提供しますが、アーキテクチャのアプローチが異なります。 EO.Pdfは確立された機能を提供しますが、126MBのパッケージサイズ、レガシーなInternet Explorerへの移行、スレッドセーフでない静的設定などの問題があります。
IronPdfは最適化されたパッケージング、真のクロスプラットフォームサポート、インスタンスベースのスレッドセーフコンフィギュレーションを備えた最新の選択肢を提供します。 デプロイの効率性、同時操作の安全性、クロスプラットフォームのターゲティングを必要とするチームにとって、IronPDFはこれらの特定の要件に対応します。
組織が.NET 10、C# 14、2026年までのアプリケーション開発を計画する中で、その選択は特定の優先順位によって決まります。 シングルスレッドのWindows環境でEO.Pdfを実装しているチームは、引き続きその価値を見いだせるかもしれません。 最新のマルチテナント・アプリケーション、コンテナ化されたデプロイメント、クロスプラットフォームの要件には、IronPdfがより適切なアプローチを提供します。
無料トライアルでIronPDFの評価を開始し、包括的なドキュメントを参照して、特定の要件への適合性を評価してください。