跳至页脚内容
迁移指南

如何在 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对比

特征选择 PDFIronPDF
平台支持仅限 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
SHELL

许可配置

// 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
$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;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

核心 API 映射

选择 PDFIronPDF备注
<代码>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.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

页面设置模式几乎完全相同,只是对属性名称进行了简单的更改:

  • <代码>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 特定的库,无法移植。

平台支持比较

平台选择 PDFIronPDF
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 功能选择 PDFIronPDF
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
$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!
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

迁移清单

迁移前

  • [审核代码库中所有选择 PDF的使用情况
  • [ ] 记录当前用于映射的转换器选项
  • [ ] 确定页眉/页脚实现
  • [ ] 检查页码占位符语法({page_number}{page})
  • [ ] 注意基本 URL 处理模式
  • [ ] 验证目标部署平台
  • [ ] 从 ironpdf.com 获取IronPDF许可证密钥

代码更新

  • [ ] 删除 Select.HtmlToPdf NuGet 软件包
  • [ ] 安装 IronPdf NuGet 软件包
  • [ ] 更新命名空间导入(使用 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,特别是考虑到它对当代网络标准和部署环境的广泛支持。

探索完整的IronPDF文档教程API参考,加速您的SelectPdf迁移。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。