IRONSOFTWAREHOME
影片

如何在 C# 中使用 IronPDF 將 PDF 轉換為 PDF A

Curtis Chau
Curtis Chau
Updated: 2026年7月19日

從GrabzIt遷移到IronPDF將您的.NET PDF工作流程從基於雲端的截圖捕獲服務(具有回調複雜度)轉變為產生真正的向量PDF(具有可選和可搜尋的文字)的處理內嵌程式庫。 本指南提供了一個全面的、逐步的遷移路徑,消除了對外部伺服器的依賴、回調處理程式,以及專業.NET開發者所面臨的按次定價問題。

為何從GrabzIt遷移到IronPDF

GrabzIt架構問題

GrabzIt是一個基於雲端的截圖和PDF捕獲服務。雖然方便於快速整合,但它有基本的架構限制:

  1. 基於影像的PDFs: GrabzIt建立的截圖型PDF中,文字是不可選擇的,實質上是包裝在PDF格式中的影像。 這對於任何需要文字操作或可及性的使用案例來說都是一個基本的限制。

  2. 外部處理: 所有的內容都被送到GrabzIt的伺服器進行處理,對於敏感資料造成隱私和合規性問題。 您的HTML內容將離開您的基礎設施。

  3. 回調複雜性: GrabzIt使用非同步回調模型,需要webhook處理基礎設施。 您必須設置端點以接收結果,增加了架構的複雜性。

  4. 按次定價: 按次付費模式在大規模下可能會變得昂貴。 每次PDF生成都會產生成本。

  5. 無法搜尋文字: 由於PDF是基於影像的,文字搜尋和提取在沒有OCR情況下是不可行的,這需要額外的步驟與費用。

  6. 文件大小較大: 基於影像的PDF文件比向量PDF大5至10倍。

  7. 網路依賴性: 沒有網路連線就無法生成PDF,這使得離線場景變得不可能。

  8. 延遲: 每次生成PDF都需要網路往返到外部伺服器,比起本地內嵌生成增加了顯著的延遲。

GrabzIt與IronPDF對比

方面GrabzItIronPDF
PDF型別基於影像(截圖)真正的向量PDF
文字選擇不可能完整文字選擇
文字搜尋需要OCR原生可搜尋
處理位置外部伺服器本地/處理內嵌
隱私資料外部傳送資料保留在本地
延遲網路往返(500ms-5s)本地處理(約100ms)
價格模式按次定價每開發者授權
離線能力
文件大小大(影像資料)小(向量資料)
必需回調是(非同步)否(同步/異步)
CSS/JS 支援有限完整的Chromium引擎

IronPDF本地整合現代.NET範式,並完全在程式內執行,從而消除了PDF流程中的雲端往返。


遷移複雜性評估

功能的預估努力程度

功能遷移複雜性
HTML轉PDF非常低
URL到PDF非常低
HTML至影像
頁面大小/邊距
回調處理程式
浮水印
頁眉/頁腳
認證密鑰非常低

範式轉變

GrabzIt遷移的基本轉變是從基於非同步回調的雲端處理同步處理內嵌生成:

GrabzIt: 傳送HTML → 等待回調 → 從伺服器檢索結果
IronPDF: 渲染HTML → 立即獲取PDF
Text

開始之前

前提條件

  1. .NET版本: IronPDF支援 .NET Framework 4.6.2+ 和 .NET Core 3.1+ / .NET 5+
  2. **授權金鑰:**從ironpdf.com取得您的IronPDF授權金鑰
  3. 計劃基礎設施移除: 文件化回調處理程式和webhook端點以便停用

識別所有GrabzIt使用情況

# Find GrabzIt 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" .
SHELL

NuGet包變更

# 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");

之後(IronPDF):

// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

// Then create renderer without credentials
var renderer = new ChromePdfRenderer();

步驟2:更新名稱空間的引入

// Before (GrabzIt)
using GrabzIt;
using GrabzIt.Parameters;

// After (IronPDF)
using 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 PDFOptionsIronPDF 屬性
PageSize (A4, Letter)RenderingOptions.PaperSize
CustomId
MarginTopRenderingOptions.MarginTop
MarginBottomRenderingOptions.MarginBottom

ImageOptions 到IronPDF映射

GrabzIt ImageOptionsIronPDF等價
Format (png, jpg)bitmap.Save(path, ImageFormat.Png)
WidthRenderingOptions.ViewPortWidth
HeightRenderingOptions.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");
    }
}

之後(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");
    }
}

差異很大:GrabzIt需要API憑證(YOUR_APPLICATION_KEYYOUR_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");
    }
}

之後(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");
    }
}

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");
    }
}

之後(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);
    }
}

GrabzIt提供專用的ImageOptions進行格式、寬度和高度配置。 IronPDF通過首先使用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! 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!

請參閱文字提取文件以獲取更多詳細資訊。

較小的檔案大小

基於向量的PDF通常比GrabzIt的基於影像的PDF小5至10倍。 這改善了儲存成本、下載時間和電子郵件附件的可行性。

移除API憑證

GrabzIt要求每次操作的API憑證:

// 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();

問題2:找不到PDFOptions

問題: PDFOptions類在IronPDF中不存在。

**解決方案:**使用RenderingOptions屬性:

// GrabzIt
var options = new PDFOptions();
options.PageSize = PageSize.A4;

// IronPDF
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;

問題3:回調處理程式仍被引用

**問題:**應用程式預期有回調端點。

**解決方案:**完全刪除回調基礎設施。 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 API呼叫
  • 識別回調處理程式和webhook端點
  • 文件化當前GrabzIt選項和模板
  • 獲得IronPDF授權金鑰
  • 計劃回調處理程式停用

程式碼遷移

  • 安裝IronPDF NuGet包:dotnet add package IronPdf
  • 移除GrabzIt NuGet包:dotnet remove package GrabzIt
  • GrabzItClient替換為ChromePdfRenderer
  • HTMLToPDF()轉換為RenderHtmlAsPdf()
  • URLToPDF()轉換為RenderUrlAsPdf()
  • Save(callback)替換為SaveAs(path)
  • 將選項從PDFOptions更新為RenderingOptions

基礎設施遷移

  • 刪除回調處理程式檔案(.ashx,等等)
  • 從配置中移除GrabzIt API密鑰
  • 移除webhook URL配置
  • 將IronPDF授權密鑰加入配置中
  • 移除輪詢/狀態檢查程式碼

測試

  • 測試 HTML 到 PDF 的轉換
  • 測試 URL 到 PDF 的轉換
  • 驗證輸出的PDF中文字是可選擇的
  • 測試文字提取是否有效(無需OCR)
  • 驗證檔案大小是否較小
  • 在無網路延遲的情況下進行性能測試

遷移後

  • 取消GrabzIt訂閱
  • 將回調處理程式程式碼存檔
  • 更新文件
  • 監控任何與GrabzIt相關的錯誤

請注意: GrabzIt 是其各自所有者的註冊商標)。 本網站與GrabzIt無關,無獲認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供參考,反映撰寫時公開可用的資訊。
Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

...
閱讀更多

相關文章

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
預訂您的免費現場演示
Booking Badge

受到全球數百萬工程師的信任

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表格或電子郵件sales@ironsoftware.com
您的詳細資訊將始終保密
受到全球數百萬工程師的信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立