迁移指南 如何在 C# 中从 SelectPdf 迁移到 IronPDF Curtis Chau 已发布:2026年2月1日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 从选择 PDF迁移到IronPDF可将您的 PDF 生成工作流程从使用过时渲染引擎的 Windows 专用解决方案转变为完全支持 CSS3 和 JavaScript 的现代跨平台库。 本指南提供了一个完整的、循序渐进的迁移路径,可以部署到 Linux、Docker、Azure Functions 以及选择 PDF无法支持的其他云平台。 为什么要从选择 PDF迁移到 IronPDF. 了解 SelectPdf. SelectPdf 是一个商业库,旨在使用 C# 将 HTML 内容转换为 PDF。 该库专为需要在其应用程序中无缝集成 PDF 生成功能的开发人员量身定制。选择 PDF的优势在于其简单的应用程序接口(API),这使它成为那些 PDF 生成新手的理想选择。 但是,潜在用户必须了解其关键的局限性。 尽管选择 PDF宣传具有跨平台功能,但它只能在 Windows 环境下运行。 在考虑基于云的部署解决方案(如Azure 功能或 Docker 等容器)时,这会造成很大的障碍。 此外,其免费版本有很大的局限性,在应用激进的水印之前最多只能翻译 5 页。选择 PDF采用了过时的 Blink fork 和基于 WebKit 的架构,这导致了与CSS 网格和高级 flexbox 等现代网络技术的兼容性问题。 SelectPdf的关键限制 问题 影响 IronPdf 解决方案 仅限窗口 无法部署到 Linux、Docker、Azure 功能 完全跨平台支持 过时的呈现引擎。 现代 CSS 失效,布局中断 最新的 Chromium 5页免费版本限制 在 5 页之后添加强力水印 免费试用 不支持 .NET 10 面向未来的问题 完全支持 .NET 10 云部署受阻 无法使用 AWS Lambda、Azure Functions 云原生 选择 PDF与IronPDF对比 特征 选择 PDF IronPDF 平台支持 仅限 Windows 完全跨平台,10 多个发行版 支持现代网络标准 有限(过时 Blink) 完全 CSS3、现代 Chromium 最大免费版本页数限制 5 页 灵活,无硬性限制 定价 起价 499 美元 透明灵活的定价 .NET 10 支持。 无 全面支持 云环境中的部署 不支持 完全支持 CSS 网格 有限的 全面支持 Flexbox 有限的 全面支持 CSS变量 不支持 全面支持 对接程序 不支持 官方图片 Azure 函数 不支持 全面支持 AWS-Lambda(AWS Lambda 不支持 全面支持 对于计划在 2025 年和 2026 年之前采用 .NET 10 和 C# 14 的团队,SelectPdf 明确表示不支持 .NET 10,从而产生了面向未来的问题。IronPDF提供对所有现代 .NET 版本的全面支持。 开始之前 前提条件 .NET 环境: .NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9/10+ NuGet 访问权限:能够安装 NuGet 包 IronPDF 许可证:请从ironpdf.com获取您的许可证密钥。 NuGet 软件包变更 # Remove SelectPdf dotnet remove package Select.HtmlToPdf # Install IronPDF dotnet add package IronPdf # Remove SelectPdf dotnet remove package Select.HtmlToPdf # Install IronPDF dotnet add package IronPdf SHELL 许可配置 // Add at application startup IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; // Add at application startup IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; $vbLabelText $csharpLabel 完整的 API 参考 命名空间变更 // Before: SelectPdf using SelectPdf; // After: IronPDF using IronPdf; using IronPdf.Engines.Chrome; // Before: SelectPdf using SelectPdf; // After: IronPDF using IronPdf; using IronPdf.Engines.Chrome; $vbLabelText $csharpLabel 核心 API 映射 选择 PDF IronPDF 备注 HtmlToPdf ChromePdfRenderer 核心转换器类 converter.ConvertHtmlString(html) renderer.RenderHtmlAsPdf(html) HTML 字符串转换 converter.ConvertUrl(url) renderer.RenderUrlAsPdf(url) URL 转换 doc.Save(路径) pdf.SaveAs(路径) 保存到文件 doc.Close() 不需要 IronPdf 处理清理工作 converter.Options.PdfPageSize renderer.RenderingOptions.PaperSize 纸张大小 converter.Options.PdfPageOrientation renderer.RenderingOptions.PaperOrientation 定位 converter.Options.MarginTop renderer.RenderingOptions.MarginTop 顶部保证金 converter.Options.MarginBottom renderer.RenderingOptions.MarginBottom 底边 converter.Options.MarginLeft renderer.RenderingOptions.MarginLeft 左侧空白 converter.Options.MarginRight renderer.RenderingOptions.MarginRight 右边距 PdfPageSize.A4 PdfPaperSize.A4 A4 大小的枚举 PdfPageOrientation.Portrait PdfPaperOrientation.Portrait 肖像枚举 PdfPageOrientation.Landscape PdfPaperOrientation.Landscape 景观枚举 {页码} {page} 页码占位符 {总页数} {总页数} 总页数占位符 代码迁移示例 示例 1:HTML 字符串到 PDF 的转换 之前 (SelectPdf): // NuGet: Install-Package Select.HtmlToPdf using SelectPdf; using System; class Program { static void Main() { string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"; HtmlToPdf converter = new HtmlToPdf(); PdfDocument doc = converter.ConvertHtmlString(htmlContent); doc.Save("document.pdf"); doc.Close(); Console.WriteLine("PDF generated from HTML string"); } } // NuGet: Install-Package Select.HtmlToPdf using SelectPdf; using System; class Program { static void Main() { string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"; HtmlToPdf converter = new HtmlToPdf(); PdfDocument doc = converter.ConvertHtmlString(htmlContent); doc.Save("document.pdf"); doc.Close(); Console.WriteLine("PDF generated from HTML string"); } } $vbLabelText $csharpLabel After (IronPDF): // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"; var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("document.pdf"); Console.WriteLine("PDF generated from HTML string"); } } // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"; var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("document.pdf"); Console.WriteLine("PDF generated from HTML string"); } } $vbLabelText $csharpLabel 本示例展示了核心 API 的差异。选择 PDF使用HtmlToPdf作为转换器类,调用 ConvertHtmlString() 创建 PdfDocument ,然后调用 Save() 和 Close() 进行持久化和清理。 IronPDF 使用ChromePdfRenderer与 RenderHtmlAsPdf() ,返回一个 PdfDocument 并通过 SaveAs() 保存。 取消了 Close() 调用-IronPDF 自动处理资源管理。 请参阅 HTML 转 PDF 文档,了解全面的示例。 示例 2:URL 到 PDF 的转换 之前 (SelectPdf): // NuGet: Install-Package Select.HtmlToPdf using SelectPdf; using System; class Program { static void Main() { HtmlToPdf converter = new HtmlToPdf(); PdfDocument doc = converter.ConvertUrl("https://www.example.com"); doc.Save("output.pdf"); doc.Close(); Console.WriteLine("PDF created successfully"); } } // NuGet: Install-Package Select.HtmlToPdf using SelectPdf; using System; class Program { static void Main() { HtmlToPdf converter = new HtmlToPdf(); PdfDocument doc = converter.ConvertUrl("https://www.example.com"); doc.Save("output.pdf"); doc.Close(); Console.WriteLine("PDF created successfully"); } } $vbLabelText $csharpLabel After (IronPDF): // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf("https://www.example.com"); pdf.SaveAs("output.pdf"); Console.WriteLine("PDF created successfully"); } } // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf("https://www.example.com"); pdf.SaveAs("output.pdf"); Console.WriteLine("PDF created successfully"); } } $vbLabelText $csharpLabel SelectPdf 的 ConvertUrl() 方法可直接映射到IronPDF的 RenderUrlAsPdf() 方法。 两者的关键区别在于渲染引擎:SelectPdf 使用的是过时的 Blink/WebKit fork,难以支持现代 CSS,而IronPDF使用的是最新稳定的 Chromium,完全支持 CSS3 和 JavaScript。 在我们的教程中了解更多信息。 示例 3:自定义页面设置和页边距 之前 (SelectPdf): // NuGet: Install-Package Select.HtmlToPdf using SelectPdf; using System; class Program { static void Main() { HtmlToPdf converter = new HtmlToPdf(); converter.Options.PdfPageSize = PdfPageSize.A4; converter.Options.PdfPageOrientation = PdfPageOrientation.Portrait; converter.Options.MarginTop = 20; converter.Options.MarginBottom = 20; converter.Options.MarginLeft = 20; converter.Options.MarginRight = 20; string html = "<html><body><h1>Custom Page Settings</h1></body></html>"; PdfDocument doc = converter.ConvertHtmlString(html); doc.Save("custom-settings.pdf"); doc.Close(); Console.WriteLine("PDF with custom settings created"); } } // NuGet: Install-Package Select.HtmlToPdf using SelectPdf; using System; class Program { static void Main() { HtmlToPdf converter = new HtmlToPdf(); converter.Options.PdfPageSize = PdfPageSize.A4; converter.Options.PdfPageOrientation = PdfPageOrientation.Portrait; converter.Options.MarginTop = 20; converter.Options.MarginBottom = 20; converter.Options.MarginLeft = 20; converter.Options.MarginRight = 20; string html = "<html><body><h1>Custom Page Settings</h1></body></html>"; PdfDocument doc = converter.ConvertHtmlString(html); doc.Save("custom-settings.pdf"); doc.Close(); Console.WriteLine("PDF with custom settings created"); } } $vbLabelText $csharpLabel After (IronPDF): // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Engines.Chrome; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait; renderer.RenderingOptions.MarginTop = 20; renderer.RenderingOptions.MarginBottom = 20; renderer.RenderingOptions.MarginLeft = 20; renderer.RenderingOptions.MarginRight = 20; string html = "<html><body><h1>Custom Page Settings</h1></body></html>"; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("custom-settings.pdf"); Console.WriteLine("PDF with custom settings created"); } } // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Engines.Chrome; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait; renderer.RenderingOptions.MarginTop = 20; renderer.RenderingOptions.MarginBottom = 20; renderer.RenderingOptions.MarginLeft = 20; renderer.RenderingOptions.MarginRight = 20; string html = "<html><body><h1>Custom Page Settings</h1></body></html>"; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("custom-settings.pdf"); Console.WriteLine("PDF with custom settings created"); } } $vbLabelText $csharpLabel 页面设置模式几乎完全相同,只是对属性名称进行了简单的更改: converter.Options.PdfPageSize</code> → <code>renderer.RenderingOptions.PaperSize converter.Options.PdfPageOrientation</code> → <code>renderer.RenderingOptions.PaperOrientation PdfPageSize.A4</code> → <code>PdfPaperSize.A4 PdfPageOrientation.Portrait</code> → <code>PdfPaperOrientation.Portrait 保证金属性保持相同的名称和单位。 仅限 Windows 的问题 选择 PDF的平台限制 尽管有各种营销宣传,但SelectPdf明确表示不支持: Linux(任何发行版) MacOS Docker 容器 Azure 功能 AWS Lambda 谷歌云功能 任何基于 ARM 的系统 这是一个基本的架构限制--SelectPdf 依赖于 Windows 特定的库,无法移植。 平台支持比较 平台 选择 PDF IronPDF Windows Server 2019+ ✅ ✅ 视窗 10/11 ✅ ✅ Ubuntu 20.04+ ❌ ✅ Debian 10+ ❌ ✅ CentOS 7+ ❌ ✅ 高山 Linux ❌ ✅ 亚马逊 Linux 2 ❌ ✅ MacOS 10.15 以上 ❌ ✅ Azure 应用服务(Linux) ❌ ✅ Azure 功能 ❌ ✅ AWS Lambda ❌ ✅ Docker (Linux) ❌ ✅ Kubernetes ❌ ✅ 过时的渲染引擎 CSS 功能支持比较 SelectPdf 使用的 Blink/WebKit fork 已经过时,跟不上现代网络标准的步伐: CSS 功能 选择 PDF IronPDF CSS 网格 ⚠️ 部分/已损坏 ✅ 全文 Flexbox (基础) ✅ ✅ Flexbox(间隙属性) ❌ ✅ CSS 变量 ❌ ✅ CSS calc() ⚠️ 有限公司 ✅ @ 媒体打印 ⚠️ 有限公司 ✅ @font-face ⚠️ 有限公司 ✅ 网络字体 ⚠️ 有限公司 ✅ SVG ⚠️ Basic ✅ 全文 CSS 转换 ⚠️ 有限公司 ✅ CSS 动画 ❌ ✅ 迁移后的新功能 迁移到IronPDF后,您将获得选择 PDF无法提供的功能: 跨平台部署 // ✅IronPDF- Works everywhere using IronPdf; //Azure 应用服务(Linux)- WORKS // Docker container - WORKS //AWS Lambda- WORKS // GitHub Actions on ubuntu-latest - WORKS // macOS development - WORKS var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<h1>Hello</h1>"); pdf.SaveAs("output.pdf"); // ✅IronPDF- Works everywhere using IronPdf; //Azure 应用服务(Linux)- WORKS // Docker container - WORKS //AWS Lambda- WORKS // GitHub Actions on ubuntu-latest - WORKS // macOS development - WORKS var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<h1>Hello</h1>"); pdf.SaveAs("output.pdf"); $vbLabelText $csharpLabel 现代 CSS 支持 // ✅IronPDF- Uses latest stable Chromium var renderer = new ChromePdfRenderer(); var html = @" <style> :root { --primary: #007bff; --gap: 20px; } .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--gap); } </style> <div class='grid'> <div style='background: var(--primary); color: white; padding: 1rem;'>Item 1</div> <div style='background: var(--primary); color: white; padding: 1rem;'>Item 2</div> <div style='background: var(--primary); color: white; padding: 1rem;'>Item 3</div> </div>"; var pdf = renderer.RenderHtmlAsPdf(html); // All modern CSS features render correctly! // ✅IronPDF- Uses latest stable Chromium var renderer = new ChromePdfRenderer(); var html = @" <style> :root { --primary: #007bff; --gap: 20px; } .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--gap); } </style> <div class='grid'> <div style='background: var(--primary); color: white; padding: 1rem;'>Item 1</div> <div style='background: var(--primary); color: white; padding: 1rem;'>Item 2</div> <div style='background: var(--primary); color: white; padding: 1rem;'>Item 3</div> </div>"; var pdf = renderer.RenderHtmlAsPdf(html); // All modern CSS features render correctly! $vbLabelText $csharpLabel 无需 Close(). IronPdf 自动处理资源管理: // Option 1: Let garbage collection handle it var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); // No Close() needed // Option 2: Explicit disposal using (var pdf = renderer.RenderHtmlAsPdf(html)) { pdf.SaveAs("output.pdf"); } // Option 1: Let garbage collection handle it var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); // No Close() needed // Option 2: Explicit disposal using (var pdf = renderer.RenderHtmlAsPdf(html)) { pdf.SaveAs("output.pdf"); } $vbLabelText $csharpLabel 迁移清单 迁移前 审核代码库中所有选择 PDF的使用情况 记录当前转换器选项的映射 确定页眉/页脚的实现方式 检查页码占位符语法({页码}→{page}`) 注意基本 URL 处理模式 验证目标部署平台 从ironpdf.com获取IronPDF许可证密钥 代码更新 删除Select.HtmlToPdf NuGet 包 安装IronPdf NuGet 包 更新命名空间导入( using SelectPdf; → using IronPdf; ) 将HtmlToPdf替换为ChromePdfRenderer 将ConvertHtmlString()替换为RenderHtmlAsPdf() 将ConvertUrl()替换为RenderUrlAsPdf() 更新选项属性名称( Options.PdfPageSize → RenderingOptions.PaperSize ) 将PdfPageSize转换为PdfPaperSize 将PdfPageOrientation转换为PdfPaperOrientation 将doc.Save()替换为pdf.SaveAs() 删除所有doc.Close()调用 修复页码占位符({页码}→{page},{总页数}→{总页数}) 在应用程序启动时添加许可证初始化 后迁移 运行所有单元测试 验证 CSS 渲染效果(尤其是 Grid/Flexbox 布局) 测试 JavaScript 执行 核对页眉/页脚页码 在目标平台(Linux、Docker 等)上进行测试 性能测试 比较 PDF 输出质量 更新 CI/CD 流水线 测试云部署(如适用) 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# 从 Spire.PDF 迁移到 IronPDF如何用 C# 从 Scryber.Core 迁...
已发布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 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多