如何在 C# 中將 EO.Pdf 遷移到 IronPDF
EO.Pdf 提出了幾個架構方面的挑戰,促使開發團隊評估各種替代方案。 了解這些問題對於制定遷移策略至關重要。
EO.Pdf 問題
- 126MB 的龐大軟體包大小: EO.Pdf 捆綁了自己的 Chromium 引擎,導致部署佔用空間達到 126MB。 這會導致 Docker 映像體積膨脹,降低 CI/CD 管線速度,並增加基礎設施成本。
2.遺留架構包袱: EO.Pdf 最初是基於 Internet Explorer 的渲染引擎構建的,之後遷移到了 Chromium。 這種遺留問題導致了 IE 時代的兼容性問題、API 設計中的技術債以及版本之間的不一致行為。
3.以 Windows 為中心的設計:儘管 EO.Pdf 被宣傳為"跨平台",但其對 Linux 和 macOS 的支援卻很有限。 許多開發者反映在非 Windows 部署環境中存在問題。
4.靜態全域選項: EO.Pdf 使用靜態HtmlToPdf.Options進行配置,並非執行緒安全,在多租戶 Web 應用程式中存在問題。
5.每許可證 799 美元: EO.Pdf 的開發者許可證價格為 799 美元,與其他提供類似或更好功能的替代方案相比,價格昂貴。
架構比較
| 方面 | EO.Pdf | IronPDF |
|---|---|---|
| 包裝尺寸 | 126MB | 優化後(約50MB) |
| 遺留問題 | IE移民行李 | 簡潔、現代的程式碼庫 |
| 平台支援 | 以 Windows 為中心的 | 真正的跨平台 |
| 配置 | 靜態/全域(非線程安全) | 基於實例,線程安全 |
| API設計 | 混合(HtmlToPdf + ACM) | 統一、一致 |
| 文件 | 有限的 | 綜合教程 |
| 近代 .NET | .NET 標準 | .NET 6/7/8/9+ 原生 |
| 非同步支援 | 有限的 | 完全異步/等待 |
遷移的主要優勢
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- 核心 HTML 轉 PDFEO.Pdf.Acm- 高級內容模型 (ACM)EO.Pdf.Contents- 低階內容操縱EO.Pdf.Drawing- 圖形操作
理解核心模式變化
EO.Pdf 和 IronPDF 之間最顯著的架構差異在於配置範圍。 EO.Pdf 使用具有全域選項的靜態方法,這些選項會影響所有轉換—這種模式會導致 Web 應用程式出現執行緒安全性問題。 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:
// 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<div> |
方法映射
| EO.Pdf 方法 | IronPDF 方法 | 筆記 |
|---|---|---|
HtmlToPdf.ConvertHtml(html, path) | renderer.RenderHtmlAsPdf(html)然後SaveAs(path) | IronPDF 中的兩步驟法 |
HtmlToPdf.ConvertUrl(url, path) | renderer.RenderUrlAsPdf(url)然後SaveAs(path) | |
PdfDocument.Save(path) | pdf.SaveAs(path) | |
new PdfDocument(path) | PdfDocument.FromFile(path) | 靜態工廠 |
doc.Append(other) | PdfDocument.Merge(doc1, doc2) | 靜態合併方法 |
選項映射
| EO.Pdf選項 | IronPDF渲染選項 | 筆記 |
|---|---|---|
Options.PageSize = PdfPageSizes.A4 | PaperSize = PdfPaperSize.A4 | |
Options.OutputArea (RectangleF) | MarginTop 、 MarginBottom等。 | 單一屬性(毫米) |
程式碼遷移範例
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 的兩步驟模式(先渲染,再儲存)允許在儲存之前存取PdfDocument物件以進行額外的操作。 更多選項,請參閱HTML 轉 PDF 文件。
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 支援。 更多選項請參閱PDF 文件的 URL 。
帶有自訂設定的 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 。 更多選項請參閱渲染選項文件。
合併多個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
// 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"));
// IronPDF HTML 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"));
// IronPDF HTML approach
var html = "<div>Sample Text</div>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);兩步驟保存模式
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(path) :
// 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 基於實例、線程安全的架構符合當代 Web 應用程式模式——這對於多租戶 SaaS 應用程式來說尤其重要,因為 EO.Pdf 的靜態全域選項會造成並發問題。
其他資源
從 EO.Pdf 遷移到 IronPDF 可以消除 126MB 的包膨脹、遺留的 IE 時代遺留問題以及靜態全局選項帶來的線程安全問題。 過渡到基於實例的配置可確保您的 PDF 生成程式碼在多執行緒 Web 應用程式中可靠地運行,同時提供真正的跨平台部署支援。






