GrabzIt 与 IronPDF:技术比较指南
当 .NET 开发人员评估 PDF 生成解决方案时,GrabzIt 凭借其基于云的屏幕截图和 PDF 捕获服务脱颖而出。 虽然GrabzIt提供了快速集成,但它创建的是基于图像的 PDF,文本不可选,并且需要将所有内容发送到外部服务器进行处理。IronPDF提供了一种不同的选择:一个进程内库,可以生成真正的矢量 PDF,其中包含可选择、可搜索的文本——所有操作都在本地进行,无需外部依赖。
本次比较从相关技术维度对两种解决方案进行了考察,以帮助专业开发人员和架构师针对其 .NET PDF 需求做出明智的决策。
了解 GrabzIt。
GrabzIt 是一款付费 SaaS 产品,专门提供屏幕截图和 PDF 捕获服务。 它允许开发人员通过云 API 将网页或 HTML 内容转换为 PDF。 该服务使用 GrabzItClient 进行身份验证,并使用应用程序密钥和秘密进行初始化。
GrabzIt 提供了用于 HTML 字符串转换的 HTMLToPDF() 方法、用于网页捕获的 URLToPDF() 方法和用于图像生成的 HTMLToImage() 方法。 配置使用选项类,如带有 CustomId 和 PageSize 等属性的 PDFOptions 和带有 Format,<代码>宽度</代码和<代码>高度</代码属性的 ImageOptions 。 对于同步文件输出,使用 SaveTo() 保存结果;对于异步处理,使用带有回调 URL 的 Save() 保存结果。
GrabzIt 的一个关键特点是它可以创建基于图像的 PDF——本质上就是将屏幕截图封装在 PDF 格式中。 这些 PDF 中的文本不可选择,文本搜索需要进行 OCR 处理。 所有内容都要发送到GrabzIt的服务器进行处理,这就需要考虑隐私问题和网络延迟。
了解IronPDF
IronPDF for .NET 是一个.NET 库,可在进程中运行,生成真正的矢量 PDF,并带有可选择和可搜索的文本。 该库可在本地处理所有内容,无需依赖外部服务器。
IronPDF 使用 ChromePdfRenderer 作为其主要的渲染类,并使用 RenderHtmlAsPdf() 和 RenderUrlAsPdf() 等方法。 配置通过 RenderingOptions 属性进行处理。 对于图像转换,可使用 ToBitmap() 转换渲染的 PDF。 使用 SaveAs() 保存文档,所有操作都是同步的,无需回调处理程序或网络钩子。
IronPDF 生成基于矢量的 PDF,其中的文本仍可选择和搜索,无需 OCR。 文件大小小于基于图像的 PDF,处理过程在本地进行,典型延迟时间约为 100-500ms。
架构和处理模型比较
这些解决方案的根本区别在于其处理架构和输出格式。
| 方面 | GrabzIt | IronPDF |
|---|---|---|
| PDF类型 | 基于图像(截图) | 真正的矢量 PDF |
| 文本选择 | 不可能 | 全文选择 |
| 文本搜索 | 需要 OCR | 本地可搜索 |
| 处理地点 | 外部服务器 | 本地/流程中 |
| 隐私 | 外部发送的数据 | 数据保持本地化 |
| 延迟 | 网络往返(500ms-5s) | 本地处理(~100 毫秒) |
| 定价模式 | 每次捕获 | 每位开发人员许可证 |
| 离线能力 | 否 | 是 |
| 文件大小 | 大图(图像数据) | 小(矢量数据) |
| 需要回电 | 是(异步模型) | 否(同步/异步) |
| CSS/JS支持 | 有限的 | 完整的 Chromium 引擎 |
GrabzIt 基于云的架构意味着每次生成 PDF 都需要对外部服务器进行 HTTP 调用。 这将引入网络延迟、可用性问题和速率限制等考虑因素。IronPDF的流程内方法消除了这些基础设施依赖性。
代码比较:常见的 PDF 操作
HTML 到 PDF 转换
最基本的操作展示了架构和 API 的差异。
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 要求使用应用程序密钥和秘密凭证创建 GrabzItClient ,使用 CustomId 等属性配置 PDFOptions ,使用 HTML 内容和选项调用 HTMLToPDF() ,然后使用 SaveTo() 保存。 翻译内容将发送到GrabzIt的服务器进行处理。
IronPDF 创建了一个 ChromePdfRenderer ,直接使用 HTML 字符串调用 RenderHtmlAsPdf() 并使用 SaveAs() 保存。 该操作在本地处理,无需外部验证。 翻译出来的 PDF 包含真正的矢量文本,可以选择和搜索。
有关高级 HTML 渲染选项,请浏览 HTML 到 PDF 转换指南。
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 通过 PDFOptions.PageSize = PageSize.A4 配置页面大小,然后使用 URL 和选项调用 URLToPDF() 。 网页由GrabzIt的服务器捕获,并以基于图像的 PDF 格式返回。
IronPDF 使用 URL 字符串直接调用 RenderUrlAsPdf() 。 页面大小可通过 renderer.RenderingOptions.PaperSize 进行配置。 页面使用IronPDF的嵌入式 Chromium 引擎进行本地渲染,生成带有可选文本的矢量 PDF。
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 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 用于配置 Format,<代码>宽度</代码和<代码>高度</代码属性。 图片由GrabzIt服务器生成。
IronPDF 首先使用 RenderHtmlAsPdf() 将 HTML 渲染为 PDF,然后使用 ToBitmap() 转换为位图,并返回一个图像数组(每页一个)。 单个图像使用标准的 System.Drawing 方法保存。 这种两步走的方法既能达到相同的效果,又能保持所有处理过程的本地化。
在 IronPDF 教程中了解有关 PDF 操作的更多信息。
API 映射参考
对于评估GrabzIt迁移或比较功能的开发人员,本映射显示了等价操作:
核心方法映射
| GrabzIt 方法 | IronPdf 同等产品 |
|---|---|
| <代码>new GrabzItClient(key、secret)</代码 | <代码>new ChromePdfRenderer()</ 代码 |
| <代码>HTMLToPDF(html)</代码 | <代码>renderer.RenderHtmlAsPdf(html)</代码 |
| <代码>HTMLToPDF(html, 选项)</代码 | 首先配置 RenderingOptions |
| <代码>URLToPDF(url)</代码 | <代码>renderer.RenderUrlAsPdf(url)</代码 |
| <代码>URLToPDF(url, 选项)</代码 | 首先配置 RenderingOptions |
| <代码>HTMLToImage(html)</代码 | <代码>pdf.ToBitmap()</代码 |
| <代码>保存(callbackUrl)</代码 | <代码>pdf.SaveAs(路径)</代码>或<代码>pdf.BinaryData</代码 |
| <代码>SaveTo(文件路径)</代码 | <代码>pdf.SaveAs(filePath)</代码 |
| <代码>GetResult(id)</代码 | 不适用 |
| <代码>GetStatus(id)</代码 | 不适用 |
PDFOptions 到 RenderingOptions 映射
| GrabzIt PDF 选项 | IronPdf 属性 |
|---|---|
| <代码>页边距</代码 | <代码>RenderingOptions.MarginTop</代码 |
| <代码>边距下限</代码 | <代码>RenderingOptions.MarginBottom</代码 |
| <代码>边距左移</代码 | <代码>RenderingOptions.MarginLeft</代码 |
| <代码>MarginRight</代码 | <代码>RenderingOptions.MarginRight</代码 |
| <代码>页面大小</代码>(A4、Letter) | <代码>RenderingOptions.PaperSize</代码 |
| <代码>方向</代码 | <代码>RenderingOptions.PaperOrientation</代码 |
| <代码>浏览器宽度</代码 | <代码>RenderingOptions.ViewPortWidth</代码 |
| <代码>浏览器高度</代码 | <代码>RenderingOptions.ViewPortHeight</代码 |
| <代码>延迟</代码 | <代码>RenderingOptions.RenderDelay</代码 |
| <代码>CustomWaterMark</代码 | <代码>pdf.ApplyWatermark()</代码 |
| <代码>密码</代码 | <代码>pdf.SecuritySettings.UserPassword</代码 |
| <代码>包含背景</代码 | <代码>RenderingOptions.PrintHtmlBackgrounds</代码 |
| <代码>模板 ID</ 代码 | <代码>RenderingOptions.HtmlHeader/Footer</代码 |
ImageOptions 到IronPDF的映射
| GrabzIt 图像选项 | IronPdf 同等产品 |
|---|---|
| <代码>格式</代码> (png, jpg) | <代码>bitmap.Save(路径,ImageFormat.Png)</代码 |
| <代码>宽度</代码 | <代码>RenderingOptions.ViewPortWidth</代码 |
| <代码>高度</代码 | <代码>RenderingOptions.ViewPortHeight</代码 |
功能对比摘要
| 特征 | GrabzIt | IronPDF |
|---|---|---|
| 真正的矢量 PDF | ❌(基于图像) | ✅ |
| 可选文本 | ❌ | ✅ |
| 可搜索文本(本地) | ❌(需要 OCR) | ✅ |
| 本地处理 | ❌(外部服务器) | ✅ |
| 离线能力 | ❌ | ✅ |
| 同步操作 | ⚠️(回调模型) | ✅ |
| 需要验证 | ✅(密钥/机密) | ❌ |
| HTML 至 PDF | ✅ | ✅ |
| URL 至 PDF | ✅ | ✅ |
| HTML 至图像 | ✅(本地) | ✅(通过 ToBitmap) |
| 文本提取 | ❌(无 OCR) | ✅ |
团队何时考虑从GrabzIt迁移到 IronPDF?
开发团队评估从GrabzIt过渡到IronPDF有几个原因:
基于图像的 PDF 局限性:GrabzIt创建的是基于屏幕截图的 PDF,其中文本不可选——本质上是包装在 PDF 格式中的图像。 对于需要文本选择、复制/粘贴功能或可访问性合规性的应用程序来说,这是一个很大的限制。IronPDF可生成真正的矢量 PDF,文本可完全选择和搜索。
外部处理问题:发送到GrabzIt的所有内容均在其外部服务器上进行处理。 对于处理敏感数据的应用程序,这就需要考虑隐私和合规性问题。IronPDF在本地处理所有内容,将数据保存在您的基础架构内。
回调架构复杂性:GrabzIt的异步回调模型需要 webhook 处理基础架构——回调端点、状态轮询和结果检索逻辑。IronPDF提供可立即返回结果的同步操作,完全消除了回调处理程序代码。
规模化按捕获量定价:随着 PDF 生成量的增加,GrabzIt 的按使用付费模式可能会变得很昂贵。IronPDF的按开发人员许可协议提供了可预测的成本,无论数量多少。
文本搜索要求:由于GrabzItPDF 是基于图像的,因此文本搜索和提取需要单独的 OCR 处理。IronPDFPDF 本机可搜索,文本提取可直接使用 pdf.ExtractAllText() 进行。
文件大小问题:GrabzIt生成的基于图像的 PDF 文件比基于矢量的 PDF 文件大得多(5-10 倍)。 对于生成大量 PDF 或存储空间有限的应用程序来说,这种差异是巨大的。
网络依赖性:GrabzIt没有互联网连接无法生成 PDF 文件。IronPDF可以离线工作,这对于必须在断开环境中运行的应用程序来说至关重要。
优势和考虑因素
GrabzIt的优势
快速设置:无需本地依赖即可集成 API 密钥 -语言无关:适用于任何可以发起 HTTP 请求的语言 -无本地资源:处理在GrabzIt的基础架构上进行。
GrabzIt注意事项
-基于图像的PDF:不使用OCR技术,文本无法选择或搜索。 -外部处理:数据发送到第三方服务器 -回调复杂度:需要 webhook 基础架构 -每次捕获成本:价格随捕获量而变化 -需要网络连接:不支持离线功能 文件增大:图像数据会显著增加文件大小。 -延迟:网络往返时间每次请求会增加 500 毫秒到 5 秒。
IronPDF的优势
-真正的矢量 PDF:可选择、可搜索的文本 -本地处理:数据保留在您的基础架构内。 -同步操作:无需回调处理程序 文件更小:矢量数据可将文件大小减少 5-10 倍。 -文本提取:无需 OCR 的原生文本提取 -支持离线使用:无需网络连接即可工作 -丰富的资源:大量的教程和文档
IronPDF注意事项
-本地资源:使用本地 CPU/内存进行处理 -商业许可:生产用途必需
结论
GrabzIt 和IronPDF代表了在 .NET 应用程序中生成 PDF 的根本不同方法。GrabzIt基于云的屏幕截图服务通过外部 API 调用创建基于图像的 PDF,需要进行身份验证、回调处理,并接受输出中文本不可选。
IronPDF 提供了一种流程内替代方案,可生成真正的矢量 PDF,并带有可选择、可搜索的文本。 该库消除了外部依赖性、回调基础架构和网络延迟,同时生成支持本地文本提取的较小文件。
随着企业对 .NET 10、C# 14 以及 2026 年之前的应用程序开发进行规划,在基于图像的云 PDF 和真正的矢量本地 PDF 之间做出选择,将极大地影响文档的可用性、可访问性和基础架构的复杂性。 需要可选择文本、数据隐私或简化架构的团队会发现IronPDF能有效满足这些要求。