跳過到頁腳內容
遷移指南

如何在 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 生成新手的吸引人的選擇。

然而,潛在使用者必須了解其重要的限制。 儘管SelectPdf宣稱具有跨平台的功能,但它只能在Windows環境下運作。 在考慮以雲端為基礎的部署解決方案(例如Azure 功能或 Docker 等容器)時,這會造成很大的障礙。 此外,其免費版有很大的限制,在套用強烈的水印前最多只能翻譯五頁。選擇 PDF利用過時的 Blink fork 和基於 WebKit 的架構,這會造成與CSS 網格和進階 flexbox 等現代網頁技術的相容性問題。

選擇 PDF的關鍵限制

問題影響力IronPdf 解決方案
僅限視窗使用無法部署至 Linux、Docker、Azure Functions完全跨平台支援
過時的呈現引擎現代 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 變數不支援全面支援
Docker不支援官方圖片
Azure 功能不支援全面支援
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_number}</編碼{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 to 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.PdfPageSizerenderer.RenderingOptions.PaperSize
  • converter.Options.PdfPageOrientationrenderer.RenderingOptions.PaperOrientation。 -<編碼>PdfPageSize.A4</編碼→ PdfPaperSize.A4
  • PdfPageOrientation.PortraitPdfPaperOrientation.Portrait

邊界屬性保持相同的名稱和單位。


僅限 Windows 的問題

選擇 PDF的平台限制

儘管有任何行銷宣稱,SelectPdf 明確表示不支援

  • Linux (任何發行版)
  • MacOS
  • Docker 容器
  • Azure 功能
  • AWS Lambda
  • Google 雲端功能
  • 任何基於 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⚠️ 基本✅ 全文
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 套件
  • [ ] 更新命名空間匯入 (using SelectPdf;using IronPdf;)
  • [ ] 將<編碼>HtmlToPdf</編碼替換為 ChromePdfRenderer
  • [ ] 將 ConvertHtmlString() 替換為 RenderHtmlAsPdf()
  • [將 ConvertUrl() 替換為 RenderUrlAsPdf()
  • [ ] 更新選項屬性名稱 (Options.PdfPageSizeRenderingOptions.PaperSize)
  • [ ] 將 PdfPageSize 轉換為 PdfPaperSize
  • [ ] 將 PdfPageOrientation 轉換為 PdfPaperOrientation
  • [ ] 將 doc.Save() 替換為 pdf.SaveAs()
  • [ ] 移除所有<編碼>doc.Close()</編碼呼叫
  • [ ] 修正頁數占位符 ({page_number}{page},<編碼>{總頁數}</編碼→ {total-pages})
  • [ ] 在應用程式啟動時加入授權初始化

後遷移

  • [ ] 執行所有單元測試
  • [驗證 CSS 的呈現(尤其是 Grid/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.轉換器類別HtmlToPdfChromePdfRenderer. 6.HTML 轉換ConvertHtmlString()RenderHtmlAsPdf() 7.URL 轉換ConvertUrl()RenderUrlAsPdf() 8.儲存方法doc.Save()pdf.SaveAs() 9.清理doc.Close() 必須 → 不需要 (自動) 10.頁面大小PdfPageSize.A4PdfPaperSize.A4 11.方向PdfPageOrientationPdfPaperOrientation 12.頁碼{page_number}{page},<編碼>{總頁數}</編碼→ {total-pages}.

尋求強大、現代化和跨平台解決方案的開發人員可能會傾向於 IronPDF,尤其是考慮到它對當代網路標準和部署環境的廣泛支援。

探索完整的IronPdf文件教程API參考,加速您的SelectPdf遷移。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。