ActivePDF与IronPDF:HTML到PDF教程及全面对比
IronPDF 和 ActivePDF 在 .NET 中生成 PDF 方面有何不同?
IronPDF提供一体化 PDF 解决方案,采用基于 Chrome 的渲染和直观的 API 设计,而 ActivePDF 提供模块化Enterprise组件,需要单独的许可证。 IronPDF在现代 Web 标准支持、跨平台部署以及大多数.NET开发场景的成本效益方面表现出色。
当开发人员需要在其.NET应用程序中提供可靠的PDF 生成功能时,通常会出现两种突出的解决方案: IronPDF和 ActivePDF。 这两个库都提供了创建、转换和操作 PDF 文档的有效功能,但它们在方法、定价和实现复杂性方面存在显著差异。
IronPDF以其直观的API 设计和使用Chrome 渲染引擎的完整HTML 到 PDF 转换脱颖而出,而 ActivePDF 通过多个专用组件(如用于HTML 转换的WebGrabber 和用于文档转换的DocConverter)提供以企业为中心的解决方案。 本文提供了深入的比较,以帮助开发人员根据其PDF 处理需求做出明智的决定。
| 类别 | 特点/方面 | IronPDF | ActivePDF | 主要优势 |
|---|---|---|---|---|
| **核心架构** | 设计理念 | 一体化库,方便开发人员使用 | 模块化组件,面向企业 | IronPDF:更简单的集成 |
| API 复杂性 | Intuitive methods like ``RenderHtmlAsPdf`()` | 特定组件的应用程序接口 | IronPDF:减少代码行数 | |
| 学习曲线 | 一般需要 1-2 天 | 一般为 1-2 周 | IronPDF:更快采用 | |
| **平台支持** | 跨平台 | Windows、Linux、macOS、Docker | 主要是 Windows 服务器 | IronPDF:真正的跨平台 |
| .NET版本 | .NET 10、9、8、7、6、5、Core、Framework 4.6.2+。 | .NET Framework 4.5+、Core 1.0、Standard 1.0 | IronPDF:现代 .NET 支持 | |
| 云平台 | Azure、AWS、Google 云优化 | 有限的云支持 | IronPDF:云原生就绪 | |
| **HTML 转 PDF** | 渲染引擎 | Chrome V8 引擎 | 本地和 IE 引擎 | IronPDF:现代渲染 |
| 支持 CSS3/HTML5 | 全面支持 | 部分支持 | IronPDF:现代网络标准 | |
| JavaScript 执行 | 完全支持 JavaScript | 对 JavaScript 的支持有限 | IronPDF:动态内容 | |
| 网络字体 | 谷歌字体、系统字体 | 仅限系统字体 | IronPDF:排版灵活性 | |
| **文档转换** | 支持格式 | HTML、DOCX、图像、RTF、MD | 300+ formats (`DocConverter`) | ActivePDF:更多格式 |
| DOCX 转换为 PDF | Built-in ``DocxToPdfRenderer`` | 本地 Office 转换 | ActivePDF:更好的保真度 | |
| 批量处理 | 程序化方法 | 查看文件夹支持 | ActivePDF:企业自动化 | |
| **性能** | HTML 渲染速度 | 典型值 125 毫秒,复杂值 835 毫秒 | 引擎变量 | IronPDF:性能稳定 |
| 内存使用 | 一般在 10MB 以下 | 基于服务的开销 | IronPDF:占用空间更小 | |
| 线程支持 | 本地Async/Await优化 | 多线程服务 | IronPDF:更好地集成 .NET | |
| **PDF功能** | 表单处理 | 创建、填充、扁平化表单 | 高级表单功能(工具包) | ActivePDF:复杂表格 |
| PDF/A 合规 | 支持 PDF/A-3B | 多个 PDF/A 级别 | ActivePDF:更多合规选项 | |
| OCR 功能 | 通过 IronOCR 集成 | 专用 OCR 组件 | 两种:可用的解决方案 | |
| 数字签名 | 集成的可视化签名 | 高级签名选项 | ActivePDF:企业签名 | |
| **开发人员经验** | 文档 | 完整的教程和示例 | 传统的 API 文档 | IronPDF:更好的学习资源 |
| 代码示例 | 100 多个可直接运行的示例 | GitHub 上的基本示例 | IronPDF:丰富的资源 | |
| 错误信息 | 描述性、可操作性 | 服务级信息 | IronPDF:更好的调试 | |
| **Licensing & Pricing** | 入门级 | Lite: $999 (1 dev, 1 project) | `WebGrabber`: $2,499+ per component | IronPDF:入门门槛降低 70 |
| Team License | Professional: $2,999 (10 devs) | 需要多个组件 | IronPDF:包罗万象 | |
| 套件选项 | Iron Suite: $1,498 (9 products) | 无套件选项 | IronPDF:卓越价值 | |
| **支持** | 支持包括 | 是,24/5 工程支持 | 支持门户访问 | IronPDF:直接工程支持 |
| 响应时间 | 一般需要 24-48 小时 | 因问题而异 | IronPDF:可预测的 SLA | |
| **最适合** | 使用案例 | 现代网络应用程序、快速开发 | 企业自动化、遗留系统 | 与上下文相关 |
| 项目类型 | SaaS、网络应用、微服务 | 文档管理、批处理 | 根据要求 |
概述
IronPDF C# 库是什么?
Iron Software是一家市场领先的组件提供商,提供IronPDF ,用于完整的PDF 操作。 IronPDF提供了一个全面的解决方案,可以从各种格式生成 PDF 文件,同时提供对文档属性的完全程序化控制。 开发者们喜欢IronPDF,因为它具有一致、可靠的输出和直观的 API,只需要极少的代码,尤其是在使用现代 Web 标准和JavaScript框架时。
IronPDF支持C# 、 VB .NET 、 ASP.NET 、MVC、.NET Core 、 .NET 9 和.NET 10。它可以在Windows 、 Linux 、 macOS 、 Docker 、 Azure 、 AWS和其他云平台上无缝运行。
什么是ActivePDF组件?
ActivePDF(现为 Apryse 的一部分)通过多个专业组件提供以企业为中心的 PDF 解决方案。 与 IronPDF 的统一方法不同,ActivePDF 为不同的PDF 任务提供单独的产品,因此需要仔细考虑许可选项和Enterprise部署策略。
ActivePDF WebGrabber 是什么?它用于 HTML 到 PDF 的转换
ActivePDF WebGrabber专门用于将HTML 源(URL、HTML 文件或HTML 字符串)转换为PDF 格式。 它提供了页面属性的配置选项,包括页眉、页脚、边距、水印和书签。 WebGrabber 同时支持 Native 和 Internet Explorer渲染引擎。
ActivePDF DocConverter 文档转换是什么?
ActivePDF DocConverter可将 300 多种文件格式转换为 PDF,包括Microsoft Office 文档、图像、CAD 文件等。 它具有受监控文件夹自动化、批量处理功能和企业级文档管理功能。
像Bootstrap这样的现代CSS框架在PDF中是如何渲染的?
现代 Web 应用程序越来越依赖 Bootstrap、Foundation 和 Tailwind CSS 等CSS 框架来实现一致、响应式的 UI 开发。 PDF 生成库必须准确地渲染这些框架,以保持Professional的文档质量和设计保真度。 了解每个库如何处理响应式 CSS和现代Web 字体对于选择正确的解决方案至关重要。
IronPDF如何处理 Bootstrap 和现代框架的支持?
IronPDF 的Chromium 渲染引擎确保完全支持所有现代 CSS 框架和规范,提供像素级完美的渲染效果:
Bootstrap 5:完全支持 Flexbox 和 CSS Grid 渲染,并提供响应式实用工具
- Bootstrap 4:完整的卡片系统、导航组件和表单布局
- Tailwind CSS:所有实用优先类和响应式变体都能正确渲染。 -基础:完整的网格和组件系统支持 现代CSS3: Flexbox、CSS Grid、自定义属性、动画、过渡和变换
- JavaScript执行:完全支持动态内容和框架交互
已通过生产示例验证:使用IronPDF 的渲染选项, Bootstrap 主页和官方模板可以以浏览器精确的保真度进行转换。
代码示例:使用 Bootstrap 的服务定价表
using IronPdf;
var renderer = new ChromePdfRenderer();
string bootstrapPricing = @"
<!DOCTYPE html>
<html>
<head>
<link href='___PROTECTED_URL_198___ rel='stylesheet'>
</head>
<body>
<div class='container my-5'>
<h1 class='text-center mb-5'>Service Plans</h1>
<div class='row g-4'>
<div class='col-md-4'>
<div class='card h-100 shadow-sm'>
<div class='card-header bg-light text-center py-3'>
<h3>Starter</h3>
</div>
<div class='card-body d-flex flex-column'>
<div class='text-center mb-4'>
<span class='h2'>$29</span>
<span class='text-muted'>/month</span>
</div>
<ul class='list-unstyled flex-grow-1'>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> 100 PDF conversions/month</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Basic templates</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Email support</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> 5 GB storage</li>
<li class='mb-2 text-muted'><i class='bi bi-x-circle'></i> Priority processing</li>
</ul>
<button class='btn btn-outline-primary w-100 mt-auto'>Get Started</button>
</div>
</div>
</div>
<div class='col-md-4'>
<div class='card h-100 shadow border-primary'>
<div class='position-absolute top-0 start-50 translate-middle'>
<span class='badge bg-primary'>Most Popular</span>
</div>
<div class='card-header bg-primary text-white text-center py-3'>
<h3>Professional</h3>
</div>
<div class='card-body d-flex flex-column'>
<div class='text-center mb-4'>
<span class='h2'>$99</span>
<span class='text-muted'>/month</span>
</div>
<ul class='list-unstyled flex-grow-1'>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> 1,000 PDF conversions/month</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Premium templates</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Priority support</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> 50 GB storage</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Priority processing</li>
</ul>
<button class='btn btn-primary w-100 mt-auto'>Get Started</button>
</div>
</div>
</div>
<div class='col-md-4'>
<div class='card h-100 shadow-sm'>
<div class='card-header bg-dark text-white text-center py-3'>
<h3>Enterprise</h3>
</div>
<div class='card-body d-flex flex-column'>
<div class='text-center mb-4'>
<span class='h2'>$299</span>
<span class='text-muted'>/month</span>
</div>
<ul class='list-unstyled flex-grow-1'>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Unlimited conversions</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Custom templates</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Dedicated support</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Unlimited storage</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> SLA guarantee</li>
</ul>
<button class='btn btn-dark w-100 mt-auto'>Contact Sales</button>
</div>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapPricing);
pdf.SaveAs("pricing-table.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
string bootstrapPricing = @"
<!DOCTYPE html>
<html>
<head>
<link href='___PROTECTED_URL_198___ rel='stylesheet'>
</head>
<body>
<div class='container my-5'>
<h1 class='text-center mb-5'>Service Plans</h1>
<div class='row g-4'>
<div class='col-md-4'>
<div class='card h-100 shadow-sm'>
<div class='card-header bg-light text-center py-3'>
<h3>Starter</h3>
</div>
<div class='card-body d-flex flex-column'>
<div class='text-center mb-4'>
<span class='h2'>$29</span>
<span class='text-muted'>/month</span>
</div>
<ul class='list-unstyled flex-grow-1'>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> 100 PDF conversions/month</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Basic templates</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Email support</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> 5 GB storage</li>
<li class='mb-2 text-muted'><i class='bi bi-x-circle'></i> Priority processing</li>
</ul>
<button class='btn btn-outline-primary w-100 mt-auto'>Get Started</button>
</div>
</div>
</div>
<div class='col-md-4'>
<div class='card h-100 shadow border-primary'>
<div class='position-absolute top-0 start-50 translate-middle'>
<span class='badge bg-primary'>Most Popular</span>
</div>
<div class='card-header bg-primary text-white text-center py-3'>
<h3>Professional</h3>
</div>
<div class='card-body d-flex flex-column'>
<div class='text-center mb-4'>
<span class='h2'>$99</span>
<span class='text-muted'>/month</span>
</div>
<ul class='list-unstyled flex-grow-1'>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> 1,000 PDF conversions/month</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Premium templates</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Priority support</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> 50 GB storage</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Priority processing</li>
</ul>
<button class='btn btn-primary w-100 mt-auto'>Get Started</button>
</div>
</div>
</div>
<div class='col-md-4'>
<div class='card h-100 shadow-sm'>
<div class='card-header bg-dark text-white text-center py-3'>
<h3>Enterprise</h3>
</div>
<div class='card-body d-flex flex-column'>
<div class='text-center mb-4'>
<span class='h2'>$299</span>
<span class='text-muted'>/month</span>
</div>
<ul class='list-unstyled flex-grow-1'>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Unlimited conversions</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Custom templates</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Dedicated support</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Unlimited storage</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> SLA guarantee</li>
</ul>
<button class='btn btn-dark w-100 mt-auto'>Contact Sales</button>
</div>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapPricing);
pdf.SaveAs("pricing-table.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim bootstrapPricing As String = "
<!DOCTYPE html>
<html>
<head>
<link href='___PROTECTED_URL_198___ rel='stylesheet'>
</head>
<body>
<div class='container my-5'>
<h1 class='text-center mb-5'>Service Plans</h1>
<div class='row g-4'>
<div class='col-md-4'>
<div class='card h-100 shadow-sm'>
<div class='card-header bg-light text-center py-3'>
<h3>Starter</h3>
</div>
<div class='card-body d-flex flex-column'>
<div class='text-center mb-4'>
<span class='h2'>$29</span>
<span class='text-muted'>/month</span>
</div>
<ul class='list-unstyled flex-grow-1'>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> 100 PDF conversions/month</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Basic templates</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Email support</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> 5 GB storage</li>
<li class='mb-2 text-muted'><i class='bi bi-x-circle'></i> Priority processing</li>
</ul>
<button class='btn btn-outline-primary w-100 mt-auto'>Get Started</button>
</div>
</div>
</div>
<div class='col-md-4'>
<div class='card h-100 shadow border-primary'>
<div class='position-absolute top-0 start-50 translate-middle'>
<span class='badge bg-primary'>Most Popular</span>
</div>
<div class='card-header bg-primary text-white text-center py-3'>
<h3>Professional</h3>
</div>
<div class='card-body d-flex flex-column'>
<div class='text-center mb-4'>
<span class='h2'>$99</span>
<span class='text-muted'>/month</span>
</div>
<ul class='list-unstyled flex-grow-1'>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> 1,000 PDF conversions/month</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Premium templates</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Priority support</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> 50 GB storage</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Priority processing</li>
</ul>
<button class='btn btn-primary w-100 mt-auto'>Get Started</button>
</div>
</div>
</div>
<div class='col-md-4'>
<div class='card h-100 shadow-sm'>
<div class='card-header bg-dark text-white text-center py-3'>
<h3>Enterprise</h3>
</div>
<div class='card-body d-flex flex-column'>
<div class='text-center mb-4'>
<span class='h2'>$299</span>
<span class='text-muted'>/month</span>
</div>
<ul class='list-unstyled flex-grow-1'>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Unlimited conversions</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Custom templates</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Dedicated support</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> Unlimited storage</li>
<li class='mb-2'><i class='bi bi-check-circle text-success'></i> SLA guarantee</li>
</ul>
<button class='btn btn-dark w-100 mt-auto'>Contact Sales</button>
</div>
</div>
</div>
</div>
</div>
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(bootstrapPricing)
pdf.SaveAs("pricing-table.pdf")
输出:一个Professional的定价表,采用 Bootstrap 的卡片网格、flexbox 布局、徽章定位和响应式实用程序——所有内容都准确地保留在 PDF 中。
ActivePDF WebGrabber 在支持现代框架方面有哪些局限性?
ActivePDF WebGrabber 提供 HTML 到 PDF 的转换功能,但使用较旧的渲染引擎,对现代 CSS 框架存在诸多限制:
-原生引擎:自定义渲染,CSS3 支持有限
- Internet Explorer 引擎:采用传统 IE 渲染方式,不支持现代 CSS 功能 -不支持 Bootstrap 4/5:不支持 Flexbox 和 CSS Grid 功能。 Bootstrap 3 的局限性:只有基于表格的布局才能可靠运行。
- JavaScript 的局限性:与现代浏览器相比, JavaScript执行功能有限。 -需要采取变通方法:复杂的 Bootstrap 组件需要对 CSS 进行大量修改。
开发人员报告的常见问题: Bootstrap导航栏渲染布局问题
- 使用 flexbox 的卡片组件无法正确显示 -响应式网格系统在 PDF 输出中出现故障
- 需要简化或重写 Bootstrap 组件以实现兼容性
开发影响:使用现代 Bootstrap 版本(4+)构建的应用程序需要对 ActivePDF WebGrabber 进行大量额外工作。 团队必须 1.维护用于生成 PDF 的并行简化 CSS(双重维护负担) 2.限制网页用户界面使用 Bootstrap 3 或更早版本(牺牲现代响应式功能) 3.手动测试和修复每个 Bootstrap 组件(耗时且容易出错)
对于大量使用 Bootstrap 或现代 CSS 框架的项目而言,ActivePDF 的渲染限制可能会显著增加开发成本并降低设计灵活性。 建议使用IronPDF 的 Chrome 渲染器以获得精确的 Bootstrap 渲染效果。
有关 Bootstrap 框架兼容性的完整指南,请参阅Bootstrap 和 Flexbox CSS 指南。
为什么开发人员选择 IronPDF 而不是 ActivePDF?
IronPDF 的渲染速度极快,静态网站的 HTML 转 PDF 仅需 835 毫秒,并且在不同类型的内容上都能保持稳定的性能。该库的内存使用量经过优化,通常低于 10MB,渲染页眉和页脚时内存使用量更是减少了 75%。
开发者们欣赏 IronPDF 简洁明了的API 设计,只需三行代码即可生成 PDF ,而 ActivePDF 则需要更复杂的多步骤流程。 完整的文档包含 100 多个代码示例和详细教程,使团队能够更轻松地快速上手异步 PDF 生成和批量处理等功能。
什么情况下 ActivePDF 可能是更好的选择?
ActivePDF 在企业环境中表现出色,要求:
- 带有监控文件夹的自动化批量处理
- 支持 300 多种文件格式转换(通过
DocConverter) - Windows 服务器上的遗留系统集成
- 高级表单字段操作和 XFA 表单支持
- 满足归档要求的多种PDF/A 合规级别
尽管与IronPDF 的功能相比,ActivePDF 的成本和复杂性更高,但对于已经拥有 ActivePDF 基础架构或特定Enterprise工作流程需求的组织来说,ActivePDF 的模块化方法可能是有益的。
比较
ActivePDF 和IronPDF 的功能有何区别?
哪个库提供更好的 HTML 至 PDF 转换功能?
IronPDF使用完整的Chrome V8 渲染引擎,提供 98% 以上的浏览器保真度,并完全支持HTML5 、 CSS3 、 JavaScript和Web 字体。 ActivePDF WebGrabber 同时提供 Native 引擎和 Internet Explorer 引擎,但JavaScript执行和CSS3 支持有限。 Native Engine 不支持 CSS 样式表,而 IE Engine 依赖于已弃用的 Internet Explorer 11,它缺少CSS Grid和flexbox 布局等现代 Web 标准。
这些库在文档格式支持方面如何比较?
IronPDF专注于常见格式( HTML 、 DOCX 、图像、 RTF 、 Markdown ),而 ActivePDF DocConverter 支持 300 多种文件格式,包括 CAD 文件、旧版文档格式和专用Enterprise格式。 这使得 ActivePDF 更适合处理各种文档类型的组织,尽管IronPDF 的转换功能涵盖了现代应用程序中最常用的格式。
PDF 操作功能如何?
这两个库都提供完整的PDF处理功能:
IronPDF提供:
ActivePDF提供:
- 高级表单字段操作(通过工具包)
- 对 PDF 内部进行更细粒度的控制
- 企业级编辑功能
- 多种PDF/A 合规级别
- 用于特定任务的专业组件
第 1 步:安装
如何安装 IronPDF?
IronPDF 应采用哪种安装方法?
开发者可以通过多种方式安装IronPDF ,其中NuGet包管理器是最便捷的方式:
NuGet 软件包管理器
在 Visual Studio 中打开NuGet包管理器,搜索IronPDF:
:InstallCmd
:InstallCmd
手动下载 IronPDF.dll.
或者,下载IronPDF并使用手动安装方法将其引用添加到项目中。
安装后,通过添加验证访问:
using IronPdf;
using IronPdf;
Imports IronPdf
IronPDF支持.NET 9 和 10 ,以及所有现代.NET版本,包括Core 、 Standard和Framework 4.6.2+ 。 有关特定平台的安装,请参阅Linux 、 macOS 、 Docker 、 Azure和AWS的指南。
如何安装ActivePDF组件?
如何安装 ActivePDF WebGrabber?
ActivePDF WebGrabber 需要更复杂的安装过程:
1.从 ActivePDF 网站下载安装程序</a 2.向 ActivePDF 销售人员索取许可证密钥(提供评估密钥) 3.以管理员权限运行安装程序
- 安装过程中配置
WebGrabber服务 5.对于 Windows Server 2012+,请为该服务创建一个专用用户账户
安装完成后,添加以下 WebGrabber 引用:
C:\Program Files\ActivePDF\WebGrabber\bin\APWebGrabber.Net45.dll
如何安装 ActivePDF DocConverter?
DocConverter 的安装模式类似:
- 下载
DocConverter安装程序 2.使用管理员权限安装 3.如果使用拖放转换,请配置观察文件夹 4.为批处理设置配置管理器
注意:ActivePDF 组件需要 Windows Server,并且不支持像IronPDF那样的跨平台部署。 对于现代部署场景,请考虑IronPDF 的容器化选项和云原生支持。
如何使用教程
如何将HTML字符串转换为PDF文件?
让我们比较一下这两个库是如何处理一个常见任务的:将HTML 字符串转换为 PDF 文件。
IronPDF如何将 HTML 字符串转换为 PDF?
/**
* HTML String to PDF
* anchor-html-string-with-ironpdf
**/
using IronPdf;
static void Main(string[] args)
{
// Create rendering converter
var renderer = new ChromePdfRenderer();
// HTML Source
string html = "<h1>Hello World!</h1> <h2>Welcome to IronPDF</h2> ";
// Convert HTML string to PDF file
var pdf = renderer.RenderHtmlAsPdf(html);
// Save the file
pdf.SaveAs("E:/sample.pdf");
}
/**
* HTML String to PDF
* anchor-html-string-with-ironpdf
**/
using IronPdf;
static void Main(string[] args)
{
// Create rendering converter
var renderer = new ChromePdfRenderer();
// HTML Source
string html = "<h1>Hello World!</h1> <h2>Welcome to IronPDF</h2> ";
// Convert HTML string to PDF file
var pdf = renderer.RenderHtmlAsPdf(html);
// Save the file
pdf.SaveAs("E:/sample.pdf");
}
'''
''' * HTML String to PDF
''' * anchor-html-string-with-ironpdf
''' *
Imports IronPdf
Shared Sub Main(ByVal args() As String)
' Create rendering converter
Dim renderer = New ChromePdfRenderer()
' HTML Source
Dim html As String = "<h1>Hello World!</h1> <h2>Welcome to IronPDF</h2> "
' Convert HTML string to PDF file
Dim pdf = renderer.RenderHtmlAsPdf(html)
' Save the file
pdf.SaveAs("E:/sample.pdf")
End Sub
IronPDF 方法的主要优势:
ActivePDF 如何将 HTML 字符串转换为 PDF?
using APWebGrabber;
static void Main(string[] args)
{
// Instantiate Object
WebGrabber wg = new WebGrabber();
// HTML Source
string html = "<h1>Hello World!</h1> <h2>Welcome to ActivePDF WebGrabber</h2>";
// Assign source HTML to WebGrabber
wg.CreateFromHTMLText = html;
// Specify file directory
wg.OutputDirectory = "E:/";
// File name
wg.NewDocumentName = "sample.pdf";
// Convert source HTML to PDF file
wg.ConvertToPDF();
}
using APWebGrabber;
static void Main(string[] args)
{
// Instantiate Object
WebGrabber wg = new WebGrabber();
// HTML Source
string html = "<h1>Hello World!</h1> <h2>Welcome to ActivePDF WebGrabber</h2>";
// Assign source HTML to WebGrabber
wg.CreateFromHTMLText = html;
// Specify file directory
wg.OutputDirectory = "E:/";
// File name
wg.NewDocumentName = "sample.pdf";
// Convert source HTML to PDF file
wg.ConvertToPDF();
}
Imports APWebGrabber
Shared Sub Main(ByVal args() As String)
' Instantiate Object
Dim wg As New WebGrabber()
' HTML Source
Dim html As String = "<h1>Hello World!</h1> <h2>Welcome to ActivePDF WebGrabber</h2>"
' Assign source HTML to WebGrabber
wg.CreateFromHTMLText = html
' Specify file directory
wg.OutputDirectory = "E:/"
' File name
wg.NewDocumentName = "sample.pdf"
' Convert source HTML to PDF file
wg.ConvertToPDF()
End Sub
这两个库是如何处理带有 CSS 样式的复杂 HTML 的?
该示例展示了这两个库如何处理带有CSS 样式的更复杂的 HTML:
IronPDF 高级示例:
using IronPdf;
var renderer = new ChromePdfRenderer();
// Configure rendering options
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
string advancedHtml = @"
<html>
<head>
<style>
body { font-family: Arial, sans-serif; }
.invoice { border: 1px solid #ccc; padding: 20px; }
.header { background-color: #f0f0f0; padding: 10px; }
</style>
</head>
<body>
<div class='invoice'>
<div class='header'>
<h1>Invoice #12345</h1>
</div>
<form>
<input type='text' name='customer' placeholder='Customer Name'>
</form>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(advancedHtml);
pdf.SaveAs("advanced-invoice.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Configure rendering options
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
string advancedHtml = @"
<html>
<head>
<style>
body { font-family: Arial, sans-serif; }
.invoice { border: 1px solid #ccc; padding: 20px; }
.header { background-color: #f0f0f0; padding: 10px; }
</style>
</head>
<body>
<div class='invoice'>
<div class='header'>
<h1>Invoice #12345</h1>
</div>
<form>
<input type='text' name='customer' placeholder='Customer Name'>
</form>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(advancedHtml);
pdf.SaveAs("advanced-invoice.pdf");
Imports IronPdf
Private renderer = New ChromePdfRenderer()
' Configure rendering options
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
renderer.RenderingOptions.PrintHtmlBackgrounds = True
renderer.RenderingOptions.CreatePdfFormsFromHtml = True
Dim advancedHtml As String = "
<html>
<head>
<style>
body { font-family: Arial, sans-serif; }
.invoice { border: 1px solid #ccc; padding: 20px; }
.header { background-color: #f0f0f0; padding: 10px; }
</style>
</head>
<body>
<div class='invoice'>
<div class='header'>
<h1>Invoice #12345</h1>
</div>
<form>
<input type='text' name='customer' placeholder='Customer Name'>
</form>
</div>
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(advancedHtml)
pdf.SaveAs("advanced-invoice.pdf")
ChromePdfRenderer 类提供了对渲染过程的广泛控制,包括CSS 媒体类型选择、背景渲染以及从 HTML 输入元素自动创建表单字段。
如何将HTML文件转换为PDF文件?
IronPDF如何将 HTML 文件转换为 PDF?
/**
* HTML File to PDF
* anchor-html-file-with-ironpdf
**/
using IronPdf;
static void Main(string[] args)
{
// Create rendering converter
var renderer = new ChromePdfRenderer();
// Render HTML file to PDF
var pdf = renderer.RenderHtmlFileAsPdf("E:/myHtmlFile.html");
// Save to target location
pdf.SaveAs("E:/Sample.pdf");
}
/**
* HTML File to PDF
* anchor-html-file-with-ironpdf
**/
using IronPdf;
static void Main(string[] args)
{
// Create rendering converter
var renderer = new ChromePdfRenderer();
// Render HTML file to PDF
var pdf = renderer.RenderHtmlFileAsPdf("E:/myHtmlFile.html");
// Save to target location
pdf.SaveAs("E:/Sample.pdf");
}
'''
''' * HTML File to PDF
''' * anchor-html-file-with-ironpdf
''' *
Imports IronPdf
Shared Sub Main(ByVal args() As String)
' Create rendering converter
Dim renderer = New ChromePdfRenderer()
' Render HTML file to PDF
Dim pdf = renderer.RenderHtmlFileAsPdf("E:/myHtmlFile.html")
' Save to target location
pdf.SaveAs("E:/Sample.pdf")
End Sub
IronPDF 自动处理:
ActivePDF 如何将 HTML 文件转换为 PDF?
using APWebGrabber;
static void Main(string[] args)
{
// Instantiate Object
WebGrabber wg = new WebGrabber();
// Specify file path to be converted
wg.URL = "E:/myHtmlFile.html";
// Specify the directory for newly generated file
wg.OutputDirectory = "E:/";
// Newly generated file name
wg.NewDocumentName = "Sample.pdf";
// Convert HTML file to PDF
wg.ConvertToPDF();
}
using APWebGrabber;
static void Main(string[] args)
{
// Instantiate Object
WebGrabber wg = new WebGrabber();
// Specify file path to be converted
wg.URL = "E:/myHtmlFile.html";
// Specify the directory for newly generated file
wg.OutputDirectory = "E:/";
// Newly generated file name
wg.NewDocumentName = "Sample.pdf";
// Convert HTML file to PDF
wg.ConvertToPDF();
}
Imports APWebGrabber
Shared Sub Main(ByVal args() As String)
' Instantiate Object
Dim wg As New WebGrabber()
' Specify file path to be converted
wg.URL = "E:/myHtmlFile.html"
' Specify the directory for newly generated file
wg.OutputDirectory = "E:/"
' Newly generated file name
wg.NewDocumentName = "Sample.pdf"
' Convert HTML file to PDF
wg.ConvertToPDF()
End Sub
请注意,ActivePDF WebGrabber 对本地文件使用 URL 属性,这可能会让期望使用特定于文件的方法的开发人员感到困惑。 如需更直观的文件处理,请参阅IronPDF 的 HTML 文件转换指南。
如何将URL转换为PDF文件?
IronPDF如何将 URL 转换为 PDF?
/**
* URL to PDF
* anchor-url-with-ironpdf
**/
using IronPdf;
static void Main(string[] args)
{
// Create rendering converter
var renderer = new ChromePdfRenderer();
// Specify URL
var pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_199___");
// Save the file
pdf.SaveAs("E:/Sample.pdf");
}
/**
* URL to PDF
* anchor-url-with-ironpdf
**/
using IronPdf;
static void Main(string[] args)
{
// Create rendering converter
var renderer = new ChromePdfRenderer();
// Specify URL
var pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_199___");
// Save the file
pdf.SaveAs("E:/Sample.pdf");
}
Imports IronPdf
Module Program
Sub Main(args As String())
' Create rendering converter
Dim renderer As New ChromePdfRenderer()
' Specify URL
Dim pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_199___")
' Save the file
pdf.SaveAs("E:/Sample.pdf")
End Sub
End Module
如何使用IronPDF处理异步 URL 转换?
IronPDF提供出色的异步支持,从而实现更佳的性能:
using IronPdf;
using System.Threading.Tasks;
static async Task Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// Configure for complex pages
renderer.RenderingOptions.WaitFor.RenderDelay(2000); // Wait 2 seconds
renderer.RenderingOptions.WaitFor.JavaScript(1500); // Wait for JS
// Async conversion
var pdf = await renderer.RenderUrlAsPdfAsync("___PROTECTED_URL_200___");
await pdf.SaveAsAsync("E:/async-sample.pdf");
}
using IronPdf;
using System.Threading.Tasks;
static async Task Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// Configure for complex pages
renderer.RenderingOptions.WaitFor.RenderDelay(2000); // Wait 2 seconds
renderer.RenderingOptions.WaitFor.JavaScript(1500); // Wait for JS
// Async conversion
var pdf = await renderer.RenderUrlAsPdfAsync("___PROTECTED_URL_200___");
await pdf.SaveAsAsync("E:/async-sample.pdf");
}
Imports IronPdf
Imports System.Threading.Tasks
Module Program
Async Function Main(args As String()) As Task
Dim renderer = New ChromePdfRenderer()
' Configure for complex pages
renderer.RenderingOptions.WaitFor.RenderDelay(2000) ' Wait 2 seconds
renderer.RenderingOptions.WaitFor.JavaScript(1500) ' Wait for JS
' Async conversion
Dim pdf = Await renderer.RenderUrlAsPdfAsync("___PROTECTED_URL_200___")
Await pdf.SaveAsAsync("E:/async-sample.pdf")
End Function
End Module
WaitFor 类可以精确控制渲染时间,这对于JavaScript 密集型应用程序至关重要。 开发者可以使用JavaScript消息监听器等待特定元素、网络空闲状态或自定义JavaScript事件。
ActivePDF 如何将 URL 转换为 PDF?
using APWebGrabber;
static void Main(string[] args)
{
// Instantiate Object
WebGrabber wg = new WebGrabber();
// Specify URL
wg.URL = "___PROTECTED_URL_201___";
// Specify the directory for newly generated file
wg.OutputDirectory = "E:/";
// Specify file name
wg.NewDocumentName = "Sample.pdf";
// Set timeout for conversion
wg.TimeoutSpan = new TimeSpan(0, 0, 30);
// Convert specified URL webpage to PDF
wg.ConvertToPDF();
}
using APWebGrabber;
static void Main(string[] args)
{
// Instantiate Object
WebGrabber wg = new WebGrabber();
// Specify URL
wg.URL = "___PROTECTED_URL_201___";
// Specify the directory for newly generated file
wg.OutputDirectory = "E:/";
// Specify file name
wg.NewDocumentName = "Sample.pdf";
// Set timeout for conversion
wg.TimeoutSpan = new TimeSpan(0, 0, 30);
// Convert specified URL webpage to PDF
wg.ConvertToPDF();
}
Imports APWebGrabber
Module Program
Sub Main(args As String())
' Instantiate Object
Dim wg As New WebGrabber()
' Specify URL
wg.URL = "___PROTECTED_URL_201___"
' Specify the directory for newly generated file
wg.OutputDirectory = "E:/"
' Specify file name
wg.NewDocumentName = "Sample.pdf"
' Set timeout for conversion
wg.TimeoutSpan = New TimeSpan(0, 0, 30)
' Convert specified URL webpage to PDF
wg.ConvertToPDF()
End Sub
End Module
对于更高级的 URL 转换方案,包括身份验证和自定义标头,请参阅IronPDF 的 URL 转 PDF 指南。
如何在PDF上添加水印?
IronPDF如何处理水印?
IronPDF提供通过 HTML/CSS 实现的灵活水印功能:
/**
* Watermark PDF
* anchor-watermark-with-ironpdf
**/
using IronPdf;
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// Source HTML string
string html = "<h1 style='text-align:center'>WaterMark Example</h1>";
// Create PDF
var pdf = renderer.RenderHtmlAsPdf(html);
// Apply watermark with HTML/CSS
pdf.ApplyWatermark("<h2 style='color:red; opacity:0.5'>CONFIDENTIAL</h2>",
rotation: 30,
opacity: 50);
// Save the document
pdf.SaveAs("E:/Sample.pdf");
}
/**
* Watermark PDF
* anchor-watermark-with-ironpdf
**/
using IronPdf;
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// Source HTML string
string html = "<h1 style='text-align:center'>WaterMark Example</h1>";
// Create PDF
var pdf = renderer.RenderHtmlAsPdf(html);
// Apply watermark with HTML/CSS
pdf.ApplyWatermark("<h2 style='color:red; opacity:0.5'>CONFIDENTIAL</h2>",
rotation: 30,
opacity: 50);
// Save the document
pdf.SaveAs("E:/Sample.pdf");
}
'''
''' * Watermark PDF
''' * anchor-watermark-with-ironpdf
''' *
Imports IronPdf
Shared Sub Main(ByVal args() As String)
Dim renderer = New ChromePdfRenderer()
' Source HTML string
Dim html As String = "<h1 style='text-align:center'>WaterMark Example</h1>"
' Create PDF
Dim pdf = renderer.RenderHtmlAsPdf(html)
' Apply watermark with HTML/CSS
pdf.ApplyWatermark("<h2 style='color:red; opacity:0.5'>CONFIDENTIAL</h2>", rotation:= 30, opacity:= 50)
' Save the document
pdf.SaveAs("E:/Sample.pdf")
End Sub
使用 IronPDF 制作高级水印:
// Image watermark
pdf.ApplyWatermark($@"<img src='logo.png' style='width:200px'>",
rotation: 0,
opacity: 30,
verticalAlignment: VerticalAlignment.Middle);
// Complex HTML watermark with positioning
string complexWatermark = @"
<div style='text-align:center; font-family:Arial'>
<h1 style='color:#ff0000'>DRAFT</h1>
<p>Generated: " + DateTime.Now.ToString() + @"</p>
</div>";
pdf.ApplyWatermark(complexWatermark, rotation: 45, opacity: 25);
// Image watermark
pdf.ApplyWatermark($@"<img src='logo.png' style='width:200px'>",
rotation: 0,
opacity: 30,
verticalAlignment: VerticalAlignment.Middle);
// Complex HTML watermark with positioning
string complexWatermark = @"
<div style='text-align:center; font-family:Arial'>
<h1 style='color:#ff0000'>DRAFT</h1>
<p>Generated: " + DateTime.Now.ToString() + @"</p>
</div>";
pdf.ApplyWatermark(complexWatermark, rotation: 45, opacity: 25);
' Image watermark
pdf.ApplyWatermark($"<img src='logo.png' style='width:200px'>", rotation:= 0, opacity:= 30, verticalAlignment:= VerticalAlignment.Middle)
' Complex HTML watermark with positioning
Dim complexWatermark As String = "
<div style='text-align:center; font-family:Arial'>
<h1 style='color:#ff0000'>DRAFT</h1>
<p>Generated: " & DateTime.Now.ToString() & "</p>
</div>"
pdf.ApplyWatermark(complexWatermark, rotation:= 45, opacity:= 25)
ActivePDF是如何创建水印的?
ActivePDF 需要使用文本印章作为变通方法:
using APWebGrabber;
static void Main(string[] args)
{
WebGrabber wg = new WebGrabber();
string html = "<h1 style='text-align:center'>WaterMark Example</h1>";
wg.CreateFromHTMLText = html;
// Add text stamp as watermark
wg.AddStampText(270.0f, 350.0f, "WaterMark");
// Configure stamp appearance
wg.StampFontSize = 20;
wg.StampFont = "Times New Roman";
wg.StampFontTransparency = 1f;
wg.StampRotation = 45.0f;
wg.StampColorNET = new ADK.PDF.Color()
{
Red = 255,
Green = 0,
Blue = 0,
Gray = 0
};
wg.OutputDirectory = "E:/";
wg.NewDocumentName = "Sample.pdf";
wg.ConvertToPDF();
}
using APWebGrabber;
static void Main(string[] args)
{
WebGrabber wg = new WebGrabber();
string html = "<h1 style='text-align:center'>WaterMark Example</h1>";
wg.CreateFromHTMLText = html;
// Add text stamp as watermark
wg.AddStampText(270.0f, 350.0f, "WaterMark");
// Configure stamp appearance
wg.StampFontSize = 20;
wg.StampFont = "Times New Roman";
wg.StampFontTransparency = 1f;
wg.StampRotation = 45.0f;
wg.StampColorNET = new ADK.PDF.Color()
{
Red = 255,
Green = 0,
Blue = 0,
Gray = 0
};
wg.OutputDirectory = "E:/";
wg.NewDocumentName = "Sample.pdf";
wg.ConvertToPDF();
}
Imports APWebGrabber
Shared Sub Main(ByVal args() As String)
Dim wg As New WebGrabber()
Dim html As String = "<h1 style='text-align:center'>WaterMark Example</h1>"
wg.CreateFromHTMLText = html
' Add text stamp as watermark
wg.AddStampText(270.0F, 350.0F, "WaterMark")
' Configure stamp appearance
wg.StampFontSize = 20
wg.StampFont = "Times New Roman"
wg.StampFontTransparency = 1F
wg.StampRotation = 45.0F
wg.StampColorNET = New ADK.PDF.Color() With {
.Red = 255,
.Green = 0,
.Blue = 0,
.Gray = 0
}
wg.OutputDirectory = "E:/"
wg.NewDocumentName = "Sample.pdf"
wg.ConvertToPDF()
End Sub
ActivePDF 方法仅限于纯文本水印,并且需要进行手动定位计算。 如需更高级的水印功能,请参阅IronPDF 的水印示例。
如何设置PDF文件的页眉和页脚?
IronPDF如何添加页眉和页脚?
IronPDF提供简单的文本和复杂的HTML 页眉/页脚:
/**
* Set Header Footers
* anchor-headers-and-footers-with-ironpdf
**/
using IronPdf;
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// Configure text header/footer
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
LeftText = "Company Name",
CenterText = "{page} of {total-pages}",
RightText = "{date} {time}",
DrawDividerLine = true,
FontSize = 12,
FontFamily = "Arial"
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
CenterText = "Copyright © 2025",
RightText = "Page {page}",
FontSize = 10
};
// HTML content
string html = "<h1>Document Content</h1><p>Lorem ipsum...</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("E:/document.pdf");
}
/**
* Set Header Footers
* anchor-headers-and-footers-with-ironpdf
**/
using IronPdf;
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// Configure text header/footer
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
LeftText = "Company Name",
CenterText = "{page} of {total-pages}",
RightText = "{date} {time}",
DrawDividerLine = true,
FontSize = 12,
FontFamily = "Arial"
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
CenterText = "Copyright © 2025",
RightText = "Page {page}",
FontSize = 10
};
// HTML content
string html = "<h1>Document Content</h1><p>Lorem ipsum...</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("E:/document.pdf");
}
'''
''' * Set Header Footers
''' * anchor-headers-and-footers-with-ironpdf
''' *
Imports IronPdf
Shared Sub Main(ByVal args() As String)
Dim renderer = New ChromePdfRenderer()
' Configure text header/footer
renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
.LeftText = "Company Name",
.CenterText = "{page} of {total-pages}",
.RightText = "{date} {time}",
.DrawDividerLine = True,
.FontSize = 12,
.FontFamily = "Arial"
}
renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With {
.CenterText = "Copyright © 2025",
.RightText = "Page {page}",
.FontSize = 10
}
' HTML content
Dim html As String = "<h1>Document Content</h1><p>Lorem ipsum...</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("E:/document.pdf")
End Sub
对于使用HTML实现更复杂的页眉/页脚:
// HTML headers with dynamic content
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = @"
<div style='display: flex; justify-content: space-between; padding: 10px;'>
<img src='logo.png' style='height: 30px;'>
<div>{page} / {total-pages}</div>
</div>",
Height = 50
};
// HTML headers with dynamic content
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = @"
<div style='display: flex; justify-content: space-between; padding: 10px;'>
<img src='logo.png' style='height: 30px;'>
<div>{page} / {total-pages}</div>
</div>",
Height = 50
};
' HTML headers with dynamic content
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
.HtmlFragment = "
<div style='display: flex; justify-content: space-between; padding: 10px;'>
<img src='logo.png' style='height: 30px;'>
<div>{page} / {total-pages}</div>
</div>",
.Height = 50
}
7.2.使用 ActivePDF WebGrabber 的页眉和页脚
ActivePDF 如何设置页眉和页脚?
using APWebGrabber;
static void Main(string[] args)
{
WebGrabber wg = new WebGrabber();
string html = @"<h1 style='text-align:center;'>Page Content</h1>";
wg.CreateFromHTMLText = html;
// Configure header
wg.HeaderHeight = 0.5f;
wg.HeaderHTML = "<div style='float: left;'>Header Text</div>";
wg.HeaderHTML += $"<div style='float: right;'>{DateTime.Now.ToShortDateString()}</div>";
// Configure footer
wg.FooterHeight = 0.5f;
wg.FooterHTML = "<div style='text-align: right;'>%cp% of %tp%</div>";
wg.OutputDirectory = "E:/";
wg.NewDocumentName = "Sample.pdf";
wg.ConvertToPDF();
}
using APWebGrabber;
static void Main(string[] args)
{
WebGrabber wg = new WebGrabber();
string html = @"<h1 style='text-align:center;'>Page Content</h1>";
wg.CreateFromHTMLText = html;
// Configure header
wg.HeaderHeight = 0.5f;
wg.HeaderHTML = "<div style='float: left;'>Header Text</div>";
wg.HeaderHTML += $"<div style='float: right;'>{DateTime.Now.ToShortDateString()}</div>";
// Configure footer
wg.FooterHeight = 0.5f;
wg.FooterHTML = "<div style='text-align: right;'>%cp% of %tp%</div>";
wg.OutputDirectory = "E:/";
wg.NewDocumentName = "Sample.pdf";
wg.ConvertToPDF();
}
Imports APWebGrabber
Shared Sub Main(ByVal args() As String)
Dim wg As New WebGrabber()
Dim html As String = "<h1 style='text-align:center;'>Page Content</h1>"
wg.CreateFromHTMLText = html
' Configure header
wg.HeaderHeight = 0.5F
wg.HeaderHTML = "<div style='float: left;'>Header Text</div>"
wg.HeaderHTML += $"<div style='float: right;'>{DateTime.Now.ToShortDateString()}</div>"
' Configure footer
wg.FooterHeight = 0.5F
wg.FooterHTML = "<div style='text-align: right;'>%cp% of %tp%</div>"
wg.OutputDirectory = "E:/"
wg.NewDocumentName = "Sample.pdf"
wg.ConvertToPDF()
End Sub
注意:ActivePDF 使用专有占位符(%cp% 表示当前页,%tp% 表示总页数),需要手动构建 HTML。 如需更灵活的页眉/页脚选项,请参阅IronPDF 的页眉和页脚指南。
高级PDF功能有何区别?
如何创建和编辑PDF表单?
IronPDF如何处理表单创建?
using IronPdf;
// Create a PDF with form fields
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
string formHtml = @"
<form>
<label>Name: <input type='text' name='fullname'></label><br>
<label>Email: <input type='email' name='email'></label><br>
<label>Subscribe: <input type='checkbox' name='subscribe'></label><br>
<label>
Plan:
<select name='plan'>
<option>Basic</option>
<option>Premium</option>
</select>
</label>
</form>";
var pdf = renderer.RenderHtmlAsPdf(formHtml);
// Fill form fields programmatically
pdf.Form.FindFormField("fullname").Value = "John Doe";
pdf.Form.FindFormField("email").Value = "john@example.com";
pdf.Form.FindFormField("subscribe").Value = "Yes";
pdf.SaveAs("filled-form.pdf");
using IronPdf;
// Create a PDF with form fields
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
string formHtml = @"
<form>
<label>Name: <input type='text' name='fullname'></label><br>
<label>Email: <input type='email' name='email'></label><br>
<label>Subscribe: <input type='checkbox' name='subscribe'></label><br>
<label>
Plan:
<select name='plan'>
<option>Basic</option>
<option>Premium</option>
</select>
</label>
</form>";
var pdf = renderer.RenderHtmlAsPdf(formHtml);
// Fill form fields programmatically
pdf.Form.FindFormField("fullname").Value = "John Doe";
pdf.Form.FindFormField("email").Value = "john@example.com";
pdf.Form.FindFormField("subscribe").Value = "Yes";
pdf.SaveAs("filled-form.pdf");
Imports IronPdf
' Create a PDF with form fields
Private renderer = New ChromePdfRenderer()
renderer.RenderingOptions.CreatePdfFormsFromHtml = True
Dim formHtml As String = "
<form>
<label>Name: <input type='text' name='fullname'></label><br>
<label>Email: <input type='email' name='email'></label><br>
<label>Subscribe: <input type='checkbox' name='subscribe'></label><br>
<label>
Plan:
<select name='plan'>
<option>Basic</option>
<option>Premium</option>
</select>
</label>
</form>"
Dim pdf = renderer.RenderHtmlAsPdf(formHtml)
' Fill form fields programmatically
pdf.Form.FindFormField("fullname").Value = "John Doe"
pdf.Form.FindFormField("email").Value = "john@example.com"
pdf.Form.FindFormField("subscribe").Value = "Yes"
pdf.SaveAs("filled-form.pdf")
了解更多关于使用IronPDF创建 PDF 表单和编辑表单数据的信息。
ActivePDF 工具包 如何处理表单?
// ActivePDF requires separate Toolkit component for forms
APToolkitNET.Toolkit toolkit = new APToolkitNET.Toolkit();
// Open existing PDF
toolkit.OpenInputFile("form-template.pdf");
// Set form field values
toolkit.SetFormFieldData("fullname", "John Doe", -997);
toolkit.SetFormFieldData("email", "john@example.com", -997);
// Save filled form
toolkit.CopyForm(0, 0);
toolkit.SaveAs("filled-form.pdf");
// ActivePDF requires separate Toolkit component for forms
APToolkitNET.Toolkit toolkit = new APToolkitNET.Toolkit();
// Open existing PDF
toolkit.OpenInputFile("form-template.pdf");
// Set form field values
toolkit.SetFormFieldData("fullname", "John Doe", -997);
toolkit.SetFormFieldData("email", "john@example.com", -997);
// Save filled form
toolkit.CopyForm(0, 0);
toolkit.SaveAs("filled-form.pdf");
' ActivePDF requires separate Toolkit component for forms
Dim toolkit As New APToolkitNET.Toolkit()
' Open existing PDF
toolkit.OpenInputFile("form-template.pdf")
' Set form field values
toolkit.SetFormFieldData("fullname", "John Doe", -997)
toolkit.SetFormFieldData("email", "john@example.com", -997)
' Save filled form
toolkit.CopyForm(0, 0)
toolkit.SaveAs("filled-form.pdf")
如何确保符合 PDF/A 标准?
这两个库都支持PDF/A ,但采用的方法不同:
如何使用IronPDF创建 PDF/A 文件?
using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Archival Document</h1>");
// Convert to PDF/A-3B
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3B);
using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Archival Document</h1>");
// Convert to PDF/A-3B
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3B);
Imports IronPdf
Private renderer = New ChromePdfRenderer()
Private pdf = renderer.RenderHtmlAsPdf("<h1>Archival Document</h1>")
' Convert to PDF/A-3B
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3B)
IronPDF还支持使用 ZUGFeRD 进行电子发票的 PDF/A-3 格式。 更多详情请参阅PDF/A 里程碑更新。
如何使用 ActivePDF 创建 PDF/A 文件?
// Requires DocConverter component
DocConverter dc = new DocConverter();
dc.SetPDFACompliance(PDFACompliance.PDFA2B);
dc.ConvertToPDF("input.html", "output.pdf");
// Requires DocConverter component
DocConverter dc = new DocConverter();
dc.SetPDFACompliance(PDFACompliance.PDFA2B);
dc.ConvertToPDF("input.html", "output.pdf");
' Requires DocConverter component
Dim dc As New DocConverter()
dc.SetPDFACompliance(PDFACompliance.PDFA2B)
dc.ConvertToPDF("input.html", "output.pdf")
如何向PDF文件添加数字签名?
IronPDF如何处理数字签名?
using IronPdf;
using IronPdf.Signing;
// Load or create PDF
var pdf = PdfDocument.FromFile("document.pdf");
// Create signature with certificate
var signature = new PdfSignature("certificate.pfx", "password");
// Configure signature appearance
signature.SignatureImage = new PdfSignatureImage("signature.png");
signature.SigningContact = "john@company.com";
signature.SigningReason = "Document Approval";
// Apply signature
pdf.Sign(signature);
pdf.SaveAs("signed.pdf");
using IronPdf;
using IronPdf.Signing;
// Load or create PDF
var pdf = PdfDocument.FromFile("document.pdf");
// Create signature with certificate
var signature = new PdfSignature("certificate.pfx", "password");
// Configure signature appearance
signature.SignatureImage = new PdfSignatureImage("signature.png");
signature.SigningContact = "john@company.com";
signature.SigningReason = "Document Approval";
// Apply signature
pdf.Sign(signature);
pdf.SaveAs("signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
' Load or create PDF
Private pdf = PdfDocument.FromFile("document.pdf")
' Create signature with certificate
Private signature = New PdfSignature("certificate.pfx", "password")
' Configure signature appearance
signature.SignatureImage = New PdfSignatureImage("signature.png")
signature.SigningContact = "john@company.com"
signature.SigningReason = "Document Approval"
' Apply signature
pdf.Sign(signature)
pdf.SaveAs("signed.pdf")
有关高级签名场景,请参阅IronPDF 的签名指南和使用 HSM 进行签名。
如何处理批量处理?
IronPDF如何处理批量转换?
using IronPdf;
using System.Threading.Tasks;
using System.IO;
static async Task BatchConvertAsync()
{
var renderer = new ChromePdfRenderer();
var tasks = new List<Task>();
foreach (var file in Directory.GetFiles("input", "*.html"))
{
tasks.Add(Task.Run(async () =>
{
var pdf = await renderer.RenderHtmlFileAsPdfAsync(file);
var outputPath = Path.Combine("output",
Path.GetFileNameWithoutExtension(file) + ".pdf");
await pdf.SaveAsAsync(outputPath);
}));
}
await Task.WhenAll(tasks);
}
using IronPdf;
using System.Threading.Tasks;
using System.IO;
static async Task BatchConvertAsync()
{
var renderer = new ChromePdfRenderer();
var tasks = new List<Task>();
foreach (var file in Directory.GetFiles("input", "*.html"))
{
tasks.Add(Task.Run(async () =>
{
var pdf = await renderer.RenderHtmlFileAsPdfAsync(file);
var outputPath = Path.Combine("output",
Path.GetFileNameWithoutExtension(file) + ".pdf");
await pdf.SaveAsAsync(outputPath);
}));
}
await Task.WhenAll(tasks);
}
Imports IronPdf
Imports System.Threading.Tasks
Imports System.IO
Shared Async Function BatchConvertAsync() As Task
Dim renderer = New ChromePdfRenderer()
Dim tasks = New List(Of Task)()
For Each file In Directory.GetFiles("input", "*.html")
tasks.Add(Task.Run(Async Function()
Dim pdf = Await renderer.RenderHtmlFileAsPdfAsync(file)
Dim outputPath = Path.Combine("output", Path.GetFileNameWithoutExtension(file) & ".pdf")
Await pdf.SaveAsAsync(outputPath)
End Function))
Next file
Await Task.WhenAll(tasks)
End Function
有关更多批处理技术,请参阅IronPDF 的异步指南和并行处理示例。
ActivePDF 如何处理批量处理?
// DocConverter supports watched folders for automatic conversion
DocConverter dc = new DocConverter();
// Configure watched folder
dc.AddWatchedFolder(@"C:\Input", @"C:\Output", "*.html");
dc.StartWatching();
// Files dropped in the input folder are automatically converted
// DocConverter supports watched folders for automatic conversion
DocConverter dc = new DocConverter();
// Configure watched folder
dc.AddWatchedFolder(@"C:\Input", @"C:\Output", "*.html");
dc.StartWatching();
// Files dropped in the input folder are automatically converted
' DocConverter supports watched folders for automatic conversion
Dim dc As New DocConverter()
' Configure watched folder
dc.AddWatchedFolder("C:\Input", "C:\Output", "*.html")
dc.StartWatching()
' Files dropped in the input folder are automatically converted
性能和资源对比如何?
这些库在性能方面如何比较?
基于基准测试和实际使用情况:
IronPDF的性能指标有哪些?
- HTML 渲染:~简单内容约 125ms
- 复杂网站:835ms(在静态网站上测试)
- 内存使用量:一般在 10MB 以下
- 初始启动:2-3 秒(Chrome 引擎初始化)
- 将页眉/页脚的内存使用量减少 75
- 大型文档的加载时间缩短 80
有关详细性能优化技巧,请参阅IronPDF 的性能指南。
ActivePDF的性能特点是什么?
- 根据所选渲染引擎而变化
- 本地引擎:更快地处理简单的 HTML
- IE 引擎:速度较慢,但与传统内容的兼容性更好
- 基于服务的架构增加了开销
- 更适合批处理场景
内存管理最佳实践有哪些?
如何使用IronPDF优化内存?
// Dispose of resources properly
using (var renderer = new ChromePdfRenderer())
{
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
pdf.SaveAs("output.pdf");
}
}
// For large documents, use streaming
await pdf.Stream.CopyToAsync(fileStream);
// Dispose of resources properly
using (var renderer = new ChromePdfRenderer())
{
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
pdf.SaveAs("output.pdf");
}
}
// For large documents, use streaming
await pdf.Stream.CopyToAsync(fileStream);
' Dispose of resources properly
Using renderer = New ChromePdfRenderer()
Using pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Using
End Using
' For large documents, use streaming
Await pdf.Stream.CopyToAsync(fileStream)
有关更多内存优化策略,请参阅IronPDF 的内存管理指南和PDF 内存流示例。
ActivePDF 的内存使用注意事项有哪些?
- 基于服务的架构可隔离内存使用
- 转换之间的自动清理
- 在 Windows 中配置服务内存限制
ActivePDF 有哪些组件可用?
还有哪些其他 ActivePDF 组件可用?
| 组件 | 目的和特点 |
|---|---|
| ActivePDF `DocConverter` | 可将 300 多种文件类型转换为 PDF。具有监视文件夹、批处理和企业自动化功能。 |
| ActivePDF `WebGrabber` | HTML 转换为 PDF,支持 URL、文件和 HTML 字符串。包括本地和 IE 渲染引擎。 |
| ActivePDF 工具包 | 高级 PDF 操作,包括表单、注释、安全性和低级 PDF 操作。 |
| ActivePDF 服务器 | 适用于网络环境的基于服务器的 PDF 打印解决方案。 |
| ActivePDF Meridian | 网络 PDF 打印机,用于将文档打印成 PDF 格式,无需按用户付费。 |
| ActivePDF OCR | 光学字符识别,用于搜索扫描的 PDF 文件。 |
| ActivePDF Xtractor | 从 PDF 文件中提取文本和图像进行数据处理。 |
| ActivePDF 编辑器 | 永久删除 PDF 文档中的敏感信息。 |
这些组件中有很多需要单独的许可证,这会增加完整 PDF 功能的总成本。
许可和定价有何异同?
IronPDF 和 ActivePDF 的许可成本如何比较?
IronPDF 的许可选项和定价(截至 2025 年)是什么?
- Lite许可证: $999(1 位开发者,1 个地点,1 个项目)
- Plus许可证: $1,499(3 位开发者,3 个地点,3 个项目) -Professional许可证: $2,999(10 位开发人员,10 个地点,10 个项目) -无限制许可:定制定价(开发者/项目数量不限)
- Iron Suite: $1,498( Iron Software 的全部 10 款产品)
所有许可证均包含24/5 工程支持、终身许可证有效期以及扩展和升级选项。
- WebGrabber:起价 2,499 美元(一次性付款)
- DocConverter:起价 2,999 美元(一次性付款) 工具包:起价 1500 美元以上(价格因功能而异) -支持:高级支持需额外付费 -多部件:成本迅速累积
总成本比较是多少?
小型开发团队(3名开发人员)——成本比较?
- IronPDF Plus License:1,499 美元(包含所有功能)
- ActivePDF
WebGrabber+DocConverter: 最低 5,498 美元 - 使用 IronPDF 节省费用:73%
Enterprise团队(10名开发人员)——成本比较?
- IronPDF Professional:2,999 美元(所有功能)
- ActivePDF 套件(多个组件):10,000 美元以上
- 使用 IronPDF 节省费用:70%+
有关与其他竞争对手的详细价格比较,请参阅IronPDF与 Aspose 、 IronPDF与 iText以及IronPDF与Syncfusion 的比较。
哪个库提供更好的开发者支持?
哪个库能提供更好的开发人员支持?
IronPDF提供哪些支持?
所有许可证均包含每周 5 天、每天 24 小时的工程支持。
有关支持最佳实践,请参阅如何提出工程支持请求以及如何获得最佳支持。
ActivePDF提供哪些支持?
- 支持门户访问
- 知识库文章
- 社区论坛
- 高级支持需额外付费
- 旧版本的遗留文档
结论:您应该选择哪个 PDF 库?
何时选择 IronPDF:?
-现代.NET开发:全面支持.NET 9/10 和跨平台部署 -快速开发:直观的 API 只需极少的代码
- Web 应用程序:借助 Chrome 引擎实现卓越的 HTML/CSS/ JavaScript渲染效果 -云部署:针对 Azure、AWS 和容器化环境进行了优化 -预算有限:入门价格低,但包含所有功能 -学习曲线:提供丰富的文档和示例,便于快速上手。
何时选择 ActivePDF:
-传统系统:现有的 ActivePDF 基础架构或 Windows Server 环境 -文件格式多样:需要将 300 多种文件类型转换为 PDF -Enterprise工作流:监控文件夹和自动化批量处理 -高级表格:复杂的 XFA 表格或特殊表格要求 -合规性要求:针对特定行业制定多个 PDF/A 级别
最终建议
对于大多数现代.NET开发场景而言, IronPDF提供了功能、性能和价值的最佳组合。 它直观的 API、完整的文档和透明的定价使其成为希望快速高效地实现PDF 功能的团队的理想选择。
对于在文件格式支持、遗留系统集成或现有 ActivePDF 基础设施方面有特殊要求的企业来说,ActivePDF 仍然是一个可行的选择。 然而,模块化定价模式和复杂的安装过程可能会给小型团队或新项目带来挑战。
准备好开始了吗?
今天在您的项目中使用 IronPDF,免费试用。
常见问题解答
IronPDF 和 ActivePDF 在 .NET 中的 PDF 生成方面如何比较?
IronPDF 提供了一种简化的 PDF 生成方法,具有基于 Chrome 的渲染引擎和直观的 API,支持包括 .NET 9 和 10 在内的现代 .NET 版本。ActivePDF 提供模块化组件,如 WebGrabber 和 DocConverter 用于企业场景,但需要更多配置。
如何使用 C# 将 HTML 转换为 PDF?
您可以使用 IronPDF 的 RenderHtmlAsPdf 方法快速将 HTML 字符串转换为 PDF。对于基于文件的转换,可以使用 RenderHtmlFileAsPdf 方法,两者都提供高保真的 CSS3 和 JavaScript 支持。
IronPDF 的性能基准是什么?
IronPDF 展示了快速的 HTML 到 PDF 渲染,任务完成时间约为 125-835 毫秒,内存使用低于 10MB。它在页眉和页脚方面还提供显著的内存和处理改进。
我可以使用 IronPDF 自动化批量 PDF 处理吗?
是的,IronPDF 支持通过 async/await 模式进行批量处理,允许您同时处理多个 PDF 转换,使用诸如 RenderHtmlFileAsPdfAsync 的方法。
IronPDF 如何处理 PDF 中的数字签名?
IronPDF 提供 PdfSignature 类以为 PDF 文档添加数字签名。它支持基于证书的签名,并允许自定义签名的外观和元数据。
在 .NET 开发中使用 IronPDF 的成本考量是什么?
IronPDF 许可证价格从 $749 起,包括所有功能。相比之下,ActivePDF 组件单独定价,导致类似功能的总成本更高。
IronPDF 如何确保跨平台兼容性?
IronPDF 支持跨平台部署,包括 Windows、Linux、macOS 和 Docker 环境,使其适合多样化的开发需求和基于云的应用。
如何使用 IronPDF 为 PDF 添加页眉和页脚?
IronPDF 提供 TextHeaderFooter 和 HtmlHeaderFooter 类,允许您使用简单文本和复杂的 HTML/CSS 布局添加页眉和页脚。
IronPDF 与现代 .NET 版本的集成情况如何?
IronPDF 完全支持现代 .NET 版本,包括 .NET 9 和 10,以及 .NET Core、.NET Standard 和 .NET Framework 4.6.2+,确保广泛的兼容性和面向未来的开发。
在 PDF 转换过程中是否支持 JavaScript 执行?
是的,IronPDF 在渲染 PDFs 之前完全执行 JavaScript,并通过 WaitFor.JavaScript() 和 RenderDelay() 控制时间,确保完整和准确的转换。


