跳至頁尾內容
移民指南

如何在 C# 中將 PDFBolt 遷移到 IronPDF

從 PDFBolt 遷移到 IronPDF,會將您的 .NET PDF 工作流程從僅限雲端的 SaaS 服務(具有外部文件處理)遷移到具有完全資料隱私和無限本地生成的自託管庫。 本指南提供了一個全面的、逐步的遷移路徑,消除了網路依賴性、使用限制和外部資料傳輸,同時獲得了 PDFBolt 無法提供的 PDF 操作功能。

為什麼要從 PDFBolt 遷移到 IronPDF

純雲端問題

PDFBolt 是一個純雲端 SaaS 平台,它在外部伺服器上處理您的文件。 雖然這種架構便於快速建立原型,但它為生產應用帶來了重大挑戰:

1.僅雲端處理:每個文件都透過外部伺服器處理-沒有自架選項,這可能會阻礙那些需要更多控制其資料和流程的企業。

2.資料隱私風險:敏感文件(合約、醫療記錄、財務資料)必須向外傳輸。 處理敏感資訊的公司會有合理的擔憂。

3.使用限制:免費套餐每月最多只能處理 100 個文檔,這對於規模較大的企業來說可能不夠用。 按文檔付費的定價模式對於生產工作負載來說成本會迅速累積。

4.網路依賴:網路中斷或 PDFBolt 服務中斷意味著 PDF 產生將完全停止。

5.延遲:與本地處理相比,網路往返會使每次轉換增加幾秒鐘。

6.合規性問題: GDPR、HIPAA 和 SOC2 審計因外部文件處理而變得複雜。

  1. API 金鑰安全:洩漏的 API 金鑰可能導致未經授權的使用,並被計入您的帳戶。

8.供應商鎖定:如果 PDFBolt 更改條款或關閉,您的應用程式將無法運作。

PDFBolt 與 IronPDF 對比

憂慮PDFBoltIronPDF
數據位置外部伺服器您的伺服器僅
使用限制前100個免費,之後按文件收費無限
需要網路連線是的,一直都是如此。
延遲網路往返毫秒
遵守複雜(外部處理)簡單(本地處理)
成本模型每個文檔一次性或年度
離線操作不可能的完全支持
API金鑰風險洩漏 = 計費許可證密鑰,無計費風險

對於計劃在 2025 年和 2026 年採用 .NET 10 和 C# 14 的團隊,IronPDF 提供了一個自託管的基礎架構,可確保完全的資料隱私,並消除對外部雲端服務的依賴。


開始之前

先決條件

  1. .NET 環境: .NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet 存取權限:能夠安裝 NuGet 套件
  3. IronPDF 許可證:請從ironpdf.com取得您的許可證密鑰。

NuGet 套件變更

# Remove PDFBolt
dotnet remove package PDFBolt

# Install IronPDF
dotnet add package IronPdf
# Remove PDFBolt
dotnet remove package PDFBolt

# Install IronPDF
dotnet add package IronPdf
SHELL

許可證配置

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
$vbLabelText   $csharpLabel

識別 PDFBolt 使用情況

# Find all PDFBolt references
grep -r "PDFBolt\|HtmlToPdfConverter\|ConvertHtmlString\|ConvertUrl" --include="*.cs" .

# Find API key references
grep -r "PDFBOLT\|ApiKey" --include="*.cs" --include="*.json" --include="*.config" .
# Find all PDFBolt references
grep -r "PDFBolt\|HtmlToPdfConverter\|ConvertHtmlString\|ConvertUrl" --include="*.cs" .

# Find API key references
grep -r "PDFBOLT\|ApiKey" --include="*.cs" --include="*.json" --include="*.config" .
SHELL

完整 API 參考

核心類別映射

PDFBoltIronPDF筆記
new HtmlToPdfConverter()new ChromePdfRenderer()主渲染器
PageSizePdfPaperSize紙張尺寸枚舉
(返回位元組數組)PdfDocument富文檔對象

轉換方法映射

PDFBoltIronPDF筆記
converter.ConvertHtmlString(html)renderer.RenderHtmlAsPdf(html)返回 PDF 文檔
converter.ConvertUrl(url)renderer.RenderUrlAsPdf(url)返回 PDF 文檔

輸出方法映射

PDFBoltIronPDF筆記
File.WriteAllBytes(path, pdf)pdf.SaveAs(path)直接保存方法
(pdf 是位元組數組)pdf.BinaryData取得位元組數組
(手動流)pdf.Stream流屬性

頁面配置映射

PDFBoltIronPDF筆記
converter.PageSize = PageSize.A4renderer.RenderingOptions.PaperSize = PdfPaperSize.A4紙張尺寸編號
converter.MarginTop = 20renderer.RenderingOptions.MarginTop = 20單位:毫米
converter.MarginBottom = 20renderer.RenderingOptions.MarginBottom = 20單位:毫米
converter.MarginLeft = 15renderer.RenderingOptions.MarginLeft = 15單位:毫米
converter.MarginRight = 15renderer.RenderingOptions.MarginRight = 15單位:毫米

頁首/頁尾佔位符映射

PDFBoltIronPDF筆記
{pageNumber}{page}目前頁面
{totalPages}{total-pages}總頁數
{date}{date}相同的
{title}{html-title}文件標題

程式碼遷移範例

範例 1:基本 HTML 轉 PDF

之前(PDFBolt):

// NuGet: Install-Package PDFBolt
using PDFBolt;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = converter.ConvertHtmlString(html);
        File.WriteAllBytes("output.pdf", pdf);
    }
}
// NuGet: Install-Package PDFBolt
using PDFBolt;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = converter.ConvertHtmlString(html);
        File.WriteAllBytes("output.pdf", pdf);
    }
}
$vbLabelText   $csharpLabel

(IronPDF 之後):

// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

根本區別在於返回類型和保存模式。 PDFBolt 的HtmlToPdfConverter.ConvertHtmlString()傳回一個byte[] ,您必須使用File.WriteAllBytes()手動將其寫入磁碟。 這需要導入System.IO並自行處理文件操作。

IronPDF 的ChromePdfRenderer.RenderHtmlAsPdf()傳回一個內建SaveAs()方法的PdfDocument物件。 這種物件導向的方法提供了額外的好處:您可以在儲存之前對 PDF 進行操作(新增浮水印、合併文件、新增安全措施)。 如果您需要原始位元組以與現有程式碼相容,請使用pdf.BinaryData 。 有關其他渲染選項,請參閱HTML 轉 PDF 文件

範例 2:URL 轉 PDF

之前(PDFBolt):

// NuGet: Install-Package PDFBolt
using PDFBolt;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var pdf = converter.ConvertUrl("https://www.example.com");
        File.WriteAllBytes("webpage.pdf", pdf);
    }
}
// NuGet: Install-Package PDFBolt
using PDFBolt;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var pdf = converter.ConvertUrl("https://www.example.com");
        File.WriteAllBytes("webpage.pdf", pdf);
    }
}
$vbLabelText   $csharpLabel

(IronPDF 之後):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
$vbLabelText   $csharpLabel

PDFBolt 的 URL 轉換模式與 HTML 轉換遵循相同的方法: ConvertUrl()傳回byte[] ,需要使用File.WriteAllBytes()進行儲存。 請注意,即使您已經透過 URL 取得數據,PDFBolt 仍然需要與其伺服器進行網路往返。

IronPDF 的RenderUrlAsPdf()方法傳回一個內建SaveAs()方法的PdfDocument 。 IronPDF 的主要優勢在於它在本機上執行 URL 取得和 PDF 渲染——資料不會離開您的基礎架構。 請注意,IronPDF 版本甚至不需要using System.IO;對於這種簡單的情況。 了解更多關於URL轉PDF的資訊

範例 3:帶有自訂頁面設定的 HTML 文件

之前(PDFBolt):

// NuGet: Install-Package PDFBolt
using PDFBolt;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        converter.PageSize = PageSize.A4;
        converter.MarginTop = 20;
        converter.MarginBottom = 20;
        var html = File.ReadAllText("input.html");
        var pdf = converter.ConvertHtmlString(html);
        File.WriteAllBytes("output.pdf", pdf);
    }
}
// NuGet: Install-Package PDFBolt
using PDFBolt;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        converter.PageSize = PageSize.A4;
        converter.MarginTop = 20;
        converter.MarginBottom = 20;
        var html = File.ReadAllText("input.html");
        var pdf = converter.ConvertHtmlString(html);
        File.WriteAllBytes("output.pdf", pdf);
    }
}
$vbLabelText   $csharpLabel

(IronPDF 之後):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        var html = File.ReadAllText("input.html");
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        var html = File.ReadAllText("input.html");
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

此範例演示了頁面配置的差異。 PDFBolt 直接在轉換器物件上設定屬性( converter.PageSizeconverter.MarginTop )。 IronPDF 在渲染器上使用RenderingOptions物件( renderer.RenderingOptions.PaperSizerenderer.RenderingOptions.MarginTop )。

關鍵映射:

  • PageSize.A4PdfPaperSize.A4 (枚舉名稱不同)
  • MarginTop = 20RenderingOptions.MarginTop = 20 (透過 RenderingOptions)

兩者都使用毫米作為邊距單位,因此您現有的邊距值應該可以直接轉移。 訪問PdfPaperSize枚舉需要IronPdf.Rendering命名空間。 有關其他頁面配置選項,請參閱渲染選項文件


關鍵遷移說明

返回類型變更

PDFBolt 直接回到byte[] ; IronPDF 返回PdfDocument

// PDFBolt pattern:
byte[] pdf = converter.ConvertHtmlString(html);
File.WriteAllBytes("output.pdf", pdf);

// IronPDF pattern:
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");

// Or if you need bytes:
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;
// PDFBolt pattern:
byte[] pdf = converter.ConvertHtmlString(html);
File.WriteAllBytes("output.pdf", pdf);

// IronPDF pattern:
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");

// Or if you need bytes:
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;
$vbLabelText   $csharpLabel

類別名稱變更

主類別名稱從"轉換器導向"變成"渲染器導向":

// PDFBolt
var converter = new HtmlToPdfConverter();

// IronPDF
var renderer = new ChromePdfRenderer();
// PDFBolt
var converter = new HtmlToPdfConverter();

// IronPDF
var renderer = new ChromePdfRenderer();
$vbLabelText   $csharpLabel

配置模式變更

PDFBolt 使用直接屬性; IronPDF 使用RenderingOptions

// PDFBolt: Direct properties
converter.PageSize = PageSize.A4;
converter.MarginTop = 20;

// IronPDF: Via RenderingOptions
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
// PDFBolt: Direct properties
converter.PageSize = PageSize.A4;
converter.MarginTop = 20;

// IronPDF: Via RenderingOptions
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
$vbLabelText   $csharpLabel

API金鑰消除

PDFBolt 需要對每個請求進行 API 金鑰管理; IronPDF 使用一次許可證金鑰:

// PDFBolt: API key per client (security risk if leaked)
var apiKey = config["PDFBolt:ApiKey"];
var client = new Client(apiKey);

// IronPDF: License key once at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();
// PDFBolt: API key per client (security risk if leaked)
var apiKey = config["PDFBolt:ApiKey"];
var client = new Client(apiKey);

// IronPDF: License key once at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();
$vbLabelText   $csharpLabel

移除網路錯誤處理

本地處理意味著無需處理網路錯誤:

// PDFBolt: Network error handling required
catch (HttpRequestException ex)
catch (TaskCanceledException)
catch (TimeoutException)

// IronPDF: Remove network-specific catches entirely
// PDFBolt: Network error handling required
catch (HttpRequestException ex)
catch (TaskCanceledException)
catch (TimeoutException)

// IronPDF: Remove network-specific catches entirely
$vbLabelText   $csharpLabel

新增功能

遷移到 IronPDF 後,您將獲得 PDFBolt 無法提供的功能:

// PDF Merging (not available in PDFBolt)
var merged = PdfDocument.Merge(pdf1, pdf2);

// Watermarks (not available in PDFBolt)
pdf.ApplyWatermark("<h1 style='opacity:0.3;'>DRAFT</h1>");

// Password Protection (not available in PDFBolt)
pdf.SecuritySettings.UserPassword = "secret";

// Text Extraction (not available in PDFBolt)
string text = pdf.ExtractAllText();

// PDF to Images (not available in PDFBolt)
pdf.RasterizeToImageFiles("page_*.png");
// PDF Merging (not available in PDFBolt)
var merged = PdfDocument.Merge(pdf1, pdf2);

// Watermarks (not available in PDFBolt)
pdf.ApplyWatermark("<h1 style='opacity:0.3;'>DRAFT</h1>");

// Password Protection (not available in PDFBolt)
pdf.SecuritySettings.UserPassword = "secret";

// Text Extraction (not available in PDFBolt)
string text = pdf.ExtractAllText();

// PDF to Images (not available in PDFBolt)
pdf.RasterizeToImageFiles("page_*.png");
$vbLabelText   $csharpLabel

故障排除

問題 1:未找到 HtmlToPdfConverter

問題: IronPDF 中不存在HtmlToPdfConverter類別。

解決方案:使用ChromePdfRenderer

// PDFBolt
var converter = new HtmlToPdfConverter();

// IronPDF
var renderer = new ChromePdfRenderer();
// PDFBolt
var converter = new HtmlToPdfConverter();

// IronPDF
var renderer = new ChromePdfRenderer();
$vbLabelText   $csharpLabel

問題 2:未找到 ConvertHtmlString 函數

問題: ConvertHtmlString()方法不存在。

解決方案:使用RenderHtmlAsPdf()

// PDFBolt
var pdf = converter.ConvertHtmlString(html);

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
// PDFBolt
var pdf = converter.ConvertHtmlString(html);

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
$vbLabelText   $csharpLabel

問題 3:未找到 ConvertUrl

問題: ConvertUrl()方法不存在。

解決方案:使用RenderUrlAsPdf()

// PDFBolt
var pdf = converter.ConvertUrl(url);

// IronPDF
var pdf = renderer.RenderUrlAsPdf(url);
// PDFBolt
var pdf = converter.ConvertUrl(url);

// IronPDF
var pdf = renderer.RenderUrlAsPdf(url);
$vbLabelText   $csharpLabel

問題 4:未找到 PageSize 列舉

問題: PageSize枚舉不存在。

解決方案:使用IronPdf.Rendering中的PdfPaperSize

// PDFBolt
converter.PageSize = PageSize.A4;

// IronPDF
using IronPdf.Rendering;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
// PDFBolt
converter.PageSize = PageSize.A4;

// IronPDF
using IronPdf.Rendering;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
$vbLabelText   $csharpLabel

問題 5:首次產生 PDF 檔案速度慢

問題:初始渲染時間比預期長。

解決方案: Chromium 引擎在首次使用時進行初始化。 如有需要,可預先加熱:

// Warm up during application startup
var renderer = new ChromePdfRenderer();
renderer.RenderHtmlAsPdf("<html><body></body></html>");
// Warm up during application startup
var renderer = new ChromePdfRenderer();
renderer.RenderHtmlAsPdf("<html><body></body></html>");
$vbLabelText   $csharpLabel

遷移清單

遷移前

  • 清點程式碼庫中所有 PDFBolt 的使用情況
  • 記錄目前頁面配置設定(頁面大小、邊距)
  • 識別要移除的 API 金鑰管理程式碼
  • 列出任何要刪除的速率限製或網路錯誤處理程序
  • 取得 IronPDF 許可證密鑰

軟體包變更

  • 移除PDFBolt NuGet 套件 安裝IronPdf NuGet 套件: dotnet add package IronPdf
  • 增加using IronPdf;命名空間
  • 增加using IronPdf.Rendering;用於紙張尺寸枚舉

程式碼更改

  • 在啟動時新增許可證金鑰配置
  • HtmlToPdfConverter替換為ChromePdfRenderer
  • ConvertHtmlString()替換為RenderHtmlAsPdf()
  • ConvertUrl()替換為RenderUrlAsPdf()
  • File.WriteAllBytes()替換為pdf.SaveAs()
  • PageSize更新為RenderingOptions.PaperSize
  • 將邊距屬性更新為RenderingOptions.MarginTop等。
  • 移除 API 金鑰管理程式碼
  • 移除速率限制處理程式碼
  • 移除網路錯誤處理

移民後

  • 從設定檔中刪除 API 金鑰
  • 從金鑰管理員移除 API 金鑰
  • 執行所有測試,比較 PDF 輸出
  • 驗證頁面尺寸和邊距是否正確顯示。
  • 考慮新增功能(浮水印、安全、合併)

柯蒂斯·週
技術撰稿人

Curtis Chau擁有卡爾頓大學電腦科學學士學位,專長於前端開發,精通Node.js、TypeScript、JavaScript和React。他熱衷於打造直覺美觀的使用者介面,喜歡使用現代框架,並擅長撰寫結構清晰、視覺效果出色的使用者手冊。

除了開發工作之外,柯蒂斯對物聯網 (IoT) 也抱有濃厚的興趣,致力於探索硬體和軟體整合的創新方法。閒暇時,他喜歡玩遊戲和製作 Discord 機器人,將他對科技的熱愛與創造力結合。