如何在 C# 中將 GrabzIt 遷移到 IronPDF
從 抓取 遷移到 IronPDF 會將您的 .NET PDF 工作流程從基於雲端的螢幕截圖擷取服務(具有回呼複雜性)轉變為進程內庫,該程式庫可產生具有可選、可搜尋文字的真正向量 PDF。 本指南為專業的 .NET 開發人員提供了一個全面的、逐步的遷移路徑,消除了外部伺服器依賴性、回調處理程序和按捕獲次數計費。
為什麼要從 抓取 遷移到 IronPDF
GrabzIt架構問題
GrabzIt 是一款基於雲端的螢幕截圖和 PDF 擷取服務。雖然它便於快速集成,但其架構存在根本性的限制:
1.基於圖像的 PDF: 抓取 創建基於螢幕截圖的 PDF,其中文字不可選——本質上是包裝在 PDF 格式中的圖像。 對於任何需要文字處理或輔助功能的應用場景來說,這是一個根本性的限制。
2.外部處理:所有內容都會傳送到 抓取 的伺服器進行處理-這會對敏感資料造成隱私和合規性的擔憂。 您的HTML內容將離開您的基礎架構。
3.回呼複雜性: 抓取 使用非同步回呼模型,需要 webhook 處理基礎架構。 您必須設定端點來接收結果,這會增加架構的複雜度。
4.按捕獲量定價:按使用量付費模式在規模化時可能會變得很昂貴。 每次產生PDF文件都會產生費用。
5.無法進行文字搜尋:由於 PDF 是基於圖像的,因此如果沒有 OCR,文字搜尋和提取就無法進行——這需要額外的步驟和成本。
6.檔案大小更大:基於圖像的 PDF 文件比基於向量的 PDF 文件大得多,通常是後者的 5-10 倍。
7.網路依賴性:沒有網路連線就無法產生 PDF,因此無法離線使用。
8.延遲:每次產生 PDF 都需要與外部伺服器進行網路往返,增加 500 毫秒至 5 秒的延遲。
抓取 與 IronPDF 對比
| 方面 | 抓取 | IronPDF |
|---|---|---|
| PDF類型 | 基於圖像(螢幕截圖) | 真正的向量 PDF |
| 文字選擇 | 不可能 | 全文選擇 |
| 文字搜尋 | 需要進行光學字元辨識 (OCR)。 | 原生可搜尋 |
| 處理地點 | 外部伺服器 | 本地/進程內 |
| 隱私 | 向外部發送的數據 | 資料保留在本地 |
| 延遲 | 網路往返時間(500毫秒-5秒) | 本地處理(約100毫秒) |
| 定價模式 | 每次捕獲 | 按開發者計費的許可 |
| 離線能力 | 不 | 是的 |
| 文件大小 | 大型(影像資料) | 小(向量資料) |
| 需要回調 | 是的(非同步) | 否(同步/非同步) |
| CSS/JS 支持 | 有限的 | 全鉻發動機 |
對於計劃在 2025 年和 2026 年採用 .NET 10 和 C# 14 的團隊,IronPDF 提供了一個面向未來的基礎,其本地處理功能與現代 .NET 模式原生整合。
遷移複雜度評估
各功能預計工作量
| 特徵 | 遷移複雜性 | 筆記 |
|---|---|---|
| HTML 轉 PDF | 非常低 | 直接替代法 |
| PDF檔案的URL | 非常低 | 直接替代法 |
| HTML轉影像 | 低的 | 渲染 PDF 然後轉換 |
| 頁面尺寸/頁邊距 | 低的 | 屬性映射 |
| 回呼處理程序 | 低的 | 完全刪除它們 |
| 水印 | 低的 | 基於HTML的方法 |
| 頁首/頁尾 | 中等的 | 模板轉 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 端點
識別所有 抓取 使用情況
# Find 抓取 client 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" .# Find 抓取 client 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");(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();步驟 2:更新命名空間導入
// Before (GrabzIt)
using GrabzIt;
using GrabzIt.Parameters;
// After (IronPDF)
using IronPdf;// Before (GrabzIt)
using GrabzIt;
using GrabzIt.Parameters;
// After (IronPDF)
using IronPdf;完整 API 參考
GrabzItClient 到 IronPDF 的映射
| 抓取 方法 | IronPDF當量 | 筆記 |
|---|---|---|
new GrabzItClient(key, secret) | new ChromePdfRenderer() | 無需身份驗證 |
HTMLToPDF(html) | renderer.RenderHtmlAsPdf(html) | 返回 PDF 文件 |
URLToPDF(url) | renderer.RenderUrlAsPdf(url) | 返回 PDF 文件 |
HTMLToImage(html) | pdf.ToBitmap() | 渲染然後轉換 |
Save(callbackUrl) | pdf.SaveAs(path) | 立即見效 |
SaveTo(filePath) | pdf.SaveAs(filePath) | 相同的功能 |
GetResult(id) | 不適用 | 無需回訪 |
GetStatus(id) | 不適用 | 同步操作 |
PDF選項到渲染選項的映射
| 抓取 PDF選項 | IronPDF屬性 | 筆記 |
|---|---|---|
PageSize (A4,Letter) | RenderingOptions.PaperSize | 使用PdfPaperSize枚舉 |
CustomId | 不適用 | 不需要 |
MarginTop | RenderingOptions.MarginTop | 單位相同(毫米) |
MarginBottom | RenderingOptions.MarginBottom | 單位相同(毫米) |
ImageOptions 到 IronPDF 映射
| 抓取 圖片選項 | IronPDF當量 | 筆記 |
|---|---|---|
Format (png、jpg) | bitmap.Save(path, ImageFormat.Png) | 在ToBitmap()之後 |
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");
}
}(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");
}
}差異很大:GrabzIt 需要 API 憑證( YOUR_APPLICATION_KEY , YOUR_APPLICATION_SECRET ),建立一個帶有自訂 ID 的PDFOptions對象,結果是透過外部伺服器發送的基於圖像的 PDF。 IronPDF 的ChromePdfRenderer可在本地產生真正的向量 PDF,文字可選擇-無需憑證、無需網路呼叫、無需回呼。 有關其他渲染選項,請參閱HTML 轉 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");
}
}(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");
}
}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");
}
}(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);
}
}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.遷移後刪除所有 抓取 回呼處理程序( .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!更多詳情請參閱文字擷取文件。
文件體積更小
基於向量的 PDF 檔案通常比 抓取 基於圖像的 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_SECRETIronPDF 使用在應用程式啟動時一次性設定的單一許可證金鑰——無需按請求進行身份驗證。
故障排除
問題 1:未找到 GrabzItClient
問題:移除 抓取 後, 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();問題 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;問題 3:回呼處理程序仍然被引用
問題:應用程式需要回調端點。
解決方案:徹底刪除回呼機制。 IronPDF 同步回傳結果-無需 webhook。
問題 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);遷移清單
遷移前
- 清點程式碼庫中所有 抓取 API 呼叫
- 確定回呼處理程序和 webhook 端點
- 記錄 抓取 目前的選項和模板
- 取得 IronPDF 許可證密鑰
- 計劃回調處理程序停用
程式碼遷移
安裝 IronPdf NuGet 套件: dotnet add package IronPdf
- 移除 抓取 NuGet 套件:
dotnet remove package GrabzIt - 將
GrabzItClient替換為ChromePdfRenderer - 將
HTMLToPDF()轉換為RenderHtmlAsPdf() - 將
URLToPDF()轉換為RenderUrlAsPdf() - 將
Save(callback)替換為SaveAs(path) - 將選項從
PDFOptions更新為RenderingOptions
基礎設施遷移
- 刪除回呼處理程序檔案(
.ashx等) - 從設定中移除 抓取 API 金鑰
- 移除 webhook URL 配置
- 將 IronPDF 許可證金鑰新增至配置中
- 移除輪詢/狀態檢查代碼
測試
- 測試 HTML 到 PDF 的轉換
- 測試 URL 到 PDF 的轉換
- 確認輸出的PDF文件中文字可選擇。
- 測試文字擷取功能(不使用 OCR)
- 確認檔案大小較小
- 無網路延遲的效能測試
移民後
取消 抓取 訂閱
- 歸檔回呼處理程序程式碼
- 更新文檔
- 監控任何與 抓取 相關的錯誤






