EO.Pdf vs IronPDF:技術比較ガイド
.NET 開発者が PDF 生成ライブラリを検討する場合、EO.Pdf は Chromium ベースのレンダリング機能を備えた商用オプションとして際立っています。 ただし、パッケージ サイズが 126 MB と大きく、従来の Internet Explorer の移行に問題があり、グローバル構成の静的アプローチが多くのチームに代替手段の検討を促しています。IronPDFは、インスタンスベース、スレッドセーフな構成、真のクロスプラットフォーム サポートを備えた洗練された Chromium 実装を提供します。
この比較では、両方のライブラリを技術的に関連する側面からレビューし、プロの開発者やアーキテクトが .NET PDF のニーズに応じて情報に基づいた決定を下せるよう支援します。
EO.Pdfを理解する
EO.Pdf は、開発者ライセンスあたり 799 ドルの商用 PDF ライブラリで、高品質の PDF 生成のための Chromium ベースのレンダリング機能を備えています。 このライブラリは、元の Internet Explorer レンダリング基盤から Chromium ベースのシステムに移行したカスタム エンジン上に構築されています。
このアップデートにもかかわらず、EO.Pdf が Chromium に移行したことで、Internet Explorer 時代からのレガシーな問題により互換性の問題が発生しました。 ライブラリには独自の Chromium エンジンが含まれているため、126 MB という大きなデプロイメント フットプリントが発生し、Docker イメージのサイズが大きくなり、CI/CD パイプラインが遅くなり、インフラストラクチャ コストが増加します。
さらに、EO.Pdf はクロスプラットフォーム ツールとして売り出されていますが、そのパフォーマンスと使いやすさは主に Windows に重点を置いており、Linux のサポートは二次的なものとされることが多いです。 このライブラリは、静的なHtmlToPdf.Optionsを設定に使用しているため、マルチテナントWebアプリケーションではスレッドセーフの問題が発生します。
IronPDFの理解
IronPDF は、最適化された Chromium パッケージ化アプローチを採用し、フットプリントが小さくなる (約 50 MB) 最新の .NET 環境向けに設計された .NET PDF ライブラリです。 このライブラリは、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!");
}
}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!");
}
}EO.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!");
}
}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!");
}
}EO.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!");
}
}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!");
}
}EO.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.");
}
}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は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(). |
| <コード>HtmlToPdf.ConvertUrl(url, path) | renderer.RenderUrlAsPdf(url) then SaveAs(). |
| <コード>HtmlToPdf.Options.PageSize</コード | renderer.RenderingOptions.PaperSize。 |
| <コード>HtmlToPdf.Options.OutputArea</コード | <コード>マージントップ/ボトム/レフト/ライト</コード |
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</コード |
| <コード>AcmRender</コード | 不要 |
| <コード>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");複数の同時リクエストを処理する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");各<コード>ChromePdfRenderer</コードインスタンスは独自の設定を維持し、同時実行シナリオでの分離を保証します。
チームがEO.PdfからIronPDFへの移行を検討するとき
開発チームがEO.PdfからIronPdfへの移行を評価する理由はいくつかあります:
パッケージ サイズの最適化: EO.Pdf の 126 MB のパッケージ サイズは Docker イメージを膨張させ、CI/CD パイプラインを遅くし、インフラストラクチャ コストを増加させます。 IronPDFの最適化されたパッケージング(~50MB)はデプロイの効率を大幅に改善します。
スレッドセーフ要件:マルチテナント Web アプリケーションでは、リクエストごとに分離された構成が必要です。EO.Pdf の静的HtmlToPdf.Optionsは競合状態を引き起こしますが、IronPDF のインスタンスベースのアプローチにより、この競合状態は排除されます。
クロスプラットフォーム展開: Linux または macOS 環境を対象とするアプリケーションでは、EO.Pdf の Windows 中心の設計により制限が発生します。 IronPdfは一貫した動作で真のクロスプラットフォームをサポートします。
レガシーバゲージの回避: EO.Pdf が Internet Explorer から Chromium に移行したことにより、互換性の問題が発生しました。 IronPdfのクリーンでモダンなコードベースはこのような技術的負債を回避します。
最新の .NET サポート: .NET 6/7/8/9+ をターゲットとするアプリケーションは、EO.Pdf の.NET 標準ターゲットではなく、IronPDF のネイティブ サポートの恩恵を受けます。
ACM 移行: EO.Pdf の高度なコンテンツ モデル (<コード>AcmRender</コード、<コード>AcmText</コード、<コード>AcmBlock</コード) を使用しているチームは、IronPDF の HTML/CSS アプローチがよりシンプルで保守しやすいと感じています。
長所と考慮点
EO.Pdfの強み
- Chromium レンダリング:高品質の W3C 準拠出力 -確立されたライブラリ:実稼働環境で実証済み -シングルステップ変換:
ConvertHtml()による直接ファイル出力
EO.Pdfについての考察
-巨大なパッケージサイズ: 126MBの展開フットプリント -レガシーIEの障害:移行による互換性の問題 -静的構成:マルチテナントアプリにおけるスレッドセーフの問題
- Windows中心: Linux/macOSのサポートは限定的 -価格:開発者ライセンスあたり 799 ドル -ドキュメントが限られている:チュートリアルと例が少ない
IronPDFの強み
-最適化されたフットプリント:パッケージサイズが約 50 MB (50% 小さい) -真のクロスプラットフォーム: Windows、Linux、macOS、Docker -スレッドセーフ構成:インスタンスベースのレンダラーオプション -モダンAPI:一貫性のある直感的なメソッド名 -活発な開発:定期的なアップデートとセキュリティパッチ -包括的なリソース:広範なチュートリアルとドキュメント
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の評価を開始し、包括的なドキュメントを参照して、特定の要件への適合性を評価してください。