Iron Suite for .NET
10個 .NET 程式庫。一個完整的文件套件。
GemBox PDF與IronPDF:技術比較指南
當.NET開發者需要建立PDF文件時,他們面臨著一個關鍵決定:使用像PDFBolt這樣的雲端服務,或者選擇像IronPDF這樣的自託管程式庫。 這項分析在重要的技術方面審視兩種選擇,以協助開發者、架構師以及決策者選擇適合其PDF生成需求的工具。
什麼是PDFBolt?
PDFBolt是一種基於雲端的REST API服務,用於透過外部伺服器生成PDF。 開發者通過HTTP POST請求將HTML內容或URL發送到PDFBolt的API端點,這些端點使用無頭Chromium瀏覽器處理內容並返回生成的PDF。
基於雲端的設置可快速整合–開發者獲得API密鑰,並使用任何語言的標準HTTP客戶端發送HTTP請求(例如,C#中的HttpClient, Python中的requests, Node.js中的fetch)。 PDFBolt管理渲染基礎設施,無需本地PDF生成資源。
然而,這種便利伴隨著權衡取捨。 每個文件都會經過PDFBolt位於歐洲(德國)的伺服器。 免費階段每月至多限製100個文件,增大容量可以選擇付費訂閱計劃。 此外,所有PDF生成操作都必須具備網路連接。
什麼是 IronPDF?
IronPDF 是一個自託管的.NET程式庫,可以在您的伺服器上本地執行PDF生成。 ChromePdfRenderer 類使用嵌入式Chromium引擎將HTML、CSS和JavaScript轉換為高質量的PDF檔案,無需任何外部網路調用。
該程式庫在您的應用程式基礎設施中處理所有檔案。 無資料離開您的伺服器,且沒有文件生成的使用限制。 一旦獲得授權,您可以生成無限的PDF,無需按文件支付費用。
IronPDF提供同步和異步方法,以及超越基本生成功能的廣泛功能,包括PDF合併、浮水印、文字提取和雲端API通常無法提供的安全設置。
架構比較
PDFBolt和IronPDF之間的主要區別在於文件處理在哪裡發生。 這種區別影響從資料隱私到運行可靠性的一切。
| 功能 | PDFBolt | IronPDF |
|---|---|---|
| 託管 | 僅限雲端(歐洲伺服器) | 自託管 |
| 資料位置 | 外部伺服器(德國) | 僅限您的伺服器 |
| 隱私 | 文件在外部處理 | 完全資料隱私 - 本地處理,無第三方傳輸 |
| 使用限制 | 配額為基礎(根據計劃每月100-50000) | 無限制 |
| 需要互聯網 | 是的,始終需要 | 無 |
| 延遲 | 包括網路往返 | 本地處理 |
| 離線運行 | 不可能 | 完全支援 |
| C#整合 | 通過HttpClient的REST API | 直接程式庫整合 |
| 成本模式 | 按月訂閱,文件限額 | 一次性購買或訂閱 |
對於處理敏感文件的應用程式——合同、醫療記錄、財務資料——資料是否離開您的基礎設施很重要。 IronPDF在本地處理所有內容,因此沒有文件內容被傳輸到外部。 這簡化了GDPR, HIPAA 和 SOC2的合規,因為沒有第三方資料處理器參與,也無需資料傳輸審計。
基本HTML到PDF轉換
兩種工具都處理HTML到PDF的轉換,但基本方法不同——PDFBolt通過REST API調用,IronPDF通過C#程式庫。
PDFBolt HTML到PDF方法:
// REST API: requires an API key from pdfbolt.com
using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.IO;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var client = new HttpClient();
client.DefaultRequestHeaders.Add("API-KEY", "YOUR-API-KEY");
var html = "<html><body><h1>Hello World</h1></body></html>";
var base64Html = Convert.ToBase64String(Encoding.UTF8.GetBytes(html));
var response = await client.PostAsJsonAsync(
"https://api.pdfbolt.com/v1/direct",
new { html = base64Html });
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
File.WriteAllBytes("output.pdf", pdfBytes);
}
}Imports System
Imports System.Net.Http
Imports System.Net.Http.Json
Imports System.IO
Imports System.Text
Imports System.Threading.Tasks
Module Program
Async Function Main() As Task
Dim client As New HttpClient()
client.DefaultRequestHeaders.Add("API-KEY", "YOUR-API-KEY")
Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
Dim base64Html As String = Convert.ToBase64String(Encoding.UTF8.GetBytes(html))
Dim response = Await client.PostAsJsonAsync(
"https://api.pdfbolt.com/v1/direct",
New With {.html = base64Html})
Dim pdfBytes = Await response.Content.ReadAsByteArrayAsync()
File.WriteAllBytes("output.pdf", pdfBytes)
End Function
End ModuleImports System
Imports System.Net.Http
Imports System.Net.Http.Json
Imports System.IO
Imports System.Text
Imports System.Threading.Tasks
Module Program
Async Function Main() As Task
Dim client As New HttpClient()
client.DefaultRequestHeaders.Add("API-KEY", "YOUR-API-KEY")
Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
Dim base64Html As String = Convert.ToBase64String(Encoding.UTF8.GetBytes(html))
Dim response = Await client.PostAsJsonAsync(
"https://api.pdfbolt.com/v1/direct",
New With {.html = base64Html})
Dim pdfBytes = Await response.Content.ReadAsByteArrayAsync()
File.WriteAllBytes("output.pdf", pdfBytes)
End Function
End ModuleIronPDF的HTML轉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");
}
}// 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 ClassImports 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 ClassPDFBolt的直接API端點在HTTP響應主體中返回原始PDF二進制資料,可以用File.WriteAllBytes()保存。 IronPDF的Stream等屬性,用於不同的輸出處理。
IronPDF中的HTML到PDF轉換過程完全在本地執行,沒有網路回傳增加每次轉換的延遲。
URL 轉 PDF
將網頁轉換為PDF遵循類似模式,但在方法命名和處理上有明顯差異。
PDFBolt URL至PDF方法:
// REST API: requires an API key from pdfbolt.com
using System.Net.Http;
using System.Net.Http.Json;
using System.IO;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var client = new HttpClient();
client.DefaultRequestHeaders.Add("API-KEY", "YOUR-API-KEY");
var response = await client.PostAsJsonAsync(
"https://api.pdfbolt.com/v1/direct",
new { url = "https://www.example.com" });
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
File.WriteAllBytes("webpage.pdf", pdfBytes);
}
}// REST API: requires an API key from pdfbolt.com
using System.Net.Http;
using System.Net.Http.Json;
using System.IO;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var client = new HttpClient();
client.DefaultRequestHeaders.Add("API-KEY", "YOUR-API-KEY");
var response = await client.PostAsJsonAsync(
"https://api.pdfbolt.com/v1/direct",
new { url = "https://www.example.com" });
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
File.WriteAllBytes("webpage.pdf", pdfBytes);
}
}Imports System.Net.Http
Imports System.Net.Http.Json
Imports System.IO
Imports System.Threading.Tasks
Module Program
Async Function Main() As Task
Dim client As New HttpClient()
client.DefaultRequestHeaders.Add("API-KEY", "YOUR-API-KEY")
Dim response = Await client.PostAsJsonAsync(
"https://api.pdfbolt.com/v1/direct",
New With {.url = "https://www.example.com"})
Dim pdfBytes = Await response.Content.ReadAsByteArrayAsync()
File.WriteAllBytes("webpage.pdf", pdfBytes)
End Function
End ModuleImports System.Net.Http
Imports System.Net.Http.Json
Imports System.IO
Imports System.Threading.Tasks
Module Program
Async Function Main() As Task
Dim client As New HttpClient()
client.DefaultRequestHeaders.Add("API-KEY", "YOUR-API-KEY")
Dim response = Await client.PostAsJsonAsync(
"https://api.pdfbolt.com/v1/direct",
New With {.url = "https://www.example.com"})
Dim pdfBytes = Await response.Content.ReadAsByteArrayAsync()
File.WriteAllBytes("webpage.pdf", pdfBytes)
End Function
End ModuleIronPDF URL到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");
}
}// 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 ClassImports 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 ClassIronPDF提供了一個專用的RenderUrlAsPdf方法,明確指出正在執行的操作。 產生的PdfDocument物件提供了相同的豐富介面,用於保存、存取二進制資料或進一步操作。
自訂頁面大小和邊距
專業文件通常需要具體的頁面尺寸和邊距配置。 兩個工具都支援這些自訂功能,具有不同的配置模式。
PDFBolt頁面配置:
// REST API: requires an API key from pdfbolt.com
using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.IO;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var client = new HttpClient();
client.DefaultRequestHeaders.Add("API-KEY", "YOUR-API-KEY");
var html = File.ReadAllText("input.html");
var base64Html = Convert.ToBase64String(Encoding.UTF8.GetBytes(html));
var response = await client.PostAsJsonAsync(
"https://api.pdfbolt.com/v1/direct",
new
{
html = base64Html,
format = "A4",
margin = new { top = "20mm", bottom = "20mm" }
});
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
File.WriteAllBytes("output.pdf", pdfBytes);
}
}// REST API: requires an API key from pdfbolt.com
using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.IO;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var client = new HttpClient();
client.DefaultRequestHeaders.Add("API-KEY", "YOUR-API-KEY");
var html = File.ReadAllText("input.html");
var base64Html = Convert.ToBase64String(Encoding.UTF8.GetBytes(html));
var response = await client.PostAsJsonAsync(
"https://api.pdfbolt.com/v1/direct",
new
{
html = base64Html,
format = "A4",
margin = new { top = "20mm", bottom = "20mm" }
});
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
File.WriteAllBytes("output.pdf", pdfBytes);
}
}Imports System
Imports System.Net.Http
Imports System.Net.Http.Json
Imports System.IO
Imports System.Text
Imports System.Threading.Tasks
Module Program
Async Function Main() As Task
Dim client As New HttpClient()
client.DefaultRequestHeaders.Add("API-KEY", "YOUR-API-KEY")
Dim html As String = File.ReadAllText("input.html")
Dim base64Html As String = Convert.ToBase64String(Encoding.UTF8.GetBytes(html))
Dim response As HttpResponseMessage = Await client.PostAsJsonAsync(
"https://api.pdfbolt.com/v1/direct",
New With {
.html = base64Html,
.format = "A4",
.margin = New With {.top = "20mm", .bottom = "20mm"}
})
Dim pdfBytes As Byte() = Await response.Content.ReadAsByteArrayAsync()
File.WriteAllBytes("output.pdf", pdfBytes)
End Function
End ModuleImports System
Imports System.Net.Http
Imports System.Net.Http.Json
Imports System.IO
Imports System.Text
Imports System.Threading.Tasks
Module Program
Async Function Main() As Task
Dim client As New HttpClient()
client.DefaultRequestHeaders.Add("API-KEY", "YOUR-API-KEY")
Dim html As String = File.ReadAllText("input.html")
Dim base64Html As String = Convert.ToBase64String(Encoding.UTF8.GetBytes(html))
Dim response As HttpResponseMessage = Await client.PostAsJsonAsync(
"https://api.pdfbolt.com/v1/direct",
New With {
.html = base64Html,
.format = "A4",
.margin = New With {.top = "20mm", .bottom = "20mm"}
})
Dim pdfBytes As Byte() = Await response.Content.ReadAsByteArrayAsync()
File.WriteAllBytes("output.pdf", pdfBytes)
End Function
End ModuleIronPDF頁面配置:
// 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 ClassImports 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 ClassPDFBolt在API請求主體中以JSON參數接受配置(format, margin)。 IronPDF通過RenderingOptions屬性集中所有配置,使得設置通過IDE自動完成功能可以被發現。
PDFBolt支援多個單位的邊距(px, in, cm, mm),而IronPDF以毫米表達邊距。 兩者都支援標準紙張大小——PDFBolt通過PdfPaperSize列舉型別。
API映射參考
對於考慮從PDFBolt遷移到IronPDF的團隊,了解API映射有助於估算工作量。 請注意,PDFBolt使用REST API參數(JSON字段),而IronPDF使用C#類和方法。
核心操作映射
| PDFBolt(REST API) | IronPDF(C#程式庫) |
|---|---|
POST /v1/direct with {"html": "<base64>"} | renderer.RenderHtmlAsPdf(html) |
POST /v1/direct with {"url": "... | renderer.RenderUrlAsPdf(url) |
| 響應主體(原始PDF字節) | pdf.SaveAs(path) |
"isEncoded": true (Base64響應) | pdf.BinaryData |
配置參數映射
| PDFBolt(JSON參數) | IronPDF(C#屬性) |
|---|---|
"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 |
標題/頁腳動態內容映射
兩個工具都支援基於HTML的帶有動態內容的標題和頁腳,使用不同的語法:
| PDFBolt(HTML中的CSS類) | IronPDF(佔位符) | 用途 |
|---|---|---|
<span class="pageNumber"></span> | {page} | 當前頁碼 |
<span class="totalPages"></span> | {total-pages} | 總頁數 |
<span class="date"></span> | {date} | 當前日期 |
<span class="title"></span> | {html-title} | 文件標題 |
<span class="url"></span> | {url} | 頁面網址 |
PDFBolt和IronPDF均支援基於HTML的標題和頁腳,並具有CSS樣式。 PDFBolt的footerTemplate參數接受Base64編碼的HTML,而IronPDF直接在其渲染選項中使用HTML字串。
功能可用性比較
除了基礎的HTML到PDF轉換外,兩者在可用能力上有顯著差異。
| 功能 | PDFBolt | IronPDF |
|---|---|---|
| HTML到PDF | ✓ | ✓ |
| URL到PDF | ✓ | ✓ |
| 頁眉/頁腳 | ✓(HTML) | ✓(HTML) |
| 頁碼 | ✓ | ✓ |
| 自訂頁面大小 | ✓ | ✓ |
| 邊距 | ✓ | ✓ |
| PDF合併 | ✗ | ✓ |
| PDF拆分 | ✗ | ✓ |
| 水印 | ✗ | ✓ |
| 密碼保護 | ✗ | ✓ |
| 文字提取 | ✗ | ✓ |
| PDF轉為圖片 | ✗ | ✓ |
| 表單填寫 | ✗ | ✓ |
| 數位簽名 | ✗ | ✓ |
| 離線操作 | ✗ | ✓ |
| 無限制處理 | 基於配額(每月高達50,000) | 無限制 |
IronPDF提供廣泛的PDF操作功能,包括合併、拆分、浮水印和安全設置,雲API通常無法提供,因為API請求的無狀態性。
資料隱私與合規性
架構的區別產生了根本不同的資料處理特點:
PDFBolt資料流程:
- 您的應用程式將HTML/URL發送到PDFBolt位於歐洲的伺服器(德國)
- PDFBolt使用其雲端架構處理文件
- 生成的PDF通過網路返回
- 文件內容被傳輸到外部伺服器並進行處理
IronPDF資料流程:
- 您的應用程式在本地處理HTML/URL
- Chromium引擎在進程中渲染PDF
- PDF資料不會離開您的伺服器
- 不涉及第三方資料處理器,不需要DPA談判
使用IronPDF,含有個人識別資訊、保護的健康資訊或商業機密資料的檔案從不離開您的基礎設施。 該程式庫還包括內建的安全功能,以支持合規性工作流程:密碼保護與加密(最高256位元AES)、數位簽章使用PFX/P12證書和HSM支援、文字刪除可永久刪除PII、以及PDF/A合規性滿足長期歸檔需求。 對於氣隙環境,IronPDF可在零網路連接下運行。
當團隊考慮從PDFBolt轉至IronPDF時
多個因素驅動團隊將IronPDF作為PDFBolt的替代方案進行評估:
資料隱私需求:受GDPR,HIPAA或內部資料治理政策影響的組織可能需要文件從不離開他們的基礎設施。 IronPDF的本地處理模型從設計上滿足了這一要求——無資料被傳輸到外部,內在加密和刪除功能直接支持合規性工作流程。
使用量增長:PDFBolt的免費階段每月限制為100個檔案(超過的請求被阻止,不被收費)。 付費計劃範圍為每月19美元(2,000份文件)到每月249美元(50,000份文件),付費階段可選擇超額使用。 IronPDF沒有文件配額或計量——一旦授權,生成即無限。
網路可靠性問題:雲API每次操作均需要網路連接。 在具間歇連接環境中部署的應用程式,或那些要求高可用性的應用程式,將受益於無需網路狀態拍如就可持續執行的本地處理。
延遲敏感性:每次PDFBolt轉換包括網路往返時間,此外還有渲染時間。IronPDF在本地處理文件,完全避免了網路開銷。
功能需數:當應用程式需要PDF合併、浮水印、文字提取或安全設置時,雲API通常不能提供這些功能。 IronPDF的全面功能集合無需附加服務即可滿足這些需要。
API密鑰管理:雲API密鑰需安全儲存與輪換實踐,因為它們授予對可計費服務的存取權限。IronPDF的許可密鑰模型本地驗證,無需用量計費影響。
安裝比較
PDFBolt設置: PDFBolt不需要任何包安裝,它是一個REST API。 開發人員在pdfbolt.com註冊,獲得API密鑰後,用其語言的標準HTTP客戶端發送HTTP請求:
var client = new HttpClient();
client.DefaultRequestHeaders.Add("API-KEY", "YOUR-API-KEY");var client = new HttpClient();
client.DefaultRequestHeaders.Add("API-KEY", "YOUR-API-KEY");Dim client As New HttpClient()
client.DefaultRequestHeaders.Add("API-KEY", "YOUR-API-KEY")Dim client As New HttpClient()
client.DefaultRequestHeaders.Add("API-KEY", "YOUR-API-KEY")IronPDF安裝:
IronPDF在應用程式啟動時需要進行授權金鑰配置:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"PDFBolt是一種不依賴語言的平台,從任何平台上都可存取(C#, Node.js, Python, Java, Go, PHP, Rust等)。 IronPDF是一個支援.NET Framework和現代.NET版本的.NET程式庫,相容目標為.NET 10和C# 14的應用程式。
異步與同步考量
PDFBolt的雲端架構使用異步HTTP模式進行網路操作。 PDFBolt提供三種型別的端點:直接(同步二進位制回應)、同步(同步JSON與下載URL)、以及異步(基於webhook):
// PDFBolt REST API pattern - async HTTP call
var client = new HttpClient();
client.DefaultRequestHeaders.Add("API-KEY", "YOUR-API-KEY");
var response = await client.PostAsJsonAsync(
"https://api.pdfbolt.com/v1/direct",
new { html = base64Html });
var pdfBytes = await response.Content.ReadAsByteArrayAsync();// PDFBolt REST API pattern - async HTTP call
var client = new HttpClient();
client.DefaultRequestHeaders.Add("API-KEY", "YOUR-API-KEY");
var response = await client.PostAsJsonAsync(
"https://api.pdfbolt.com/v1/direct",
new { html = base64Html });
var pdfBytes = await response.Content.ReadAsByteArrayAsync();Imports System.Net.Http
Imports System.Net.Http.Headers
Imports System.Threading.Tasks
' PDFBolt REST API pattern - async HTTP call
Dim client As New HttpClient()
client.DefaultRequestHeaders.Add("API-KEY", "YOUR-API-KEY")
Dim response As HttpResponseMessage = Await client.PostAsJsonAsync(
"https://api.pdfbolt.com/v1/direct",
New With {.html = base64Html})
Dim pdfBytes As Byte() = Await response.Content.ReadAsByteArrayAsync()Imports System.Net.Http
Imports System.Net.Http.Headers
Imports System.Threading.Tasks
' PDFBolt REST API pattern - async HTTP call
Dim client As New HttpClient()
client.DefaultRequestHeaders.Add("API-KEY", "YOUR-API-KEY")
Dim response As HttpResponseMessage = Await client.PostAsJsonAsync(
"https://api.pdfbolt.com/v1/direct",
New With {.html = base64Html})
Dim pdfBytes As Byte() = Await response.Content.ReadAsByteArrayAsync()IronPDF預設提供同步方法,因為本地處理不需要異步:
//IronPDFlocal pattern - sync by default
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");//IronPDFlocal pattern - sync by default
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");'IronPDFlocal pattern - sync by default
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")'IronPDFlocal pattern - sync by default
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")對於從異步模式中受益的應用程式,IronPDF也提供異步方法變體:
//IronPDFasync option
var pdf = await renderer.RenderHtmlAsPdfAsync(html);//IronPDFasync option
var pdf = await renderer.RenderHtmlAsPdfAsync(html);netnet性能特徵
本地與雲端處理創造了不同的性能特徵:
| 指標 | PDFBolt | IronPDF |
|---|---|---|
| 處理 | 雲端渲染+網路傳輸 | 本地渲染 |
| 網路依賴 | 每次請求需要連接 | None |
| 批量處理 | 受速率限制(根據計劃每分鐘20-150請求) | 沒有速度限制 |
| 同時請求 | 根據計劃可有1-20個 | 受限於伺服器資源 |
| 離線運行 | 不可能 | 完全支援 |
IronPDF的嵌入式Chromium引擎在首次使用時有初始化開銷,但後續渲染避免了雲API調用固有的網路開銷。 PDFBolt的性能依賴於網路狀況、檔案複雜性及當前的伺服器負荷。
做出決策
在PDFBolt和IronPDF之間的選擇取決於您的具體需求:
考慮PDFBolt如果:您需要快速整合一個原型,您的檔案量在PDFBolt的訂閱階段範圍內,您對基於雲端的文件處理感到滿意且網路連接可靠。
考慮IronPDF如果:您需要本地資料處理以滿足隱私或合規要求,您每月生成100多個檔案,您需要超越生成的PDF處理(合併、浮水印、安全),您需要離線運行能力,或降低延遲對使用者體驗很重要。
對於計劃在2025年製作生產應用程式並規劃到2026年的團隊而言,IronPDF的自託管架構提供了不可比擬的操作獨立性與綜合能力,是雲API無法比擬的。
開始使用 IronPDF
要評估您的 PDF 生成需求的 IronPDF:
- 安裝IronPDF NuGet套件:
Install-Package IronPdf - 查看HTML到PDF教程以獲取基本轉換模式
- 探索URL到PDF轉換以捕捉網頁
- 查看教程部分以獲取全面的範例
IronPDF文件提供了常見場景的詳細指導,API參考記錄了所有可用的類與方法。