跳至頁尾內容
遷移指南

如何在 C# 中從 PDFBolt 轉移到 IronPDF

將PDFBolt遷移到IronPDF,將您的.NET PDF工作流程從僅限雲端的SaaS REST服務轉移到自我托管的程式庫中,進行本地文件處理並且不受每個文件的配額限制。 本指南提供了一個逐步遷移路徑,消除網路依賴、每月使用上限和外部資料傳輸,同時增加PDFBolt未提供的PDF操作功能。

為何從PDFBolt遷移到IronPDF

僅限雲端的問題

PDFBolt是一個僅限雲端的SaaS平台,作為REST API來提供服務; 沒有官方的.NET SDK,沒有PDFBolt NuGet包。 整合是手工製作的,針對https://api.pdfbolt.com/v1/direct進行。 雖然方便於快速的原型設計,但這種架構在生產應用中會帶來挑戰:

  1. 僅限雲端處理: 每個文件都必須通過PDFBolt的伺服器 — 沒有自我托管的選項,這可能會阻礙需要更高資料流控制的團隊。

  2. 資料隱私考量: 高度機密的文件(例如合同,醫療記錄,財務資料)會被外部傳輸。 處理受監管資料的公司將有合理的審查疑慮。

  3. 使用限制: 免費層級每月限制為100個文件,20個請求/分鐘,1個並發請求,這可能無法滿足生產工作負載。 付費層級(根據pdfbolt.com/pricing)從每月19美元到每月249美元不等。

  4. 網路依賴: 互聯網中斷或PDFBolt停機意味著您的PDF生成將完全停止。

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

  6. 合規性審查: GDPR,HIPAA和SOC2審核通常需要在涉及外部文件處理時附加文件。

  7. API密鑰安全: API密鑰泄露可能導致未授權的使用被計費至您的帳戶。

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

PDFBolt與IronPDF的比較

關注事項 PDFBolt IronPDF
資料位置 外部伺服器 僅限您的伺服器
使用限制 每月100個免費/然後分級訂閱 無限制
需要互聯網 是的,總是需要
延遲 網路往返 本地
合規性 複雜(外部處理) 簡單(本地處理)
成本模型 每月訂閱層級(19至249美元/月) 一次性或年度
離線操作 不可能 全面支持
API密鑰風險 洩露=計費 授權密鑰,無計費風險

IronPDF在現代.NET上提供自我托管的基礎,保持文件處理在本地,消除了對外部雲服務的依賴。


開始之前

前提條件

  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包變更

PDFBolt沒有官方的.NET SDK和PDFBolt NuGet包,因此無需解除安裝。 PDFBolt端的清理是刪除手工製作的HttpClient包裝器和請求/響應DTOs。 然後安裝IronPDF:

# InstallIronPDF(replaces the hand-rolled HttpClient wrapper)
dotnet add package IronPdf
# InstallIronPDF(replaces the hand-rolled HttpClient wrapper)
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";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

識別PDFBolt的使用

# Find all PDFBolt REST calls
grep -rE "api\.pdfbolt\.com|API-KEY|/v1/direct" --include="*.cs" .

# Find API key references
grep -r "PDFBOLT\|ApiKey" --include="*.cs" --include="*.json" --include="*.config" .
# Find all PDFBolt REST calls
grep -rE "api\.pdfbolt\.com|API-KEY|/v1/direct" --include="*.cs" .

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

完整API參考

核心概念映射

PDFBolt(REST) IronPDF
HttpClient + API-KEY 標頭 new ChromePdfRenderer()
JSON請求主體 renderer.RenderingOptions
POST https://api.pdfbolt.com/v1/direct renderer.RenderHtmlAsPdf(...) / RenderUrlAsPdf(...)
響應 byte[] PdfDocument

轉換方法映射

PDFBolt(REST) IronPDF
POST /v1/direct 使用 { "html": <base64> } renderer.RenderHtmlAsPdf(html)
POST /v1/direct 使用 { "url": "..." } renderer.RenderUrlAsPdf(url)

輸出方法映射

PDFBolt(REST) IronPDF
await response.Content.ReadAsByteArrayAsync() 然後 File.WriteAllBytes pdf.SaveAs(path)
await response.Content.ReadAsByteArrayAsync() pdf.BinaryData

頁面配置映射

PDFBolt JSON IronPDF
"format": "A4" renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
"margin": { "top": "20mm" } renderer.RenderingOptions.MarginTop = 20
"margin": { "bottom": "20mm" } renderer.RenderingOptions.MarginBottom = 20
"margin": { "left": "15mm" } renderer.RenderingOptions.MarginLeft = 15
"margin": { "right": "15mm" } renderer.RenderingOptions.MarginRight = 15

頁眉/頁腳佔位符映射

PDFBolt(在base64編碼的headerTemplate / footerTemplate内部) IronPDF(HtmlFragment 標記)
<span class="pageNumber"></span> {page}
<span class="totalPages"></span> {total-pages}
<span class="date"></span> {date}
<span class="title"></span> {html-title}

程式碼遷移範例

範例1:基本HTML到PDF

之前(PDFBolt — 經由HttpClient的REST):

// REST API — no official .NET SDK; integrate via HttpClient.
// Docs: https://pdfbolt.com/docs/quick-start-guide/csharp
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var payload = JsonSerializer.Serialize(new
        {
            html = Convert.ToBase64String(Encoding.UTF8.GetBytes(html))
        });

        using var http = new HttpClient();
        http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY");
        using var content = new StringContent(payload, Encoding.UTF8, "application/json");
        using var response = await http.PostAsync("https://api.pdfbolt.com/v1/direct", content);
        response.EnsureSuccessStatusCode();

        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        await File.WriteAllBytesAsync("output.pdf", pdfBytes);
    }
}
// REST API — no official .NET SDK; integrate via HttpClient.
// Docs: https://pdfbolt.com/docs/quick-start-guide/csharp
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var payload = JsonSerializer.Serialize(new
        {
            html = Convert.ToBase64String(Encoding.UTF8.GetBytes(html))
        });

        using var http = new HttpClient();
        http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY");
        using var content = new StringContent(payload, Encoding.UTF8, "application/json");
        using var response = await http.PostAsync("https://api.pdfbolt.com/v1/direct", content);
        response.EnsureSuccessStatusCode();

        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        await File.WriteAllBytesAsync("output.pdf", pdfBytes);
    }
}
Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks

Module Program
    Async Function Main() As Task
        Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
        Dim payload As String = JsonSerializer.Serialize(New With {
            .html = Convert.ToBase64String(Encoding.UTF8.GetBytes(html))
        })

        Using http As New HttpClient()
            http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY")
            Using content As New StringContent(payload, Encoding.UTF8, "application/json")
                Using response As HttpResponseMessage = Await http.PostAsync("https://api.pdfbolt.com/v1/direct", content)
                    response.EnsureSuccessStatusCode()

                    Dim pdfBytes As Byte() = Await response.Content.ReadAsByteArrayAsync()
                    Await File.WriteAllBytesAsync("output.pdf", pdfBytes)
                End Using
            End Using
        End Using
    End Function
End Module
$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");
    }
}
Imports IronPdf
Imports System.IO

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim html = "<html><body><h1>Hello World</h1></body></html>"
        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

結構差異是整合模型。 PDFBolt需要您base64編碼HTML,構建JSON負載,設置API-KEY 標頭,https://api.pdfbolt.com/v1/direct,等待響應,然後將返回的字節自行寫入磁盤。

IronPDF的PdfDocument物件。 面向物件的模型讓您在保存前操作PDF(新增浮水印,合併文件,應用安全性)。 如果您需要與現有程式碼相容的原始字節,請使用pdf.BinaryData。 查看HTML到PDF文件以獲取其他渲染選項。

範例2:URL轉PDF轉換

之前(PDFBolt — 經由HttpClient的REST):

// REST API — no official .NET SDK; integrate via HttpClient.
// Docs: https://pdfbolt.com/docs/quick-start-guide/csharp
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var payload = JsonSerializer.Serialize(new { url = "https://www.example.com" });

        using var http = new HttpClient();
        http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY");
        using var content = new StringContent(payload, Encoding.UTF8, "application/json");
        using var response = await http.PostAsync("https://api.pdfbolt.com/v1/direct", content);
        response.EnsureSuccessStatusCode();

        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        await File.WriteAllBytesAsync("webpage.pdf", pdfBytes);
    }
}
// REST API — no official .NET SDK; integrate via HttpClient.
// Docs: https://pdfbolt.com/docs/quick-start-guide/csharp
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var payload = JsonSerializer.Serialize(new { url = "https://www.example.com" });

        using var http = new HttpClient();
        http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY");
        using var content = new StringContent(payload, Encoding.UTF8, "application/json");
        using var response = await http.PostAsync("https://api.pdfbolt.com/v1/direct", content);
        response.EnsureSuccessStatusCode();

        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        await File.WriteAllBytesAsync("webpage.pdf", pdfBytes);
    }
}
Imports System.IO
Imports System.Net.Http
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks

Module Program
    Async Function Main() As Task
        Dim payload = JsonSerializer.Serialize(New With {.url = "https://www.example.com"})

        Using http As New HttpClient()
            http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY")
            Using content As New StringContent(payload, Encoding.UTF8, "application/json")
                Using response As HttpResponseMessage = Await http.PostAsync("https://api.pdfbolt.com/v1/direct", content)
                    response.EnsureSuccessStatusCode()

                    Dim pdfBytes As Byte() = Await response.Content.ReadAsByteArrayAsync()
                    Await File.WriteAllBytesAsync("webpage.pdf", pdfBytes)
                End Using
            End Using
        End Using
    End Function
End Module
$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");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer As New ChromePdfRenderer()
        Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
        pdf.SaveAs("webpage.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

在PDFBolt端,URL轉換仍需要完整的REST往返:建立JSON主體,設置API密鑰標頭,等待POST,並寫入響應字節。 即使您已經指向一個公開的URL,獲取和渲染都是在PDFBolt的伺服器上進行的。

IronPDF的PdfDocument。 關鍵優勢是IronPDF在本地執行URL獲取和PDF渲染—沒有文件資料離開您的基礎設施。 了解有關URL到PDF轉換的更多資訊。

範例3:具有自定義頁面設置的HTML文件

之前(PDFBolt — 經由HttpClient的REST):

// REST API — no official .NET SDK; integrate via HttpClient.
// Docs: https://pdfbolt.com/docs/parameters
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var html = await File.ReadAllTextAsync("input.html");
        var payload = JsonSerializer.Serialize(new
        {
            html = Convert.ToBase64String(Encoding.UTF8.GetBytes(html)),
            format = "A4",
            margin = new { top = "20mm", bottom = "20mm" },
            printBackground = true
        });

        using var http = new HttpClient();
        http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY");
        using var content = new StringContent(payload, Encoding.UTF8, "application/json");
        using var response = await http.PostAsync("https://api.pdfbolt.com/v1/direct", content);
        response.EnsureSuccessStatusCode();

        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        await File.WriteAllBytesAsync("output.pdf", pdfBytes);
    }
}
// REST API — no official .NET SDK; integrate via HttpClient.
// Docs: https://pdfbolt.com/docs/parameters
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var html = await File.ReadAllTextAsync("input.html");
        var payload = JsonSerializer.Serialize(new
        {
            html = Convert.ToBase64String(Encoding.UTF8.GetBytes(html)),
            format = "A4",
            margin = new { top = "20mm", bottom = "20mm" },
            printBackground = true
        });

        using var http = new HttpClient();
        http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY");
        using var content = new StringContent(payload, Encoding.UTF8, "application/json");
        using var response = await http.PostAsync("https://api.pdfbolt.com/v1/direct", content);
        response.EnsureSuccessStatusCode();

        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        await File.WriteAllBytesAsync("output.pdf", pdfBytes);
    }
}
Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks

Module Program
    Async Function Main() As Task
        Dim html = Await File.ReadAllTextAsync("input.html")
        Dim payload = JsonSerializer.Serialize(New With {
            .html = Convert.ToBase64String(Encoding.UTF8.GetBytes(html)),
            .format = "A4",
            .margin = New With {.top = "20mm", .bottom = "20mm"},
            .printBackground = True
        })

        Using http As New HttpClient()
            http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY")
            Using content As New StringContent(payload, Encoding.UTF8, "application/json")
                Using response As HttpResponseMessage = Await http.PostAsync("https://api.pdfbolt.com/v1/direct", content)
                    response.EnsureSuccessStatusCode()

                    Dim pdfBytes = Await response.Content.ReadAsByteArrayAsync()
                    Await File.WriteAllBytesAsync("output.pdf", pdfBytes)
                End Using
            End Using
        End Using
    End Function
End Module
$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");
    }
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System.IO

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
        renderer.RenderingOptions.MarginTop = 20
        renderer.RenderingOptions.MarginBottom = 20
        Dim html = File.ReadAllText("input.html")
        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

此範例展示了頁面配置映射。 PDFBolt接受頂層"20mm")。 IronPDF在渲染器中使用帶有強型別屬性的RenderingOptions物件。

關鍵映射:

  • "format": "A4"PdfPaperSize.A4(強型別枚舉)
  • "margin": { "top": "20mm" }RenderingOptions.MarginTop = 20(數值mm)

IronPDF邊距始終是數字毫米,因此像"20mm"這樣的PDFBolt CSS單位字串可以直接映射。 需要PdfPaperSize枚舉。 有關其他頁面配置,請參閱渲染選項文件


關鍵遷移注意事項

返回型別變更

PDFBolt的/v1/direct端點將原始PDF作為HTTP響應主體返回; IronPDF返回一個PdfDocument

// PDFBolt pattern:
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
await File.WriteAllBytesAsync("output.pdf", pdfBytes);

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

// Or if you need bytes:
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;
// PDFBolt pattern:
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
await File.WriteAllBytesAsync("output.pdf", pdfBytes);

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

// Or if you need bytes:
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;
Imports System.IO

' PDFBolt pattern:
Dim pdfBytes = Await response.Content.ReadAsByteArrayAsync()
Await File.WriteAllBytesAsync("output.pdf", pdfBytes)

' IronPDF pattern:
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")

' Or if you need bytes:
Dim pdfBytes As Byte() = renderer.RenderHtmlAsPdf(html).BinaryData
$vbLabelText   $csharpLabel

整合模型變更

整合形狀從REST客戶端變更為進程內程式庫:

// PDFBolt
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY");
// ... build JSON, POST to https://api.pdfbolt.com/v1/direct

// IronPDF
var renderer = new ChromePdfRenderer();
// PDFBolt
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY");
// ... build JSON, POST to https://api.pdfbolt.com/v1/direct

// IronPDF
var renderer = new ChromePdfRenderer();
Imports System.Net.Http

' PDFBolt
Using http As New HttpClient()
    http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY")
    ' ... build JSON, POST to https://api.pdfbolt.com/v1/direct
End Using

' IronPDF
Dim renderer As New ChromePdfRenderer()
$vbLabelText   $csharpLabel

配置模式更改

PDFBolt配置是請求主體上的JSON字段; IronPDF使用RenderingOptions

// PDFBolt: JSON request fields
new { format = "A4", margin = new { top = "20mm" } }

// IronPDF: RenderingOptions properties
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
// PDFBolt: JSON request fields
new { format = "A4", margin = new { top = "20mm" } }

// IronPDF: RenderingOptions properties
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
' PDFBolt: JSON request fields
New With {Key .format = "A4", Key .margin = New With {Key .top = "20mm"}}

' IronPDF: RenderingOptions properties
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 20
$vbLabelText   $csharpLabel

API密鑰消除

PDFBolt要求每個請求都帶有API-KEY 標頭;IronPDF使用一次性的授權密鑰:

// PDFBolt: API key per HTTP call (security risk if leaked)
http.DefaultRequestHeaders.Add("API-KEY", config["PDFBolt:ApiKey"]);

// IronPDF: License key once at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();
// PDFBolt: API key per HTTP call (security risk if leaked)
http.DefaultRequestHeaders.Add("API-KEY", config["PDFBolt:ApiKey"]);

// IronPDF: License key once at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();
' PDFBolt: API key per HTTP call (security risk if leaked)
http.DefaultRequestHeaders.Add("API-KEY", config("PDFBolt:ApiKey"))

' IronPDF: License key once at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim renderer As 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");
' PDF Merging (not available in PDFBolt)
Dim 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)
Dim text As String = pdf.ExtractAllText()

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

故障排除

問題1:NuGet上沒有PDFBolt

問題: 在IronPDF中尋找using PDFBolt; / new HtmlToPdfConverter()

解決方案: PDFBolt沒有.NET SDK—其整合是針對HttpClient進行的。 IronPDF完全取代那個包裝器,使用ChromePdfRenderer

// IronPDF
var renderer = new ChromePdfRenderer();
// IronPDF
var renderer = new ChromePdfRenderer();
' IronPDF
Dim renderer As New ChromePdfRenderer()
$vbLabelText   $csharpLabel

問題2:ConvertHtmlString到哪去了?

問題: 遷移一個內部PDFBolt包裝器,暴露一個ConvertHtmlString(html)方法。

解決方案: 使用RenderHtmlAsPdf()

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

問題3:ConvertUrl到哪去了?

問題: 遷移一個內部PDFBolt包裝器,暴露一個ConvertUrl(url)方法。

解決方案: 使用RenderUrlAsPdf()

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

問題4:format JSON字段 → 枚舉

問題: 轉換PDFBolt的"format": "A4" JSON字段。

解決方案: 使用IronPdf.Rendering

// IronPDF
using IronPdf.Rendering;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
// IronPDF
using IronPdf.Rendering;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
Imports 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>");
' Warm up during application startup
Dim renderer As New ChromePdfRenderer()
renderer.RenderHtmlAsPdf("<html><body></body></html>")
$vbLabelText   $csharpLabel

遷移檢查表

遷移前

  • 清點程式碼庫中的所有PDFBolt REST調用(api.pdfbolt.com
  • 文件當前的JSON請求字段(headerTemplate,等。)
  • 確定需要移除的API密鑰管理程式碼
  • 列出要刪除的429 / 配額重試處理
  • 獲得IronPDF授權金鑰

套件變更

  • 刪除手工製作的PDFBolt HttpClient包裝器和DTOs(沒有需要解除安裝的NuGet包)
  • 安裝IronPdf NuGet包:dotnet add package IronPdf
  • 新增using IronPdf;命名空間
  • 新增using IronPdf.Rendering;用於紙張尺寸枚舉

程式碼變更

  • 在啟動時加入授權金鑰配置
  • HttpClient + API-KEY整合
  • RenderHtmlAsPdf() / POST /v1/direct
  • await response.Content.ReadAsByteArrayAsync() + File.WriteAllBytes()
  • "format" / "margin" JSON字段映射到RenderingOptions.PaperSize / RenderingOptions.MarginTop等。
  • 移除API密鑰管理程式碼
  • 移除429 / 速率限制處理
  • 移除網路錯誤處理

遷移後

  • 從配置文件中刪除API密鑰
  • 從秘密管理器中移除API密鑰
  • 運行所有比較PDF輸出的測試
  • 驗證頁面尺寸和邊距正確渲染
  • 考慮新增新的功能(水印,安全性,合併)

請注意PDFBolt 是其各自所有者的註冊商標。 本網站與PDFBolt無關,也未獲得其認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供參考,反映撰寫時公開可用的資訊。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話