ComPDFKit與IronPDF:技術比較指南
當 .NET 開發人員評估 PDF 生成解決方案時,GrabzIt 作為一種雲端截圖和PDF服務顯得特別突出。 雖然它提供快速的整合,GrabzIt 建立的 PDF 是圖片格式,文字不可選擇且需要將所有內容發送到外部伺服器進行處理。IronPDF提供了另一種選擇:一個生成真正向量 PDF 的進程內程式庫,文字可選擇和搜尋,所有操作都在本地處理,無需外部依賴。
本對比探討了這兩種解決方案在相關技術維度上的不同,以幫助專業開發人員和架構師就他們的 .NET PDF 需求做出明智的決定。
了解 GrabzIt
GrabzIt 是一個付費 SaaS,專門提供截圖和 PDF 捕獲服務。 它允許開發人員通過雲端 API 將網頁或 HTML 內容轉換為 PDF。 該服務使用應用程式金鑰和密鑰進行身份驗證的 GrabzItClient 初始化。
GrabzIt 提供了方法,如用於 HTML 字串轉換的 HTMLToPDF(),用於網頁捕獲的 URLToPDF(),以及用於圖片生成的 HTMLToImage()。 配置使用了像 PDFOptions 這樣的選項類以及 CustomId 和 PageSize 等屬性;ImageOptions 則擁有 Width 和 Height 屬性。 使用 SaveTo() 進行同步文件輸出儲存或使用回呼 URL 的 Save() 進行異步處理。
服務的一個關鍵特徵是它建立基於圖像的 PDF,本質上就是 PDF 格式包裝的截圖。 這些 PDF 中的文字不可選擇,文字搜尋需要 OCR 處理。 所有內容都發送到 GrabzIt 的伺服器進行處理,這引入了隱私考量和網路延遲。
了解IronPDF
IronPDF 是一個運行在進程內的 .NET 程式庫,生成真正向量的 PDF,文字可選擇和搜尋。 該程式庫處理所有內容均在本地進行,無需外部伺服器依賴。
IronPDF 使用 ChromePdfRenderer 作為其主要渲染類,具有 RenderHtmlAsPdf() 和 RenderUrlAsPdf() 等方法。 配置通過 RenderingOptions 屬性進行。 對於圖像轉換,渲染的 PDF 可以使用 ToBitmap() 進行轉換。 文件的儲存使用 SaveAs(),所有操作均為同步——不需要回呼處理程式或 Webhooks。
IronPDF 生成向量為基礎的 PDF,文字天然可選擇和搜尋,無需 OCR。 文件大小比基於圖像的 PDF 小,處理本地進行,延遲最小化。
架構和處理模型對比
這些解決方案的根本區別在於其處理架構和輸出格式。
| 方面 | GrabzIt | IronPDF |
|---|---|---|
| PDF 型別 | 基於圖像(截圖) | 真正的向量 PDF |
| 文字選擇 | 不可能 | 完全文字選擇 |
| 文字搜尋 | 需要 OCR | 本地可搜尋 |
| 處理位置 | 外部伺服器 | 本地/進程內 |
| 隱私 | 資料外送 | 資料保留本地 |
| 延遲 | 包括網路往返 | 本地處理 |
| 定價模型 | 每次捕獲 | 每位開發者授權 |
| 離線能力 | 無 | 是 |
| 文件大小 | 大(圖像資料) | 小(向量資料) |
| 需要回呼 | 是的(異步模型) | 否(同步/異步) |
| CSS/JS支持 | 完全(Chromium引擎) | 完整的Chromium引擎 |
API的雲端架構意味著每個PDF生成都需要HTTP調用外部伺服器。 這引入了網路延遲、可用性問題和速率限制考量。 IronPDF的進程內方法消除了這些基礎架構的依賴。
程式碼比較:常見的 PDF 操作
HTML 到 PDF 轉換
最基本的操作展示了架構和API的不同之處。
GrabzIt:
// NuGet: Install-Package GrabzIt
using GrabzIt;
using GrabzIt.Parameters;
using System;
class Program
{
static void Main()
{
var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
var options = new PDFOptions();
options.CustomId = "my-pdf";
grabzIt.HTMLToPDF("<html><body><h1>Hello World</h1></body></html>", options);
grabzIt.SaveTo("output.pdf");
}
}// NuGet: Install-Package GrabzIt
using GrabzIt;
using GrabzIt.Parameters;
using System;
class Program
{
static void Main()
{
var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
var options = new PDFOptions();
options.CustomId = "my-pdf";
grabzIt.HTMLToPDF("<html><body><h1>Hello World</h1></body></html>", options);
grabzIt.SaveTo("output.pdf");
}
}Imports GrabzIt
Imports GrabzIt.Parameters
Imports System
Module Program
Sub Main()
Dim grabzIt As New GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET")
Dim options As New PDFOptions()
options.CustomId = "my-pdf"
grabzIt.HTMLToPDF("<html><body><h1>Hello World</h1></body></html>", options)
grabzIt.SaveTo("output.pdf")
End Sub
End ModuleIronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
pdf.SaveAs("output.pdf");
}
}Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>")
pdf.SaveAs("output.pdf")
End Sub
End ClassGrabzIt 需要建立一個擁有應用程式金鑰和密秘的 GrabzItClient,配置擁有像 CustomId 屬性的 PDFOptions,用 HTML 內容和選項調用 HTMLToPDF(),然後使用 SaveTo() 保存。 內容被發送到其平台的伺服器進行處理。
IronPDF 建立一個 ChromePdfRenderer,直接用 HTML 字串調用 RenderHtmlAsPdf(),並使用 SaveAs() 保存。 操作在本地處理,不需要外部身份驗證。 生成的PDF包含真正的向量文字,可選擇和搜尋。
想了解進階HTML渲染選項,請參閱HTML到PDF轉換指南。
URL到PDF轉換
轉換實時網頁顯示出相似的模式,只是配置方法不同。
GrabzIt:
// NuGet: Install-Package GrabzIt
using GrabzIt;
using GrabzIt.Parameters;
using System;
class Program
{
static void Main()
{
var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
var options = new PDFOptions();
options.PageSize = PageSize.A4;
grabzIt.URLToPDF("https://www.example.com", options);
grabzIt.SaveTo("webpage.pdf");
}
}// NuGet: Install-Package GrabzIt
using GrabzIt;
using GrabzIt.Parameters;
using System;
class Program
{
static void Main()
{
var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
var options = new PDFOptions();
options.PageSize = PageSize.A4;
grabzIt.URLToPDF("https://www.example.com", options);
grabzIt.SaveTo("webpage.pdf");
}
}Imports GrabzIt
Imports GrabzIt.Parameters
Imports System
Module Program
Sub Main()
Dim grabzIt As New GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET")
Dim options As New PDFOptions()
options.PageSize = PageSize.A4
grabzIt.URLToPDF("https://www.example.com", options)
grabzIt.SaveTo("webpage.pdf")
End Sub
End ModuleIronPDF:
// 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("webpage.pdf");
}
}// 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("webpage.pdf");
}
}Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End ClassGrabzIt通過 PDFOptions.PageSize = PageSize.A4 配置頁面大小,然後用URL和選項調用 URLToPDF()。 網頁在服務的伺服器上被捕獲並作為圖像型PDF返回。
IronPDF用URL字串直接調用 RenderUrlAsPdf()。 頁面大小可通過 renderer.RenderingOptions.PaperSize 配置。 頁面使用IronPDF的內嵌Chromium引擎在本地渲染,生成可選擇文字的向量PDF。
HTML至圖像轉換
圖像生成展示了處理非PDF輸出的不同方式。
GrabzIt:
// NuGet: Install-Package GrabzIt
using GrabzIt;
using GrabzIt.Parameters;
using System;
class Program
{
static void Main()
{
var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
var options = new ImageOptions();
options.Format = ImageFormat.png;
options.Width = 800;
options.Height = 600;
grabzIt.HTMLToImage("<html><body><h1>Hello World</h1></body></html>", options);
grabzIt.SaveTo("output.png");
}
}// NuGet: Install-Package GrabzIt
using GrabzIt;
using GrabzIt.Parameters;
using System;
class Program
{
static void Main()
{
var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
var options = new ImageOptions();
options.Format = ImageFormat.png;
options.Width = 800;
options.Height = 600;
grabzIt.HTMLToImage("<html><body><h1>Hello World</h1></body></html>", options);
grabzIt.SaveTo("output.png");
}
}Imports GrabzIt
Imports GrabzIt.Parameters
Imports System
Module Program
Sub Main()
Dim grabzIt As New GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET")
Dim options As New ImageOptions()
options.Format = ImageFormat.png
options.Width = 800
options.Height = 600
grabzIt.HTMLToImage("<html><body><h1>Hello World</h1></body></html>", options)
grabzIt.SaveTo("output.png")
End Sub
End ModuleIronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Drawing;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
var images = pdf.ToBitmap();
images[0].Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Drawing;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
var images = pdf.ToBitmap();
images[0].Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
}
}Imports IronPdf
Imports System
Imports System.Drawing
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>")
Dim images = pdf.ToBitmap()
images(0).Save("output.png", System.Drawing.Imaging.ImageFormat.Png)
End Sub
End ClassGrabzIt有一個專用的 HTMLToImage() 方法,ImageOptions用於配置 Width和 Height 屬性。 圖像在平台的伺服器上生成。
IronPDF首先使用 RenderHtmlAsPdf() 將HTML渲染為PDF,然後使用 ToBitmap()轉換為位圖,返回一個圖像陣列(每頁一張)。 各個圖像使用標準的 System.Drawing 方法保存。 這種兩步方法提供了同樣的結果,同時保持所有處理在本地進行。
在 IronPDF 教程中了解更多關於 PDF 操作的內容。
API映射參考
對於評估 GrabzIt 遷移或比較功能的開發人員,這份映射顯示了相等操作:
核心方法映射
| GrabzIt 方法 | IronPDF等效 |
|---|---|
new GrabzItClient(key, secret) | new ChromePdfRenderer() |
HTMLToPDF(html) | renderer.RenderHtmlAsPdf(html) |
HTMLToPDF(html, options) | 先配置 RenderingOptions |
URLToPDF(url) | renderer.RenderUrlAsPdf(url) |
URLToPDF(url, options) | 先配置 RenderingOptions |
HTMLToImage(html) | pdf.ToBitmap() |
Save(callbackUrl) | pdf.SaveAs(path) or pdf.BinaryData |
SaveTo(filePath) | pdf.SaveAs(filePath) |
GetResult(id) | 不適用 |
GetStatus(id) | 不適用 |
PDFOptions 到 RenderingOptions 映射
| GrabzIt PDFOptions | IronPDF屬性 |
|---|---|
MarginTop | RenderingOptions.MarginTop |
MarginBottom | RenderingOptions.MarginBottom |
MarginLeft | RenderingOptions.MarginLeft |
MarginRight | RenderingOptions.MarginRight |
PageSize (A4,信封) | RenderingOptions.PaperSize |
Orientation | RenderingOptions.PaperOrientation |
BrowserWidth | RenderingOptions.ViewPortWidth |
BrowserHeight | RenderingOptions.ViewPortHeight |
Delay | RenderingOptions.RenderDelay |
CustomWaterMark | pdf.ApplyWatermark() |
Password | pdf.SecuritySettings.UserPassword |
IncludeBackground | RenderingOptions.PrintHtmlBackgrounds |
TemplateId | RenderingOptions.HtmlHeader/Footer |
ImageOptions 到IronPDF映射
| GrabzIt ImageOptions | IronPDF等效 |
|---|---|
Format (png,jpg) | bitmap.Save(path, ImageFormat.Png) |
Width | RenderingOptions.ViewPortWidth |
Height | RenderingOptions.ViewPortHeight |
功能比較總結
| 功能 | GrabzIt | IronPDF |
|---|---|---|
| 真正的向量 PDF | 是的(基於Chromium) | 是 |
| 可選擇文字 | 是 | 是 |
| 可搜尋文字(本地) | 否(需要OCR) | 是 |
| 本地處理 | 否(外部伺服器) | 是 |
| 離線能力 | 無 | 是 |
| 同步操作 | 有限的(回呼模型) | 是 |
| 需要身份驗證 | 是的(秘鑰/密秘) | 無 |
| HTML到PDF | 是 | 是 |
| URL到PDF | 是 | 是 |
| HTML 至圖像 | 是(原生) | 是的(通過 ToBitmap) |
| 文字提取 | 是 | 是 |
當團隊考慮從 GrabzIt 遷移到 IronPDF
開發團隊因以下幾個原因評估從 GrabzIt 過渡到 IronPDF:
基於圖像的 PDF 限制: GrabzIt 產生基於截圖的 PDF,文字不可選擇——本質上是包裝在 PDF 格式中的圖像。 對於需要文字選擇、複製粘貼功能或無障礙合規的應用來說,這是一個顯著的限制。IronPDF生成具有完全可選擇和搜尋文字的真正向量 PDF。
外部處理問題: 所有發送到服務的內容都在外部伺服器上處理。 對於處理敏感資料的應用來說,這樣做引入了隱私和合規考量。IronPDF所有處理均在本地進行,保持資料在您的基礎設施內。
回呼架構複雜性: API的非同步回呼模型需要Webhook處理基礎架構——回呼端點、狀態輪詢和結果檢索邏輯。IronPDF提供即時返回結果的同步操作,完全消除了回呼處理程式程式碼。
按次定價: GrabzIt 的使用付費模型隨著 PDF 生成量的增加而變得昂貴。IronPDF的按開發者授權不論量如何提供可預測的成本。
文字搜尋需求: 由於 GrabzIt PDF 基於圖像,文字搜尋和提取需要單獨的 OCR 處理。IronPDFPDF天然可搜尋,文字提取直接使用 pdf.ExtractAllText()。
文件大小問題: GrabzIt的基於圖像的PDF比向量PDF大(5-10倍)。 對於生成大量PDF或有儲存限制的應用來說,這是實質性的不同。
網路依賴性: 沒有網路連接,服務無法生成PDF。IronPDF運行離線,這對於必須在斷開環境中運行的應用是必需的。
優勢和考量
GrabzIt 的強項
- 快速設置: API金鑰整合,無本地依賴
- 語言無關: 適用於可以進行HTTP調用的任何語言
- 無本地資源: 處理在 GrabzIt 的基礎設施上進行
GrabzIt 考慮因素
- 基於圖像的 PDF: 不通過 OCR 文字不可選擇或搜尋
- 外部處理: 資料發送到第三方伺服器
- 回呼複雜性: 需要 Webhook 基礎設施
- 按捕獲成本: 價格隨著量的增加而上升
- 需要網路: 無離線能力
- 文件較大: 圖像資料顯著增加文件大小
- 延遲: 包含每次請求的網路往返
IronPDF的優勢
IronPDF考量
- 本地資源: 使用本地 CPU/記憶體進行處理
- 商業許可:生產使用需要商業許可
結論
GrabzIt 和IronPDF代表在 .NET 應用中生成 PDF 的根本不同方法。 GrabzIt 的雲端截圖服務通過外部 API 調用生成基於圖像的 PDF,要求身份驗證、回呼處理,且接受文字將在輸出中不可選擇。
IronPDF 提供了一種進程內的替代方案,生成具有可選擇、可搜尋文字的真正向量 PDF。 該程式庫消除了外部依賴、回呼基礎設施和網路延遲,同時產生支持本地文字提取的較小文件。
隨著組織計劃 .NET 10、C# 14 和直到 2026 年的應用程式開發,在圖片型雲 PDF 和向量本地 PDF 之間做出選擇,將會顯著影響文件可用性、可存取性和基礎架構複雜性。 需要可選擇文字、資料隱私或簡化架構的團隊將發現IronPDF能有效滿足這些需求。
從 免費試用 開始評估 IronPDF,並探索全面的文件以評估特定需求的適用性。
