跳過到頁腳內容
遷移指南

如何在 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的比較

範疇GrabzItIronPDF
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" .
SHELL

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
SHELL

快速啟動遷移

步驟 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.com
$vbLabelText   $csharpLabel

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();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

步驟 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
$vbLabelText   $csharpLabel

完整的 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 PDFOptionsIronPdf 特性筆記
PageSize (A4, Letter)RenderingOptions.PaperSize使用 PdfPaperSize 枚舉
CustomId不適用不需要
MarginTopRenderingOptions.MarginTop相同單位 (mm)
邊界底線RenderingOptions.MarginBottom相同單位 (mm)

ImageOptions 至IronPDF對應。

GrabzIt ImageOptionsIronPdf 同等級產品筆記
<編碼>格式</編碼> (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.com
$vbLabelText   $csharpLabel

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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

差異很大:GrabzIt 需要 API 認證 (YOUR_APPLICATION_KEYYOUR_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.com
$vbLabelText   $csharpLabel

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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

GrabzIt 提供了一個專用的 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
$vbLabelText   $csharpLabel

移轉後刪除所有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
$vbLabelText   $csharpLabel

請參閱 文字擷取文件,以瞭解更多詳細資訊。

較小的檔案大小

以向量為基礎的 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
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

問題 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
$vbLabelText   $csharpLabel

問題 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
$vbLabelText   $csharpLabel

遷移清單

預遷移

  • [在程式碼庫中清點所有GrabzItAPI 呼叫
  • [ ] 識別回呼處理程式和 webhook 端點
  • [ ] 記錄目前的GrabzIt選項和範本
  • [ ] 獲得 IronPdf 授權金鑰
  • [ ] 計劃回呼處理程式退役

程式碼遷移

  • [ ] 安裝 IronPdf NuGet 套件:dotnet add package IronPdf
  • [ ] 移除GrabzItNuGet 套件:dotnet 移除套件 GrabzIt
  • [ ] 將 GrabzItClient 替換為 ChromePdfRenderer
  • [ ] 將 HTMLToPDF() 轉換為 RenderHtmlAsPdf()
  • [ ] 將 URLToPDF() 轉換為 RenderUrlAsPdf()
  • [ ] 將 Save(callback) 改為 SaveAs(path)
  • [更新選項從 PDFOptionsRenderingOptions

基礎架構遷移

  • [ ] 刪除回呼處理程式檔案 (.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 → 本機可搜尋

探索完整的 IronPdf文件教程API參考,加速您的GrabzIt遷移。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。