EO.Pdf vs IronPDF:技術比較指南
EO.Pdf vs IronPDF:.NET 開發人員的技術比較。
當 .NET 開發人員評估 PDF 產生函式庫時,EO.Pdf 是具有基於 Chromium 渲染功能的商業選擇。 然而,其126MB的龐大套件大小、傳統 Internet Explorer 移轉包袱,以及靜態全局配置方式,導致許多團隊評估替代方案。IronPDF提供最佳化的 Chromium 實作,具有基於實體、線程安全的設定,以及真正的跨平台支援。
本比較針對技術上相關的層面檢視這兩個函式庫,以協助專業開發人員和架構人員針對他們的 .NET PDF 需求做出明智的決定。
瞭解 EO.Pdf
EO.Pdf 是一個商用 PDF 函式庫,每個開發者授權的價格為 799 美元,具有基於 Chromium 的渲染功能,可產生高品質的 PDF。 這個函式庫的架構是以客製化引擎為基礎,從原本的 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 ,將配置與其他作業隔離。
架構與組態比較
這些 .NET PDF 函式庫在架構上的基本差異在於其配置方式和部署特性。
| 範疇 | EO.Pdf | IronPDF |
|---|---|---|
| 套件大小 | 126MB | ~50MB (已最佳化) |
| 法律問題 | IE 移動包袱 | 乾淨、現代化的程式碼 |
| 平台支援 | 以 Windows 為重點 | 真正的跨平台 |
| 配置 | 靜態/全球 | 基於實例、線程安全 |
| 價格 | 799 美元/開發人員 | 有競爭力的定價 |
| API 設計 | 混合 (HtmlToPdf + ACM) | 統一、一致 |
| 說明文件 | 限額 | 全面的教學 |
| 現代 .NET | .NET 標準 | .NET 6/7/8/9+ 原生 |
| Async 支援 | 限額 | 完整的 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 採用兩種步驟:RenderHtmlAsPdf() 返回一個<編碼>PDF 文件</編碼物件,在呼叫 SaveAs() 之前,可以進一步操作該物件。 這種兩步模式為合併、加入水印或套用安全設定等後處理作業提供了更大的靈活性。
如需進階的 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.com兩個函式庫都提供 URL-to-PDF 功能,EO.Pdf 使用靜態 ConvertUrl() 而IronPDF則使用基於實體的 RenderUrlAsPdf() 。 線程安全的區別同樣適用。
在 URL to PDF 文件中了解更多關於 URL 渲染的資訊。
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() 方法,該方法接受一個集合並返回合併後的結果。
在 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.");
}
}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 物件上使用以毫米為單位的個別 margin 屬性 (MarginTop, MarginBottom, MarginLeft, MarginRight) 。 單位差異需要轉換:inches × 25.4 = millimeters。
方法映射參考
對於評估 EO.Pdf 遷移或比較功能的開發人員而言,此對應會顯示等效的操作:
核心作業
| EO.Pdf | IronPDF | 筆記 |
|---|---|---|
HtmlToPdf.ConvertHtml(html,path)。 | renderer.RenderHtmlAsPdf(html) 然後是 SaveAs() 。 | IronPDF 中的兩個步驟 |
HtmlToPdf.ConvertUrl(url,path)。 | renderer.RenderUrlAsPdf(url) 然後是 SaveAs() 。 | |
| <編碼>HtmlToPdf.Options.PageSize</編碼 | <編碼>renderer.RenderingOptions.PaperSize</編碼 | 實例,而非靜態 |
| <編碼>HtmlToPdf.Options.OutputArea</編碼 | 邊界上/下/左/右 | 個別屬性 (mm) |
new PdfDocument(path)。 | PdfDocument.FromFile(path) | 靜態工廠 |
doc.Append(other) | PdfDocument.Merge(doc1, doc2) | 靜態合併法 |
| <編碼>doc.Save(路徑)</編碼 | <代碼>pdf.SaveAs(路徑)</代碼 |
配置映射
| EO.Pdf 選項 | IronPdf RenderingOptions | 筆記 |
|---|---|---|
Options.PageSize=PdfPageSizes.A4。 | PaperSize = PdfPaperSize.A4 紙張尺寸 | |
Options.PageSize=PdfPageSizes.Letter。 | PaperSize=PdfPaperSize.Letter | |
Options.OutputArea (RectangleF) | MarginTop, MarginBottom 等。 | 個別屬性 |
| <編碼>Options.BaseUrl</編碼 | BaseUrl | 相同概念 |
類映射
| EO.Pdf 類別 | IronPdf 同等級產品 | 筆記 |
|---|---|---|
| <編碼>HtmlToPdf</編碼 | <代碼>ChromePdfRenderer</代碼 | 基於實例 |
| <編碼>PDF 文件</編碼 | <編碼>PDF 文件</編碼 | 不同的方法 |
| <編碼>HtmlToPdfOptions</編碼 | ChromePdfRenderOptions | 透過 RenderingOptions |
| <編碼>AcmRender</編碼 | 不需要 | 改用 HTML/CSS |
| <編碼>AcmText</編碼 | HTML <span>, <p> | |
| <編碼>AcmBlock</編碼 | HTML <div> |
功能比較摘要
| 特點 | 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 應用程式中,一個請求的組態會影響所有其他請求。 這會產生競賽條件,可能會以意想不到的設定產生 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基於實體的方法則可消除這些競賽條件。
跨平台部署:EO.Pdf 以 Windows 為中心的設計會限制針對 Linux 或 macOS 環境的應用程式。IronPDF以一致的行為提供真正的跨平台支援。
Legacy Baggage Avoidance:EO.Pdf 從 Internet Explorer 遷移到 Chromium 帶來了相容性問題。IronPDF乾淨、現代化的程式碼可以避免這種技術上的負債。
現代 .NET 支援:IronPDF for .NET 6/7/8/9+ 的應用程式受益於IronPDF的原生支援,而 EO.Pdf 的.NET 標準則是針對 .NET 的支援。
ACM 移植:使用 EO.Pdf 的高级内容模型(AcmRender、AcmText、AcmBlock)的团队发现 IronPdf 的 HTML/CSS 方法更简单、更易于维护。
優勢和考慮因素
EO.Pdf 的優勢
- Chromium渲染:符合W3C標準的高品質輸出
- 成熟的庫:經生產環境驗證
- 單步轉換:透過
ConvertHtml()直接輸出檔案
EO.Pdf注意事項
- 大型套件大小:126MB 部署佔用空間
- Legacy IE 包袱:遷移時產生的相容性問題
- 靜態組態:多租戶應用程式的線程安全問題
- 以 Windows 為中心:有限的 Linux/macOS 支援
- 價位:每個開發者授權 $799
- 有限的文件:較少的教學與範例
IronPDF的優勢
IronPDF注意事項
- 兩步儲存:渲染返回
PdfDocument, 然後呼喚SaveAs() - 單位差異:使用公釐表示頁邊距離 (vs EO.Pdf 英吋)
結論
EO.Pdf 和IronPDF都為 .NET 開發人員提供基於 Chromium 的 PDF 產生功能,但它們代表了不同的架構方法。 EO.Pdf 提供既有的功能,但卻有126MB的套件大小、傳統 Internet Explorer 移轉包袱,以及線程不安全的靜態組態。
IronPDF 提供了一個現代化的選擇,具有最佳化的封裝、真正的跨平台支援,以及基於實例的線程安全組態。 對於需要部署效率、並行運作安全性或跨平台目標的團隊,IronPDF 可滿足這些特定需求。
由於組織會規劃 .NET 10、C# 14 以及到 2026 年的應用程式開發,因此選擇取決於特定的優先順序。 在單執行緒 Windows 環境中已有 EO.Pdf 實作的團隊可能會繼續發現其價值。 對於現代的多租戶應用程式、容器化部署或跨平台需求,IronPDF 提供了更適合的方法。