如何在 C# 中从 SelectPdf 迁移到 IronPDF
从选择 PDF迁移到 IronPDF:完整的 C# 迁移指南。
从选择 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 版本的全面支持。
开始之前
前提条件
1..NET环境:.NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9/10+ 2.NuGet 访问:安装 NuGet 软件包的能力 3.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许可配置
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IRON VB CONVERTER ERROR developers@ironsoftware.com完整的 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;IRON VB CONVERTER ERROR developers@ironsoftware.com核心 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com本示例展示了核心 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comSelectPdf 的 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com页面设置模式几乎完全相同,只是对属性名称进行了简单的更改:
- <代码>converter.Options.PdfPageSize</代码> → <代码>renderer.RenderingOptions.PaperSize</代码
- <代码>converter.Options.PdfPageOrientation</代码> → <代码>renderer.RenderingOptions.PaperOrientation</代码
- <代码>PdfPageSize.A4</代码> → <代码>PdfPaperSize.A4</代码
- <代码>PdfPageOrientation.Portrait</代码> → <代码>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");IRON VB CONVERTER ERROR developers@ironsoftware.com现代 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!IRON VB CONVERTER ERROR developers@ironsoftware.com无需 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");
}IRON VB CONVERTER ERROR developers@ironsoftware.com迁移清单
迁移前
- [审核代码库中所有选择 PDF的使用情况
- [ ] 记录当前用于映射的转换器选项
- [ ] 确定页眉/页脚实现
- [ ] 检查页码占位符语法(
{page_number}→{page}) - [ ] 注意基本 URL 处理模式
- [ ] 验证目标部署平台
- [ ] 从 ironpdf.com 获取IronPDF许可证密钥
代码更新
- [ ] 删除
Select.HtmlToPdfNuGet 软件包 - [ ] 安装
IronPdfNuGet 软件包 - [ ] 更新命名空间导入(
使用 SelectPdf;→使用 IronPdf;) - [ ] 将<代码>HtmlToPdf</代码替换为
ChromePdfRenderer - [ ] 将
ConvertHtmlString()替换为RenderHtmlAsPdf()。 - [ ] 将
ConvertUrl()替换为RenderUrlAsPdf()。 - [ ] 更新选项属性名称(<代码>Options.PdfPageSize</代码> → <代码>RenderingOptions.PaperSize</代码)
- [ ] 将
PdfPageSize转换为PdfPaperSize - [ ] 将
PdfPageOrientation转换为PdfPaperOrientation - [ ] 将
doc.Save()替换为pdf.SaveAs()。 - [ ] 删除所有<代码>doc.Close()</代码调用
- [ ] 修复页码占位符(
{page_number}→{page},<代码>{总页数}</代码→{total-pages}) - [ ] 在应用程序启动时添加许可证初始化
后迁移
- [ ] 运行所有单元测试
- [ ] 验证 CSS 呈现(尤其是网格/Flexbox)
- [ ] 测试 JavaScript 的执行
- [ ] 核实页眉/页脚页码
- [ ] 在目标平台(Linux、Docker 等)上进行测试
- [ ] 性能测试
- [ ] 比较 PDF 输出质量
- [更新 CI/CD 管道
- [ ] 测试云部署(如适用)
结论
虽然选择 PDF是一个功能强大的 HTML 到 PDF 转换库,具有简单明了的 API,但它在平台灵活性和过时的网络标准支持方面的局限性可能会让开发人员望而却步。 该库谎称自己是跨平台的,但明确表示不支持 Linux、macOS、Docker 或 Azure Functions,因此不适合现代云部署。 免费版本在使用咄咄逼人的水印之前被严格限制在 5 页以内,而且其过时的 Chromium fork 在使用现代 CSS 功能(如网格和高级 Flexbox 布局)时也很吃力。
本次迁移的主要变化有 1.平台支持:仅限 Windows → 完全跨平台(10 多个 Linux 发行版、Docker、云计算) 2.渲染引擎:过时的 Blink/WebKit → 最新稳定的 Chromium 3.CSS 支持:有限的网格/Flexbox → 完全 CSS3 支持 4..NET支持:无.NET 10 → 完全支持.NET 10 5.转换器类:<代码>HtmlToPdf</代码> → <代码>ChromePdfRenderer</代码 6.HTML 转换:<代码>ConvertHtmlString()</代码> → <代码>RenderHtmlAsPdf()</代码 7.URL 转换:<代码>ConvertUrl()</代码> → <代码>RenderUrlAsPdf()</代码 8.保存方法:<代码>doc.Save()</代码> → <代码>pdf.SaveAs()</代码 9.清理:需要doc.Close() → 不需要(自动) 10.页面大小:<代码>PdfPageSize.A4</代码> → <代码>PdfPaperSize.A4</代码 11.方向:<代码>PdfPageOrientation</代码> → <代码>PdfPaperOrientation</代码 12.页码:{page_number} → {page},<代码>{总页数}</代码→ {total-pages}.
寻求强大、现代和跨平台解决方案的开发人员可能会倾向于 IronPDF,特别是考虑到它对当代网络标准和部署环境的广泛支持。






