如何在 C# 中從 GrabzIt 遷移到 IronPDF
從GrabzIt轉換到 IronPDF,可將您的 .NET PDF 工作流程從具有回呼複雜性的雲端截圖擷取服務,轉換為可產生具有可選擇、可搜尋文字的真正向量 PDF 的程序內程式庫。 本指南為專業的 .NET 開發人員提供了一個全面、循序漸進的遷移路徑,消除了外部伺服器的依賴性、回呼處理器以及每次擷取的價格。
為何要從GrabzIt移轉到 IronPDF?
GrabzIt架構問題
GrabzIt 是基於雲端的螢幕截圖和 PDF 擷取服務。雖然方便快速整合,但它有基本的架構限制:
1.基於圖像的 PDF:GrabzIt創建基於螢幕截圖的 PDF,其中文字不可選——本質上是包裝在 PDF 格式中的圖像。 對於任何需要文字操作或存取的使用個案而言,這是最基本的限制。
2.外部處理:所有內容都會傳送到GrabzIt的伺服器進行處理-這會對敏感資料造成隱私和合規性的擔憂。 您的 HTML 內容離開您的基礎架構。
3.回呼複雜性:GrabzIt使用非同步回呼模型,需要 webhook 處理基礎架構。 您必須設定端點來接收結果,以增加架構的複雜性。
4.按捕獲量定價:按使用量付費模式在規模化時可能會變得很昂貴。 每產生一份 PDF 都會產生成本。
5.無法進行文字搜尋:由於 PDF 是基於圖像的,因此如果沒有 OCR,文字搜尋和提取就無法進行——這需要額外的步驟和成本。
6.檔案大小更大:基於圖像的 PDF 文件比基於向量的 PDF 文件大得多,通常是後者的 5-10 倍。
7.網路依賴性:沒有網路連線就無法產生 PDF,因此無法離線使用。
8.延遲:每次產生 PDF 都需要與外部伺服器進行網路往返,增加 500 毫秒至 5 秒的延遲。
GrabzIt與IronPDF的比較
| 範疇 | GrabzIt | IronPDF |
|---|---|---|
| PDF 類型 | 以圖像為基礎 (截圖) | True vector PDF |
| 文字選擇 | 不可能 | 全文選擇 |
| 文字搜尋 | 需要 OCR | 原生可搜尋 |
| 處理地點 | 外部伺服器 | 本地/流程中 |
| 隱私權 | 從外部傳送的資料 | 資料保持在本地 |
| 延遲 | 網路往返 (500ms-5s) | 本地處理 (~100ms) |
| 定價模式 | 每次擷取 | 每位開發人員授權 |
| 離線能力 | 無 | 是 |
| 檔案大小 | 大圖(影像資料) | 小型(向量資料) |
| 需要回電 | 是 (async) | 否 (同步/亞同步) |
| CSS/JS 支援 | 限額 | 完整的 Chromium 引擎 |
對於計劃在 2025 年和 2026 年之前採用 .NET 10 和 C# 14 的團隊而言,IronPDF 提供了一個面向未來的基礎,其本地處理可與現代 .NET 模式原生整合。
遷移複雜性評估
按功能估計的工作量
| 特點 | 遷移複雜性 |
|---|---|
| HTML 至 PDF | 非常低 |
| URL 至 PDF | 非常低 |
| HTML 至圖片 | 低 |
| 頁面大小/邊界 | 低 |
| 回呼處理程式 | 低 |
| 水印 | 低 |
| 頁首/頁尾 | 語言 |
| 驗證鑰匙 | 非常低 |
範式轉移
GrabzIt此次遷移的根本轉變在於從非同步回調式雲端處理轉向同步進程內產生:
GrabzIt: 傳送 HTML → 等待回呼 → 從伺服器擷取結果
IronPDF: 渲染 HTML → 立即取得 PDF
開始之前
先決條件
- .NET 版本:IronPDF支援 .NET Framework 4.6.2+ 和 .NET Core 3.1+ / .NET 5/6/7/8/9+ 2.許可證密鑰:請從ironpdf.com取得您的IronPDF許可證密鑰。 3.規劃基礎設施移除:記錄用於退役的回呼處理程序和 webhook 端點
辨識所有GrabzIt使用方式
# FindGrabzItclient usage
grep -r "GrabzItClient\|GrabzIt\." --include="*.cs" .
# Find callback handlers
grep -r "GrabzIt\|grabzit" --include="*.ashx" --include="*.aspx" --include="*.cs" .
# Find configuration
grep -r "APPLICATION_KEY\|APPLICATION_SECRET\|grabzit" --include="*.config" --include="*.json" .
# FindGrabzItclient usage
grep -r "GrabzItClient\|GrabzIt\." --include="*.cs" .
# Find callback handlers
grep -r "GrabzIt\|grabzit" --include="*.ashx" --include="*.aspx" --include="*.cs" .
# Find configuration
grep -r "APPLICATION_KEY\|APPLICATION_SECRET\|grabzit" --include="*.config" --include="*.json" .
NuGet 套件變更
# Remove GrabzIt
dotnet remove package GrabzIt
# Install IronPDF
dotnet add package IronPdf
# Remove GrabzIt
dotnet remove package GrabzIt
# Install IronPDF
dotnet add package IronPdf
快速啟動遷移
步驟 1:更新授權組態
之前 (GrabzIt):
GrabzIt 在每次用戶端實體化時都需要應用程式金鑰和密碼:
var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
Dim grabzIt As New GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET")
After (IronPDF):
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// Then create renderer without credentials
var renderer = new ChromePdfRenderer();
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// Then create renderer without credentials
var renderer = new ChromePdfRenderer();
' Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"
' Then create renderer without credentials
Dim renderer As New ChromePdfRenderer()
步驟 2:更新命名空間匯入
// Before (GrabzIt)
using GrabzIt;
using GrabzIt.Parameters;
// After (IronPDF)
using IronPdf;
// Before (GrabzIt)
using GrabzIt;
using GrabzIt.Parameters;
// After (IronPDF)
using IronPdf;
Imports IronPdf
完整的 API 參考資料
GrabzItClient 至IronPDF對應。
| GrabzIt 方法 | IronPDF 同等級產品 |
|---|---|
new GrabzItClient(key, secret) |
new ChromePdfRenderer() |
HTMLToPDF(html) |
renderer.RenderHtmlAsPdf(html) |
URLToPDF(url) |
renderer.RenderUrlAsPdf(url) |
HTMLToImage(html) |
pdf.ToBitmap() |
Save(callbackUrl) |
pdf.SaveAs(path) |
SaveTo(filePath) |
pdf.SaveAs(filePath) |
GetResult(id) |
不適用 |
GetStatus(id) |
不適用 |
PDFOptions 至 RenderingOptions 對應
| GrabzIt PDFOptions | IronPDF 特性 |
|---|---|
PageSize (A4,Letter) |
RenderingOptions.PaperSize |
CustomId |
不適用 |
MarginTop |
RenderingOptions.MarginTop |
MarginBottom |
RenderingOptions.MarginBottom |
ImageOptions 至IronPDF對應。
| GrabzIt ImageOptions | IronPDF 同等級產品 |
|---|---|
Format (png, jpg) |
bitmap.Save(path, ImageFormat.Png) |
Width |
RenderingOptions.ViewPortWidth |
Height |
RenderingOptions.ViewPortHeight |
程式碼遷移範例
範例 1: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 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 Module
After (IronPDF):
// 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 Class
差異很大:GrabzIt 需要 API 憑證(YOUR_APPLICATION_KEY,YOUR_APPLICATION_SECRET),創建一個帶有自訂 ID 的 PDFOptions 對象,結果是透過外部伺服器發送的基於圖像的 PDF。IronPDF的 ChromePdfRenderer 可在本機上產生真正的向量 PDF,並可選擇文字-無需憑證、無需網路呼叫、無需回呼。 請參閱 HTML to PDF 文件,以瞭解其他渲染選項。
範例 2: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 Module
After (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("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 Class
GrabzIt 需要透過選項物件配置 PageSize.A4 並與外部伺服器進行驗證。IronPDF的 RenderUrlAsPdf() 方法直接接受 URL,並使用完整的 Chromium 引擎在本地進行渲染,並完全支援 CSS 和 JavaScript。 進一步瞭解 URL 至 PDF 轉換。
範例 3:HTML 至圖片轉換
之前 (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 Module
After (IronPDF):
// 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 Class
GrabzIt 提供了一個專用的 HTMLToImage() 方法,用於配置格式、寬度和高度。IronPDF首先使用 RenderHtmlAsPdf() 將 HTML 渲染為 PDF,然後使用 ToBitmap() 轉換為點陣圖,從而達到相同的效果。 此方法可讓您從單一渲染作業中同時獲得 PDF 與影像輸出。
關鍵遷移注意事項
不需要回呼。
最顯著的架構改變是完全取消回呼處理程式:
// GrabzIt: Async callback pattern
grabzIt.HTMLToPDF(html, options);
grabzIt.Save("https://myserver.com/grabzit-callback"); // Wait for callback...
// Callback handler (separate endpoint)
public class GrabzItHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string id = context.Request.QueryString["id"];
GrabzItClient grabzIt = new GrabzItClient("APP_KEY", "APP_SECRET");
GrabzItFile file = grabzIt.GetResult(id);
file.Save("output.pdf");
}
}
// IronPDF: Synchronous - result immediately available
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf"); // Done!無callback needed.
// GrabzIt: Async callback pattern
grabzIt.HTMLToPDF(html, options);
grabzIt.Save("https://myserver.com/grabzit-callback"); // Wait for callback...
// Callback handler (separate endpoint)
public class GrabzItHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string id = context.Request.QueryString["id"];
GrabzItClient grabzIt = new GrabzItClient("APP_KEY", "APP_SECRET");
GrabzItFile file = grabzIt.GetResult(id);
file.Save("output.pdf");
}
}
// IronPDF: Synchronous - result immediately available
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf"); // Done!無callback needed.
Imports System.Web
' GrabzIt: Async callback pattern
grabzIt.HTMLToPDF(html, options)
grabzIt.Save("https://myserver.com/grabzit-callback") ' Wait for callback...
' Callback handler (separate endpoint)
Public Class GrabzItHandler
Implements IHttpHandler
Public Sub ProcessRequest(context As HttpContext) Implements IHttpHandler.ProcessRequest
Dim id As String = context.Request.QueryString("id")
Dim grabzIt As New GrabzItClient("APP_KEY", "APP_SECRET")
Dim file As GrabzItFile = grabzIt.GetResult(id)
file.Save("output.pdf")
End Sub
Public ReadOnly Property IsReusable As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
End Class
' IronPDF: Synchronous - result immediately available
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf") ' Done! No callback needed.
遷移後刪除所有GrabzIt回呼處理程序(.ashx 檔案、處理程序端點、webhook 設定)。
真正的向量PDF
GrabzIt 可建立以影像為基礎的 PDF,其中的文字無法選擇。IronPDF生成真正的矢量 PDF:
// With IronPDF, text extraction works natively
var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText(); // Works without OCR!
// With IronPDF, text extraction works natively
var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText(); // Works without OCR!
Imports IronPdf
' With IronPDF, text extraction works natively
Dim pdf = PdfDocument.FromFile("document.pdf")
Dim text As String = pdf.ExtractAllText() ' Works without OCR!
請參閱 文字擷取文件,以瞭解更多詳細資訊。
較小的檔案大小
以向量為基礎的 PDF 通常比GrabzIt以影像為基礎的 PDF 小 5-10 倍。 這可改善儲存成本、下載時間及電子郵件附件的可行性。
移除 API 認證
GrabzIt 的每個操作都需要 API 認證:
// Remove these from configuration
// YOUR_APPLICATION_KEY
// YOUR_APPLICATION_SECRET
// Remove these from configuration
// YOUR_APPLICATION_KEY
// YOUR_APPLICATION_SECRET
IronPDF 使用在應用程式啟動時設定一次的單一授權金鑰 - 無需每次要求驗證。
疑難排解
問題 1:GrabzItClient 未找到
問題:移除GrabzIt後,GrabzItClient 引用導致編譯錯誤。
解:替換為 ChromePdfRenderer:
// Remove:
// var grabzIt = new GrabzItClient("KEY", "SECRET");
// Replace with:
var renderer = new ChromePdfRenderer();
// Remove:
// var grabzIt = new GrabzItClient("KEY", "SECRET");
// Replace with:
var renderer = new ChromePdfRenderer();
' Remove:
' Dim grabzIt = New GrabzItClient("KEY", "SECRET")
' Replace with:
Dim renderer = New ChromePdfRenderer()
問題 2:PDFOptions 未找到
問題:IronPDF中不存在 PDFOptions 類別。
解決方案:使用 RenderingOptions 屬性:
// GrabzIt
var options = new PDFOptions();
options.PageSize = PageSize.A4;
// IronPDF
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
// GrabzIt
var options = new PDFOptions();
options.PageSize = PageSize.A4;
// IronPDF
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
' GrabzIt
Dim options As New PDFOptions()
options.PageSize = PageSize.A4
' IronPDF
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
問題 3:回呼處理器仍被引用
問題:應用程式需要回調端點。
解決方案:徹底刪除回呼機制。IronPDF會同步傳回結果 - 不需要 webhooks。
問題 4:未找到 ImageOptions
問題:IronPDF中不存在 ImageOptions 類別。
解決方案:先渲染成 PDF,再轉換:
// GrabzIt
var options = new ImageOptions();
options.Format = ImageFormat.png;
grabzIt.HTMLToImage(html, options);
// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
var images = pdf.ToBitmap();
images[0].Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
// GrabzIt
var options = new ImageOptions();
options.Format = ImageFormat.png;
grabzIt.HTMLToImage(html, options);
// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
var images = pdf.ToBitmap();
images[0].Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
' GrabzIt
Dim options As New ImageOptions()
options.Format = ImageFormat.png
grabzIt.HTMLToImage(html, options)
' IronPDF
Dim pdf = renderer.RenderHtmlAsPdf(html)
Dim images = pdf.ToBitmap()
images(0).Save("output.png", System.Drawing.Imaging.ImageFormat.Png)
遷移清單
預遷移
- 清點程式碼庫中所有GrabzItAPI 呼叫
- 確定回呼處理程序和 webhook 端點
- 記錄GrabzIt目前的選項和模板
- 取得IronPDF許可證密鑰
- 計劃回調處理程序停用
程式碼遷移
- 安裝 IronPdf NuGet 套件:
dotnet add package IronPdf - 移除GrabzItNuGet 套件:
dotnet remove package GrabzIt - 將
GrabzItClient替換為ChromePdfRenderer - 將
HTMLToPDF()轉換為RenderHtmlAsPdf() - 將
URLToPDF()轉換為RenderUrlAsPdf() - 將
Save(callback)替換為SaveAs(path) - 將選項從
PDFOptions更新為RenderingOptions
基礎架構遷移
- 刪除回呼處理程序檔案(
.ashx等) - 從設定中移除GrabzItAPI 金鑰
- 移除 webhook URL 配置
- 將IronPDF許可證金鑰新增至配置中
- 移除輪詢/狀態檢查代碼
測試
- 測試 HTML 至 PDF 的轉換
- 測試 URL 至 PDF 的轉換
- 確認輸出的PDF文件中文字可選擇。
- 測試文字擷取功能(不使用 OCR)
- 確認檔案大小較小
- 無網路延遲的效能測試
後遷移
取消GrabzIt訂閱
- 歸檔回呼處理程序程式碼
- 更新文件
- 監控任何與GrabzIt相關的錯誤

