迁移指南 如何用 C# 从 GrabzIt 迁移到 IronPDF Curtis Chau 已发布:2026年1月25日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 从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 都需要与外部服务器进行网络往返,增加 500 毫秒至 5 秒的延迟。 GrabzIt与IronPDF对比 方面 GrabzIt IronPDF 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 开始之前 前提条件 .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"); $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(); $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; $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 属性 备注 页面大小</code>(A4、Letter)|<code>RenderingOptions.PaperSize 使用 PdfPaperSize 枚举 CustomId 不适用 不需要 页边距 RenderingOptions.MarginTop 单位相同(毫米) 边距下限 RenderingOptions.MarginBottom 单位相同(毫米) ImageOptions 到IronPDF的映射 GrabzIt 图像选项 IronPdf 同等产品 备注 格式</code> (png, jpg)|<code>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"); } } $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"); } } $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"); } } $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"); } } $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"); } } $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); } } $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. $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! $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 $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(); $vbLabelText $csharpLabel 问题 2:未找到 PDF 选项 问题: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; $vbLabelText $csharpLabel 问题 3:回调处理程序仍被引用 问题:应用程序需要回调端点。 解决方案:彻底删除回调机制。IronPDF同步返回结果--无需网络钩子。 问题 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); $vbLabelText $csharpLabel 迁移清单 迁移前 清点代码库中所有GrabzItAPI 调用 确定回调处理程序和 webhook 端点 记录GrabzIt当前的选项和模板 获取IronPDF许可证密钥 计划回调处理程序停用 代码迁移 安装 IronPdf NuGet 包: dotnet add package IronPdf 移除GrabzItNuGet 包: dotnet remove package 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相关的错误 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已发布2026年2月1日 如何用 C# 从 ZetPDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 ZetPDF 到 IronPDF 的迁移。从基于坐标的库转换到现代的 HTML 到 PDF 解决方案。包括 HTML 转换、合并 PDF 和移除 PDFSharp 依赖性的代码示例。 阅读更多 已发布2026年2月1日 如何用 C# 从 Scryber.Core 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 Scryber.Core 迁移到 IronPDF 的方法。从自定义 XML/HTML 解析转换到现代 Chromium 渲染器。包括 HTML 转换、URL 呈现和替换专有绑定的代码示例。 阅读更多 已发布2026年2月1日 如何用 C# 从 XFINIUM.PDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 XFINIUM.PDF 到 IronPDF 的迁移。从基于坐标的手动定位切换到声明式 HTML/CSS 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多 如何用 C# 从 HiQPdf 迁移到 IronPDF如何用 C# 从 Gotenberg 迁移...
已发布2026年2月1日 如何用 C# 从 ZetPDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 ZetPDF 到 IronPDF 的迁移。从基于坐标的库转换到现代的 HTML 到 PDF 解决方案。包括 HTML 转换、合并 PDF 和移除 PDFSharp 依赖性的代码示例。 阅读更多
已发布2026年2月1日 如何用 C# 从 Scryber.Core 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 Scryber.Core 迁移到 IronPDF 的方法。从自定义 XML/HTML 解析转换到现代 Chromium 渲染器。包括 HTML 转换、URL 呈现和替换专有绑定的代码示例。 阅读更多
已发布2026年2月1日 如何用 C# 从 XFINIUM.PDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 XFINIUM.PDF 到 IronPDF 的迁移。从基于坐标的手动定位切换到声明式 HTML/CSS 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多