如何在 C# 中從 GrabzIt 遷移到 IronPDF
從GrabzIt轉移到 IronPDF:完整的 C# 遷移指南。
從GrabzIt轉換到 IronPDF,可將您的 .NET PDF 工作流程從具有回呼複雜性的雲端截圖擷取服務,轉換為可產生具有可選擇、可搜尋文字的真正向量 PDF 的程序內程式庫。 本指南為專業的 .NET 開發人員提供了一個全面、循序漸進的遷移路徑,消除了外部伺服器的依賴性、回呼處理器以及每次擷取的價格。
為何要從GrabzIt移轉到 IronPDF?
GrabzIt架構問題
GrabzIt 是基於雲端的螢幕截圖和 PDF 擷取服務。雖然方便快速整合,但它有基本的架構限制:
1.以圖像為基礎的 PDF:GrabzIt 可建立以螢幕截圖為基礎的 PDF,其中的文字是不可選擇的 - 基本上是以 PDF 格式包裝的影像。 對於任何需要文字操作或存取的使用個案而言,這是最基本的限制。
2.外部處理:所有內容都會傳送到GrabzIt的伺服器進行處理,因此會產生敏感資料的隱私權與合規性問題。 您的 HTML 內容離開您的基礎架構。
3.回呼複雜性:GrabzIt 使用異步回呼模型,需要 webhook 處理基礎架構。 您必須設定端點來接收結果,以增加架構的複雜性。
4.Per-Capture 定價:按使用量付費的模式在規模擴大時可能會變得昂貴。 每產生一份 PDF 都會產生成本。
5.無文字搜尋:由於 PDF 是以影像為基礎,因此若沒有 OCR 就無法進行文字搜尋和萃取 - 這是額外的步驟和成本。
6.較大的檔案大小:以圖片為基礎的 PDF 比以向量為基礎的 PDF 大很多,通常是前者的 5-10 倍。
7.網路依賴性:無法在沒有網際網路連線的情況下產生 PDF,使得離線方案無法實現。
8.延遲:每次產生 PDF 都需要透過網路往返外部伺服器,因此會增加 500ms 至 5s 的延遲。
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 至圖片 | 低 | 渲染 PDF 然後轉換 |
| 頁面大小/邊界 | 低 | 屬性對應 |
| 回呼處理程式 | 低 | 完全刪除 |
| 水印 | 低 | 基於 HTML 的方法 |
| 頁首/頁尾 | 語言 | 範本轉換為 HTML |
| 驗證鑰匙 | 非常低 | 移除GrabzIt按鍵 |
範式轉移
這次GrabzIt遷移的基本轉變是從 基於雲端處理的異步回呼轉變為 同步進程中產生:
GrabzIt: 傳送 HTML → 等待回呼 → 從伺服器擷取結果
IronPdf: 渲染 HTML → 立即取得 PDF開始之前
先決條件
1..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");IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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();IRON VB CONVERTER ERROR developers@ironsoftware.com步驟 2:更新命名空間匯入
// Before (GrabzIt)
using GrabzIt;
using GrabzIt.Parameters;
// After (IronPDF)
using IronPdf;// Before (GrabzIt)
using GrabzIt;
using GrabzIt.Parameters;
// After (IronPDF)
using IronPdf;IRON VB CONVERTER ERROR developers@ironsoftware.com完整的 API 參考資料
GrabzItClient 至IronPDF對應。
| GrabzIt 方法 | IronPdf 同等級產品 | 筆記 |
|---|---|---|
new GrabzItClient(key, secret) | 新的 ChromePdfRenderer() | 無需認證 |
HTMLToPDF(html) | renderer.RenderHtmlAsPdf(html)。 | 直接返回 PDF |
URLToPDF(url)。 | renderer.RenderUrlAsPdf(url)。 | 直接返回 PDF |
HTMLToImage(html) | <代碼>pdf.ToBitmap()</代碼 | 渲染然後轉換 |
儲存(callbackUrl)。 | <代碼>pdf.SaveAs(路徑)</代碼 | 即時成果 |
| <代碼>SaveTo(filePath)</代碼 | pdf.SaveAs(filePath)。 | 相同的功能 |
| <代碼>GetResult(id)</代碼 | 不適用 | 不需要回調 |
| <代碼>GetStatus(id)</代碼 | 不適用 | 同步操作 |
PDFOptions 至 RenderingOptions 對應
| GrabzIt PDFOptions | IronPdf 特性 | 筆記 |
|---|---|---|
PageSize (A4, Letter) | RenderingOptions.PaperSize | 使用 PdfPaperSize 枚舉 |
CustomId | 不適用 | 不需要 |
MarginTop | RenderingOptions.MarginTop | 相同單位 (mm) |
邊界底線 | RenderingOptions.MarginBottom | 相同單位 (mm) |
ImageOptions 至IronPDF對應。
| GrabzIt ImageOptions | IronPdf 同等級產品 | 筆記 |
|---|---|---|
| <編碼>格式</編碼> (png, jpg) | bitmap.Save(path,ImageFormat.Png)。 | 在 ToBitmap() 之後 |
寬度 | RenderingOptions.ViewPortWidth | 檢視埠寬度 |
高度 | 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com差異很大: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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comGrabzIt 需要透過選項物件設定 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comGrabzIt 提供了一個專用的 HTMLToImage() 方法,其中包含格式、寬度和高度設定的 ImageOptions 。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.IRON VB CONVERTER ERROR developers@ironsoftware.com移轉後刪除所有GrabzIt回呼處理程式 (.ashx 檔案、處理程式端點、webhook 設定)。
True Vector PDFs
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!IRON VB CONVERTER ERROR developers@ironsoftware.com請參閱 文字擷取文件,以瞭解更多詳細資訊。
較小的檔案大小
以向量為基礎的 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_SECRETIRON VB CONVERTER ERROR developers@ironsoftware.comIronPDF 使用在應用程式啟動時設定一次的單一授權金鑰 - 無需每次要求驗證。
疑難排解
問題 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();IRON VB CONVERTER ERROR developers@ironsoftware.com問題 2:PDFOptions 未找到
問題:PDFOptions class 在IronPDF中不存在。
解決方案:使用 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;IRON VB CONVERTER ERROR developers@ironsoftware.com問題 3:回呼處理器仍被引用
問題:應用程式期望回呼端點。
解決方案:完全刪除 callback 基礎架構。IronPDF會同步傳回結果 - 不需要 webhooks。
問題 4:未找到 ImageOptions
問題:ImageOptions 類在IronPDF中不存在。
解決方案:先渲染為 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);IRON VB CONVERTER ERROR developers@ironsoftware.com遷移清單
預遷移
- [在程式碼庫中清點所有GrabzItAPI 呼叫
- [ ] 識別回呼處理程式和 webhook 端點
- [ ] 記錄目前的GrabzIt選項和範本
- [ ] 獲得 IronPdf 授權金鑰
- [ ] 計劃回呼處理程式退役
程式碼遷移
- [ ] 安裝 IronPdf NuGet 套件:
dotnet add package IronPdf。 - [ ] 移除GrabzItNuGet 套件:
dotnet 移除套件 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相關的錯誤
結論
從GrabzIt轉換到IronPDF可為 .NET 應用程式提供多項重大改進。 您將獲得真正的向量 PDF 檔案,其中包含可選擇、可搜尋的文字,而非基於影像的螢幕截圖。 本地處理消除了外部伺服器的依賴性、隱私問題和網路延遲。 同步 API 完全消除了回呼的複雜性 - 刪除您的 webhook 處理器和狀態輪詢程式碼。
本次轉換的主要變更如下 1.PDF類型:基於圖片的螢幕截圖 → 真向量 PDF 2.處理:外部伺服器 → 本地處理中 3.架構:同步回調 → 同步結果 4.檔案大小:大型影像資料 → 小型向量資料 5.文字:需要 OCR → 本機可搜尋






