迁移指南 如何用 C# 从 EO.Pdf 迁移到 IronPDF Curtis Chau 已发布:2026年1月11日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 EO.Pdf 在架构上提出了一些挑战,促使开发团队对替代方案进行评估。 了解这些问题对于规划迁移策略至关重要。 EO.Pdf 的问题 126MB 的庞大软件包大小: EO.Pdf 捆绑了自己的 Chromium 引擎,导致部署占用空间达到 126MB。 在翻译过程中,我们必须注意到,很多开发人员在使用 Docker 时,都会将 Docker 镜像放在 Docker 上,这样会膨胀 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" SHELL 需要查找的常见 EO.Pdf 命名空间: EO.Pdf - 核心 HTML 转 PDF EO.Pdf.Acm - 高级内容模型 (ACM) EO.Pdf.Contents - 低级内容操作 EO.Pdf.Drawing - 图形操作 了解核心模式变更 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 SHELL 步骤 2:更新命名空间引用 用IronPDF替换 EO.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; $vbLabelText $csharpLabel 步骤 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"; $vbLabelText $csharpLabel 完整的 API 迁移参考 核心类映射 EO.Pdf 类 IronPdf 同等产品 备注 HtmlToPdf ChromePdfRenderer 基于实例 PDF 文档 PDF 文档 相似但不同的方法 HtmlToPdfOptions ChromePdfRenderOptions 通过 RenderingOptions AcmRender 不需要 使用 HTML/CSS 代替 AcmText HTML <span>, <p> AcmBlock HTML <div> 方法映射 EO.Pdf 方法 IronPdf 方法 备注 HtmlToPdf.ConvertHtml(html,路径) renderer.RenderHtmlAsPdf(html) then SaveAs(path) 然后 IronPDF 中的两个步骤 HtmlToPdf.ConvertUrl(url, path) renderer.RenderUrlAsPdf(url) 然后SaveAs(path) PdfDocument.Save(路径) pdf.SaveAs(路径) 新建 PdfDocument(path) PdfDocument.FromFile(路径) 静态工厂 doc.Append(其他) 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!"); } } $vbLabelText $csharpLabel 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!"); } } $vbLabelText $csharpLabel IronPdf 的两步模式(渲染,然后保存)提供了对PDF 文档对象的访问,以便在保存前进行额外操作。 有关更多选项,请参阅 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!"); } } $vbLabelText $csharpLabel 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!"); } } $vbLabelText $csharpLabel IronPDF 的 RenderUrlAsPdf 提供完整的 JavaScript 执行和现代 CSS 支持。 有关更多选项,请参阅 URL to PDF 文档。 带有自定义设置的 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."); } } $vbLabelText $csharpLabel 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."); } } $vbLabelText $csharpLabel 注意单位转换:EO.Pdf 在 OutputArea 中使用英寸,而 IronPdf 使用毫米。 转换使用:`英寸 × 25.4 = 毫米。 有关更多选项,请参阅渲染选项文档。 合并多个 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!"); } } $vbLabelText $csharpLabel 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!"); } } $vbLabelText $csharpLabel IronPdf 的静态 Merge 方法接受文档集合,简化了多文档合并。 注意从构造函数(new PdfDocument(path))到静态工厂(PdfDocument.FromFile(path))的变化。 更多选项请参阅PDF 合并文档。 关键迁移说明 边际单位转换 EO.Pdf 在 OutputArea 中使用英寸。 IronPdf 使用毫米。 转换使用:英寸 × 25.4 = 毫米` // 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; $vbLabelText $csharpLabel 从静态配置到基于实例的配置 将所有 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; $vbLabelText $csharpLabel 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); $vbLabelText $csharpLabel 两步保存模式 EO.Pdf 可直接保存在 ConvertHtml() 中。IronPDF返回一个PDF 文档对象,然后您调用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"); $vbLabelText $csharpLabel 构造函数到静态工厂 将新建 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"); $vbLabelText $csharpLabel 迁移后核对表 完成代码迁移后,请验证以下内容: 生成PDF文件的可视化比较 验证页眉/页脚是否正确显示。 测试安全/加密设置 验证合并操作 性能基准测试 跨平台测试(Windows、Linux、macOS) 删除 EO.Pdf 许可证文件 更新文档 未来保护您的 PDF 基础架构 随着 .NET 10 即将推出,C# 14 也将引入新的语言特性,选择一个支持现代 .NET 本机的 PDF 库可以确保长期的兼容性。IronPDF基于实例的线程安全架构符合当代网络应用模式--这对于多租户 SaaS 应用程序尤为重要,因为 EO.Pdf 的静态全局选项会产生并发问题。 其他资源 IronPDF文档 HTML转PDF教程 API 参考 NuGet软件包 许可选项 从 EO.Pdf 迁移到IronPDF可以消除126MB包的臃肿、IE 时代的遗留包袱以及静态全局选项带来的线程安全问题。 向基于实例的配置过渡可确保您的 PDF 生成代码在多线程网络应用程序中可靠运行,同时提供真正的跨平台部署支持。 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已发布2026年2月1日 如何用 C# 从 ZetPDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 ZetPDF 到 IronPDF 的迁移。从基于坐标的库转换到现代的 HTML 到 PDF 解决方案。包括 HTML 转换、合并 PDF 和移除 PDFSharp 依赖性的代码示例。 阅读更多 已发布2026年2月1日 如何用 C# 从 Scryber.Core 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 Scryber.Core 迁移到 IronPDF 的方法。从自定义 XML/HTML 解析转换到现代 Chromium 渲染器。包括 HTML 转换、URL 呈现和替换专有绑定的代码示例。 阅读更多 已发布2026年2月1日 如何用 C# 从 XFINIUM.PDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 XFINIUM.PDF 到 IronPDF 的迁移。从基于坐标的手动定位切换到声明式 HTML/CSS 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多 如何用 C# 从 ExpertPdf 迁移到 IronPDF如何用 C# 从 Easy PDF SDK 迁...
已发布2026年2月1日 如何用 C# 从 ZetPDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 ZetPDF 到 IronPDF 的迁移。从基于坐标的库转换到现代的 HTML 到 PDF 解决方案。包括 HTML 转换、合并 PDF 和移除 PDFSharp 依赖性的代码示例。 阅读更多
已发布2026年2月1日 如何用 C# 从 Scryber.Core 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 Scryber.Core 迁移到 IronPDF 的方法。从自定义 XML/HTML 解析转换到现代 Chromium 渲染器。包括 HTML 转换、URL 呈现和替换专有绑定的代码示例。 阅读更多
已发布2026年2月1日 如何用 C# 从 XFINIUM.PDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 XFINIUM.PDF 到 IronPDF 的迁移。从基于坐标的手动定位切换到声明式 HTML/CSS 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多