如何在 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的比較
| 特點 | 選擇 PDF | IronPDF |
|---|---|---|
| 平台支援 | 僅限 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授權組態
// 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_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.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 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.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.PaperSizeconverter.Options.PdfPageOrientation→renderer.RenderingOptions.PaperOrientation。 -<編碼>PdfPageSize.A4</編碼→PdfPaperSize.A4PdfPageOrientation.Portrait→PdfPaperOrientation.Portrait
邊界屬性保持相同的名稱和單位。
僅限 Windows 的問題
選擇 PDF的平台限制
儘管有任何行銷宣稱,SelectPdf 明確表示不支援:
- Linux (任何發行版)
- MacOS
- Docker 容器
- Azure 功能
- AWS Lambda
- Google 雲端功能
- 任何基於 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 | ⚠️ 基本 | ✅ 全文 |
| 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 套件 - [ ] 更新命名空間匯入 (
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_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.轉換器類別: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,尤其是考慮到它對當代網路標準和部署環境的廣泛支援。






