跳至页脚内容
迁移指南

如何用 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.按捕获量定价:按使用量付费的模式在扩大规模后可能会变得昂贵。 每生成一份 PDF 都需要成本。

5.无文本搜索:由于 PDF 是基于图像的,如果没有 OCR,文本搜索和提取将无法进行,这将增加额外的步骤和成本。

6.文件大小:基于图像的 PDF 比基于矢量的 PDF 大得多,通常是后者的 5-10 倍。

7.网络依赖性:在没有网络连接的情况下无法生成 PDF,因此无法实现离线场景。

8.延迟:每次生成 PDF 都需要通过网络往返外部服务器,因此会增加 500ms-5s 的延迟。

GrabzIt与IronPDF对比

方面GrabzItIronPDF
PDF 类型基于图像(截图)真正的矢量 PDF
文本选择不可能全文选择
文本搜索需要 OCR本地可搜索
处理地点外部服务器本地/流程中
隐私保护外部发送的数据数据保持本地化
延迟网络往返(500ms-5s)本地处理(~100 毫秒)
定价模式每次捕获每位开发人员许可证
离线能力
文件大小大图(图像数据)小(矢量数据)
需要回电是(异步)否(同步/异步)
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)</代码<代码>new ChromePdfRenderer()</ 代码无需验证
<代码>HTMLToPDF(html)</代码<代码>renderer.RenderHtmlAsPdf(html)</代码直接返回 PDF
<代码>URLToPDF(url)</代码<代码>renderer.RenderUrlAsPdf(url)</代码直接返回 PDF
<代码>HTMLToImage(html)</代码<代码>pdf.ToBitmap()</代码渲染然后转换
<代码>保存(callbackUrl)</代码<代码>pdf.SaveAs(路径)</代码立竿见影的效果
<代码>SaveTo(文件路径)</代码<代码>pdf.SaveAs(filePath)</代码相同功能
<代码>GetResult(id)</代码不适用无需回调
<代码>GetStatus(id)</代码不适用同步操作

PDFOptions 到 RenderingOptions 映射

GrabzIt PDF 选项IronPdf 属性备注
<代码>页面大小</代码>(A4、Letter)<代码>RenderingOptions.PaperSize</代码使用 PdfPaperSize 枚举
<代码>CustomId</代码不适用不需要
<代码>页边距</代码<代码>RenderingOptions.MarginTop</代码单位相同(毫米)
<代码>边距下限</代码<代码>RenderingOptions.MarginBottom</代码单位相同(毫米)

ImageOptions 到IronPDF的映射

GrabzIt 图像选项IronPdf 同等产品备注
<代码>格式</代码> (png, jpg)<代码>bitmap.Save(路径,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_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.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 配置)。

真正的矢量 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!
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:未找到 PDF 选项

问题PDFOptions 类在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:回调处理程序仍被引用

问题:应用程序期望回调端点。

解决方案:完全删除回调基础架构。IronPDF同步返回结果--无需网络钩子。

问题 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 添加软件包 IronPdf</ 代码
  • [ ] 删除GrabzItNuGet 软件包:<代码>dotnet 移除GrabzIt软件包</代码
  • [ ] 将 GrabzItClient 替换为 ChromePdfRenderer
  • [ ] 将 HTMLToPDF() 转换为 RenderHtmlAsPdf()
  • [ ] 将 URLToPDF() 转换为 RenderUrlAsPdf()
  • [ ] 将 Save(callback) 替换为 SaveAs(path)
  • [ ] 将选项从 PDFOptions 更新为 RenderingOptions

基础架构迁移

  • [ ] 删除回调处理程序文件(<代码>.ashx</代码>等)
  • [ ] 从配置中移除GrabzItAPI 密钥
  • [ ] 删除网络钩子 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 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。