迁移指南 如何用 C# 从 ExpertPdf 迁移到 IronPDF Curtis Chau 已发布:2026年1月11日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 ExpertPdf 是一款适用于 .NET 的商用 HTML 到 PDF 转换器,多年来一直为开发人员提供服务。 然而,在当今快速发展的开发环境中,ExpertPdf 面临着巨大的挑战:文档自 2018 年起冻结,依赖于错过现代 CSS3 功能的 Chrome 旧版本,过时技术的溢价定价从 550 美元到 1200 美元不等,产品套件支离破碎,需要为合并、安全和拆分提供单独的许可证。 本综合指南提供了从ExpertPdf逐步迁移到IronPDF的路径--IronPDF 是一个现代的 .NET PDF 库,具有最新的 Chromium 渲染、每月更新和一体化软件包架构。 为什么要从ExpertPdf迁移到 IronPDF? ExpertPdf 带来了一些挑战,促使开发团队对现代替代方案进行评估。 了解这些问题对于规划迁移策略至关重要。 ExpertPdf的问题 1.文档自 2018 年以来一直处于冻结状态:ExpertPdf的文档已经超过 6 年没有更新了。 随着 .NET 生态系统的发展,查找最新信息、示例和最佳实践变得越来越困难。 2.过时的 Chrome 版本:ExpertPdf依赖于旧版本的 Chrome 进行渲染。 现代 CSS3 功能(Flexbox、网格、CSS 变量)可能无法正确呈现,并且未应用安全补丁。 3.传统技术的高价定价:ExpertPdf的许可证价格为 550 美元至 1200 美元,却提供过时的渲染技术。 4.产品套件分散:ExpertPdf为不同的功能单独销售软件包——HtmlToPdf Converter、PDF Merger、PDF Security、PDF Splitter 和 PDF to Image——每个软件包都需要单独的许可。 5.现代 .NET 支持有限:虽然ExpertPdf有 .NET Core 包,但它们落后于现代 .NET 版本和实践。 架构比较 方面 ExpertPdf IronPDF 文档 自 2018 年起冻结 持续更新 渲染引擎 传统 Chrome 浏览器 最新 Chromium CSS支持 有限的 CSS3 完整的 CSS3(Flexbox、网格) 价格 $550-$1,200 有竞争力的定价 更新频率 不经常 每月发布 产品模型 零散(5 个以上 DLL) 一体化库 现代.NET 有限的 .NET 6/7/8/9+ 原生语言 支持同步 有限的 完整的异步/等待 主要迁移优势 1.现代渲染:采用最新的 Chromium 引擎,实现像素级完美输出 2.一体化软件包:在一个 NuGet 包中完成 PDF 生成、合并、安全保护和提取。 3.积极开发:每月更新,包含新功能和安全补丁 4.更完善的文档:全面的教程和示例 5.真正的跨平台:支持 Windows、Linux、macOS 和 Docker。 迁移前准备 前提条件 确保您的环境符合这些要求: .NET Framework 4.6.2+ 或 .NET Core 3.1 / .NET 5-9 Visual Studio 2019+ 或带有 C# 扩展的 VS Code 访问 NuGet 包管理器 -IronPDF许可证密钥(可在ironpdf.com免费试用) AuditExpertPdf的用法 在解决方案目录中运行这些命令,以识别所有ExpertPdf引用: # Find allExpertPdfreferences grep -r "ExpertPdf\|PdfConverter\|PDFMerge\|PdfSecurityManager" --include="*.cs" . # Check NuGet packages dotnet list package | grep -i "ExpertPdf" # Find allExpertPdfreferences grep -r "ExpertPdf\|PdfConverter\|PDFMerge\|PdfSecurityManager" --include="*.cs" . # Check NuGet packages dotnet list package | grep -i "ExpertPdf" SHELL 常见的ExpertPdf软件包: ExpertPdf.HtmlToPdf - HTML 到 PDF 的转换 ExpertPdf.PDFMerge - PDF 合并 ExpertPdf.PDFSecurity - 加密和密码 ExpertPdf.PDFSplit - PDF 分割 ExpertPdf.PdfToImage - PDF 到图像的转换 了解核心模式变更 ExpertPdf 使用PDFConverter直接返回字节数组的方法。IronPDF使用ChromePdfRenderer返回 PdfDocument 对象,这些对象在保存前提供了额外的操作功能。 逐步迁移过程 步骤 1:更新 NuGet 软件包 删除所有ExpertPdf软件包并安装 IronPDF: # Remove allExpertPdfpackages dotnet remove package ExpertPdf.HtmlToPdf dotnet remove package ExpertPdf.PDFMerge dotnet remove package ExpertPdf.PDFSecurity dotnet remove package ExpertPdf.PDFSplit dotnet remove package ExpertPdf.PdfToImage # InstallIronPDF(includes all features) dotnet add package IronPdf # Remove allExpertPdfpackages dotnet remove package ExpertPdf.HtmlToPdf dotnet remove package ExpertPdf.PDFMerge dotnet remove package ExpertPdf.PDFSecurity dotnet remove package ExpertPdf.PDFSplit dotnet remove package ExpertPdf.PdfToImage # InstallIronPDF(includes all features) dotnet add package IronPdf SHELL 步骤 2:更新命名空间引用 用IronPDF替换ExpertPdf命名空间: // Remove these using ExpertPdf.HtmlToPdf; // Add this using IronPdf; // Remove these using ExpertPdf.HtmlToPdf; // Add this using IronPdf; $vbLabelText $csharpLabel 步骤 3:配置许可证 ExpertPdf 采用按转换器授权的方式。 IronPdf 使用单一的全球许可证: // 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 迁移参考 核心类映射 ExpertPdf 类 IronPdf 同等产品 备注 PDFConverter ChromePdfRenderer 主要转换类 PdfDocumentOptions ChromePdfRenderOptions 通过 RenderingOptions PdfHeaderOptions TextHeaderFooter</code> 或 <code>HtmlHeaderFooter 可配置 PdfFooterOptions TextHeaderFooter</code> 或 <code>HtmlHeaderFooter 可配置 PDFMerge PdfDocument.Merge() 静态方法 方法映射 ExpertPdf 方法 IronPdf 方法 备注 pdfConverter.GetPdfBytesFromHtmlString(html) renderer.RenderHtmlAsPdf(html).BinaryData pdfConverter.GetPdfBytesFromUrl(url) renderer.RenderUrlAsPdf(url).BinaryData pdfConverter.GetPdfBytesFromHtmlFile(path) renderer.RenderHtmlFileAsPdf(path).BinaryData pdfConverter.SavePdfFromUrlToFile(url,路径) renderer.RenderUrlAsPdf(url).SaveAs(path) 两个步骤 选项映射 ExpertPdf 选项 IronPdf 渲染选项 备注 PdfDocumentOptions.PdfPageSize = PdfPageSize.A4 PaperSize = PdfPaperSize.A4 PdfDocumentOptions.PdfPageOrientation = Portrait PaperOrientation = PdfPaperOrientation.Portrait PdfDocumentOptions.MarginTop 页边距 相同的属性名称 PdfHeaderOptions.HeaderText TextHeader.CenterText PdfFooterOptions.FooterText TextFooter.RightText 页面编号标记转换 ExpertPdf 和IronPDF对页码使用不同的占位符语法: ExpertPdf IronPDF &p; {page} &P; {总页数} 代码迁移示例 HTML 到 PDF 转换 HTML 到 PDF 的基本转换展示了从ExpertPdf的字节阵列模式到IronPDF的文档对象方法的转变。 ExpertPdf 的实现: // NuGet: Install-Package ExpertPdf.HtmlToPdf using ExpertPdf.HtmlToPdf; using System; class Program { static void Main() { // Create the PDF converter PdfConverter pdfConverter = new PdfConverter(); // Convert HTML string to PDF byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlString("<h1>Hello World</h1><p>This is a PDF document.</p>"); // Save to file System.IO.File.WriteAllBytes("output.pdf", pdfBytes); Console.WriteLine("PDF created successfully!"); } } // NuGet: Install-Package ExpertPdf.HtmlToPdf using ExpertPdf.HtmlToPdf; using System; class Program { static void Main() { // Create the PDF converter PdfConverter pdfConverter = new PdfConverter(); // Convert HTML string to PDF byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlString("<h1>Hello World</h1><p>This is a PDF document.</p>"); // Save to file System.IO.File.WriteAllBytes("output.pdf", pdfBytes); Console.WriteLine("PDF created successfully!"); } } $vbLabelText $csharpLabel IronPDF 实现: // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { // Create a PDF from HTML string var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF document.</p>"); // Save to file pdf.SaveAs("output.pdf"); Console.WriteLine("PDF created successfully!"); } } // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { // Create a PDF from HTML string var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF document.</p>"); // Save to file pdf.SaveAs("output.pdf"); Console.WriteLine("PDF created successfully!"); } } $vbLabelText $csharpLabel IronPDF 的方法会返回一个 PdfDocument 对象,在保存之前可以进行其他操作(合并、水印、安全)。 有关更多选项,请参阅 HTML 转 PDF 文档。 将 URL 转换为带有页面设置的 PDF 文件 ExpertPdf 的实现: // NuGet: Install-Package ExpertPdf.HtmlToPdf using ExpertPdf.HtmlToPdf; using System; class Program { static void Main() { // Create the PDF converter PdfConverter pdfConverter = new PdfConverter(); // Set page size and orientation pdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4; pdfConverter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait; // Convert URL to PDF byte[] pdfBytes = pdfConverter.GetPdfBytesFromUrl("https://www.example.com"); // Save to file System.IO.File.WriteAllBytes("webpage.pdf", pdfBytes); Console.WriteLine("PDF from URL created successfully!"); } } // NuGet: Install-Package ExpertPdf.HtmlToPdf using ExpertPdf.HtmlToPdf; using System; class Program { static void Main() { // Create the PDF converter PdfConverter pdfConverter = new PdfConverter(); // Set page size and orientation pdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4; pdfConverter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait; // Convert URL to PDF byte[] pdfBytes = pdfConverter.GetPdfBytesFromUrl("https://www.example.com"); // Save to file System.IO.File.WriteAllBytes("webpage.pdf", pdfBytes); Console.WriteLine("PDF from URL created successfully!"); } } $vbLabelText $csharpLabel IronPDF 实现: // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { // Create a PDF renderer var renderer = new ChromePdfRenderer(); // Set page size and orientation renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait; // Convert URL to PDF var pdf = renderer.RenderUrlAsPdf("https://www.example.com"); // Save to file pdf.SaveAs("webpage.pdf"); Console.WriteLine("PDF from URL created successfully!"); } } // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { // Create a PDF renderer var renderer = new ChromePdfRenderer(); // Set page size and orientation renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait; // Convert URL to PDF var pdf = renderer.RenderUrlAsPdf("https://www.example.com"); // Save to file pdf.SaveAs("webpage.pdf"); Console.WriteLine("PDF from URL created successfully!"); } } $vbLabelText $csharpLabel IronPDF 的 RenderingOptions 为页面配置提供了直接的属性访问。 有关更多选项,请参阅 URL to PDF 文档。 带页码的页眉和页脚 本示例展示了页眉/页脚配置的关键区别--ExpertPdf 使用单独的PdfHeaderOptions和PdfFooterOptions类,并带有 &p;/&P; 标记,而IronPDF使用 TextHeaderFooter 并带有 {page}/{total-pages} 占位符。 ExpertPdf 的实现: // NuGet: Install-Package ExpertPdf.HtmlToPdf using ExpertPdf.HtmlToPdf; using System; class Program { static void Main() { // Create the PDF converter PdfConverter pdfConverter = new PdfConverter(); // Enable header pdfConverter.PdfHeaderOptions.ShowHeader = true; pdfConverter.PdfHeaderOptions.HeaderText = "Document Header"; pdfConverter.PdfHeaderOptions.HeaderTextAlignment = HorizontalTextAlign.Center; // Enable footer with page numbers pdfConverter.PdfFooterOptions.ShowFooter = true; pdfConverter.PdfFooterOptions.FooterText = "Page &p; of &P;"; pdfConverter.PdfFooterOptions.FooterTextAlignment = HorizontalTextAlign.Right; // Convert HTML file to PDF byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlFile("input.html"); // Save to file System.IO.File.WriteAllBytes("output-with-header-footer.pdf", pdfBytes); Console.WriteLine("PDF with headers and footers created successfully!"); } } // NuGet: Install-Package ExpertPdf.HtmlToPdf using ExpertPdf.HtmlToPdf; using System; class Program { static void Main() { // Create the PDF converter PdfConverter pdfConverter = new PdfConverter(); // Enable header pdfConverter.PdfHeaderOptions.ShowHeader = true; pdfConverter.PdfHeaderOptions.HeaderText = "Document Header"; pdfConverter.PdfHeaderOptions.HeaderTextAlignment = HorizontalTextAlign.Center; // Enable footer with page numbers pdfConverter.PdfFooterOptions.ShowFooter = true; pdfConverter.PdfFooterOptions.FooterText = "Page &p; of &P;"; pdfConverter.PdfFooterOptions.FooterTextAlignment = HorizontalTextAlign.Right; // Convert HTML file to PDF byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlFile("input.html"); // Save to file System.IO.File.WriteAllBytes("output-with-header-footer.pdf", pdfBytes); Console.WriteLine("PDF with headers and footers created successfully!"); } } $vbLabelText $csharpLabel IronPDF 实现: // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { // Create a PDF renderer var renderer = new ChromePdfRenderer(); // Configure header renderer.RenderingOptions.TextHeader = new TextHeaderFooter() { CenterText = "Document Header", DrawDividerLine = true }; // Configure footer with page numbers renderer.RenderingOptions.TextFooter = new TextHeaderFooter() { RightText = "Page {page} of {total-pages}", DrawDividerLine = true }; // Convert HTML file to PDF var pdf = renderer.RenderHtmlFileAsPdf("input.html"); // Save to file pdf.SaveAs("output-with-header-footer.pdf"); Console.WriteLine("PDF with headers and footers created successfully!"); } } // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { // Create a PDF renderer var renderer = new ChromePdfRenderer(); // Configure header renderer.RenderingOptions.TextHeader = new TextHeaderFooter() { CenterText = "Document Header", DrawDividerLine = true }; // Configure footer with page numbers renderer.RenderingOptions.TextFooter = new TextHeaderFooter() { RightText = "Page {page} of {total-pages}", DrawDividerLine = true }; // Convert HTML file to PDF var pdf = renderer.RenderHtmlFileAsPdf("input.html"); // Save to file pdf.SaveAs("output-with-header-footer.pdf"); Console.WriteLine("PDF with headers and footers created successfully!"); } } $vbLabelText $csharpLabel IronPDF 的 TextHeaderFooter 提供了 LeftText, CenterText 和 RightText 属性,并带有可选的分隔线。 对于基于 HTML 的标题,请使用 HtmlHeaderFooter. 有关更多选项,请参阅页眉和页脚文档。 关键迁移说明 许可密钥位置 ExpertPdf 采用按转换器授权的方式。IronPDF在启动时使用一次全局许可设置: //ExpertPdf- per converter pdfConverter.LicenseKey = "EXPERTPDF-LICENSE"; //IronPDF- global, set once IronPdf.License.LicenseKey = "IRONPDF-LICENSE"; //ExpertPdf- per converter pdfConverter.LicenseKey = "EXPERTPDF-LICENSE"; //IronPDF- global, set once IronPdf.License.LicenseKey = "IRONPDF-LICENSE"; $vbLabelText $csharpLabel 页面编号标记转换 用IronPDF占位符替换ExpertPdf标记: // ExpertPdf "Page &p; of &P;" // IronPDF "Page {page} of {total-pages}" // ExpertPdf "Page &p; of &P;" // IronPDF "Page {page} of {total-pages}" $vbLabelText $csharpLabel 碎片化软件包合并 ExpertPdf 的独立软件包(PDFMerge、PDFSecurity、PDFSplit、PdfToImage)均包含在 IronPdf 的单一软件包中: //ExpertPdf- requires separate PDFMerge package var merger = new PdfMerge(); merger.AppendPDFFile("file1.pdf"); merger.AppendPDFFile("file2.pdf"); merger.SaveMergedPDFToFile("merged.pdf"); //IronPDF- included in main package var pdf1 = PdfDocument.FromFile("file1.pdf"); var pdf2 = PdfDocument.FromFile("file2.pdf"); var merged = PdfDocument.Merge(pdf1, pdf2); merged.SaveAs("merged.pdf"); //ExpertPdf- requires separate PDFMerge package var merger = new PdfMerge(); merger.AppendPDFFile("file1.pdf"); merger.AppendPDFFile("file2.pdf"); merger.SaveMergedPDFToFile("merged.pdf"); //IronPDF- included in main package var pdf1 = PdfDocument.FromFile("file1.pdf"); var pdf2 = PdfDocument.FromFile("file2.pdf"); var merged = PdfDocument.Merge(pdf1, pdf2); merged.SaveAs("merged.pdf"); $vbLabelText $csharpLabel 有关更多合并选项,请参阅 IronPDF合并文档。 自定义页面大小 ExpertPdf 使用点。 IronPdf 使用毫米。 转换:点 / 72 * 25.4 = 毫米` 迁移后核对表 完成代码迁移后,请验证以下内容: 生成PDF文件的可视化比较 核对页眉/页脚和页码 测试安全/加密设置 验证合并操作 检查自定义页面尺寸 性能基准测试 跨平台测试 删除ExpertPdf许可证文件 更新文档 未来保护您的 PDF 基础架构 .NET10即将推出,C# 14也将引入新的语言特性,因此选择一个开发活跃、渲染现代的 PDF 库可以确保长期的兼容性。IronPDF的每月更新和最新 Chrome 引擎为 PDF 生成奠定了基础,当项目扩展到 2025 年和 2026 年时,PDF 生成将继续正确使用现代 CSS3 布局(Flexbox、Grid)--不像ExpertPdf的传统 Chrome 版本被冻结在时间中。 其他资源 IronPDF文档 HTML转PDF教程 API 参考 NuGet软件包 许可选项 从ExpertPdf迁移到IronPDF可以消除文档冻结、传统 Chrome 浏览器渲染、零散的产品许可和有限的现代 .NET 支持等难题。 过渡到使用最新 Chromium 引擎积极维护的库,可确保您的 PDF 生成与不断发展的网络标准和 .NET Framework 保持同步。 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# 从 FastReport 迁移到 IronPDF如何用 C# 从 EO.Pdf 迁移到 I...
已发布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 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多