跳至页脚内容
使用IRONPDF

HtmlToPdfDocument C# - DinkToPdf 替代软件 | IronPDF

如果您在使用 DinkToPdf 中的 HtmlToPdfDocument C# 时遇到 CSS 支持有限、外部依赖性或性能问题,那么您并不孤单。 许多.NET开发人员寻找一种HTML到PDF的转换器,能够处理现代CSS、网络字体和JavaScript执行,而无需设置本地库或命令行工具。 本指南向您展示如何使用IronPDF替换DinkToPdf -- 这是一款基于Chromium渲染引擎的.NET库,只需几行代码即可将HTML文件、网页和HTML字符串转换为高质量的PDF。

  1. 使用 NuGet 包管理器安装 https://www.nuget.org/packages/IronPdf

    PM > Install-Package IronPdf
  2. 复制并运行这段代码。

    IronPdf.ChromePdfRenderer
           .StaticRenderHtmlAsPdf("<h1>Hello World</h1>")
           .SaveAs("output.pdf");
  3. 部署到您的生产环境中进行测试

    通过免费试用立即在您的项目中开始使用IronPDF

    arrow pointer

如何通过NuGet安装IronPDF?

在编写任何转换代码之前,您需要将IronPDF添加到您的项目中。 最快的路径是使用NuGet包管理器CLI:

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

或者,在Visual Studio中打开NuGet包管理器控制台并运行:

Install-Package IronPdf
Install-Package IronPdf
SHELL

IronPDF支持.NET 8、.NET 9、.NET 10、.NET Standard 2.0及更高版本,以及.NET Framework 4.6.2或更高版本。 无需额外的本地二进制文件、wkhtmltopdf安装或命令行工具设置。 该软件包捆绑了Chromium渲染引擎,并自动解决所有依赖项。 一旦安装完成,您可以在代码中或通过环境变量设置您的许可证密钥,然后立即开始生成PDF。 对于详细的安装指南,IronPDF快速入门页面演示了每个环境。

DinkToPdf 与 IronPDF 相比有何优势?

DinkToPdf是wkhtmltopdf的.NET Core包装器,使用较旧的WebKit渲染引擎。尽管是开源的,开发人员在生产环境中转换HTML为PDF时常面临挑战。

DinkToPdf与IronPDF功能比较
特征 DinkToPdf IronPDF
渲染引擎 WebKit(过时) Chromium(现代)
CSS 支持 有限的CSS支持 全面支持CSS3,现代CSS
JavaScript 执行 数量有限 全面的JavaScript渲染
本地依赖项 需要wkhtmltopdf二进制文件 没有外部依赖
网络字体 部分支持 全面支持
.NET Core / .NET 5+ 支持(.NET Core,Framework,Standard)
Azure 应用服务 复杂的设置 即开即用
线程编程 需要单例 线程安全
HTML 模板 基础 高级功能
可填写PDF表单

核心区别在于渲染引擎。DinkToPdf 的 WebKit 引擎难以处理复杂的文档、现代 CSS 和动态网页内容。 IronPDF的Chromium引擎生成的PDF文档与浏览器所渲染的完全一致。 有关更深入的分析,请参阅IronPDF与DinkToPdf比较页面

DinkToPdf 的 HtmlToPdfDocument 类会带来哪些问题?

HtmlToPdfDocument C#: DinkToPdf替代方案用于HTML到PDF转换:图片1 - DinkToPdf

DinkToPdf中的HtmlToPdfDocument类需要冗长的配置,并存在影响PDF转换质量和开发人员体验的限制:

using DinkToPdf;

var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
    GlobalSettings = { PaperSize = PaperKind.A4, Out = "output.pdf" },
    Objects = { new ObjectSettings() { HtmlContent = "<h1>Hello</h1>" } }
};
converter.Convert(doc);
using DinkToPdf;

var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
    GlobalSettings = { PaperSize = PaperKind.A4, Out = "output.pdf" },
    Objects = { new ObjectSettings() { HtmlContent = "<h1>Hello</h1>" } }
};
converter.Convert(doc);
$vbLabelText   $csharpLabel

DinkToPdf PDF 输出

HtmlToPdfDocument C#: DinkToPdf替代方案用于HTML到PDF转换:图片2 - DinkToPdf示例输出PDF

常见问题包括:即使是简单任务也会导致PDF生成速度缓慢,Web服务器上的线程复杂性,以及处理带有JavaScript的Web内容的困难。 wkhtmltopdf命令行工具在无法安装系统级二进制文件的Azure应用服务和无服务器环境中创造了部署挑战。 开发人员也报告说,单例转换器模式在并发负载下会成为瓶颈。

除了性能之外,GitHub上的DinkToPdf项目显示出有限的维护活动,这意味着CSS渲染或SSL处理中的错误很少会被修复。 对于每天处理成千上万个PDF的生产应用程序,这些缺陷是不可接受的。 当CSS网格布局被打破或网络字体无法加载时,您需要一个能够追踪现代浏览器行为的库,而不是一个停留在2010年代早期的渲染引擎。

如何使用IronPDF将HTML字符串转换为PDF?

HtmlToPdfDocument C#: DinkToPdf替代方案用于HTML到PDF转换:图片3 - IronPDF

IronPDF通过更简洁的API和卓越的输出质量简化了HTML到PDF的转换。 ChromePdfRenderer处理所有HTML内容 -- 从简单的HTML字符串到带有外部样式表、Google Fonts和JavaScript驱动布局的复杂HTML页面。

using IronPdf;

var renderer = new ChromePdfRenderer();

string htmlContent = @"
    <!DOCTYPE html>
    <html>
    <head>
        <style>
            body { font-size: 14px; text-align: center; }
            h1 { color: #2563eb; }
        </style>
    </head>
    <body>
        <h1>Professional Invoice</h1>
        <p>Generated with modern CSS support</p>
    </body>
    </html>";

var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("invoice.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string htmlContent = @"
    <!DOCTYPE html>
    <html>
    <head>
        <style>
            body { font-size: 14px; text-align: center; }
            h1 { color: #2563eb; }
        </style>
    </head>
    <body>
        <h1>Professional Invoice</h1>
        <p>Generated with modern CSS support</p>
    </body>
    </html>";

var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("invoice.pdf");
$vbLabelText   $csharpLabel

IronPDF HTML字符串输出

HtmlToPdfDocument C#: DinkToPdf替代方案用于HTML到PDF转换:图片4 - IronPDF示例简单HTML字符串到PDF输出

此代码演示了IronPDF如何在转换过程中处理HTML和CSS,生成具有正确字号渲染和文本对齐的PDF文档 -- 所有这些都没有外部依赖。 RenderHtmlAsPdf方法接受任何有效的HTML5字符串,包括内联样式、嵌入式脚本和图片的数据URI。

如何将HTML文件转换为PDF?

对于存储在磁盘上的HTML文件转换:

using IronPdf;

var renderer = new ChromePdfRenderer();
var doc = renderer.RenderHtmlFileAsPdf("templates/input.html");
doc.SaveAs("example.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();
var doc = renderer.RenderHtmlFileAsPdf("templates/input.html");
doc.SaveAs("example.pdf");
$vbLabelText   $csharpLabel

HtmlToPdfDocument C#: DinkToPdf替代方案用于HTML到PDF转换:图片5 - HTML文件到PDF输出示例

RenderHtmlFileAsPdf方法为图片、样式表和脚本解析相对于HTML文件在磁盘上的位置的相对路径,现有模板无需修改即可运行。 这使得迁移现有的报告模板变得简单。

如何将网页 URL 转换为 PDF?

转换实时Web内容是IronPDF优于DinkToPdf有限JavaScript渲染的优势所在。 IronPDF的Chromium引擎支持动态HTML元素、单页应用和交互式表单。

using IronPdf;

var renderer = new ChromePdfRenderer();

// Enable JavaScript execution for dynamic content
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(500);
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;

string url = "https://en.wikipedia.org/wiki/Main_Page";
var page = renderer.RenderUrlAsPdf(url);
page.SaveAs("webpage.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

// Enable JavaScript execution for dynamic content
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(500);
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;

string url = "https://en.wikipedia.org/wiki/Main_Page";
var page = renderer.RenderUrlAsPdf(url);
page.SaveAs("webpage.pdf");
$vbLabelText   $csharpLabel

将 URL 转换为 PDF.

HtmlToPdfDocument C#: DinkToPdf替代方案用于HTML到PDF转换:图片6 - 从URL内容渲染的PDF

这一方法非常适合于从Web表单生成发票或存档实时仪表板。 渲染引擎在生成PDF文件之前处理所有网络字体、CSS样式和JavaScript。WaitFor API为您提供了对Chromium引擎何时将页面视为准备捕获的精确控制 -- 您可以等待特定的DOM元素、网络闲置状态或自定义JavaScript条件,这对于从动态内容中进行大规模PDF生成至关重要。

对于需要认证的页面,您可以将HTTP头、cookies或表单POST数据直接传递给渲染器。 URL到PDF文档详细说明了这些高级场景。

如何配置 PDF 输出设置?

两个库都提供配置选项,但IronPDF通过其RenderingOptions对象为生成的PDF提供了更直观的控制:

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.TextHeader.CenterText = "Company Report";
renderer.RenderingOptions.TextFooter.CenterText = "{page} of {total-pages}";

var document = renderer.RenderHtmlAsPdf("<h1 style='text-align: center;'>Quarterly Report</h1>");
document.SaveAs("configured-report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.TextHeader.CenterText = "Company Report";
renderer.RenderingOptions.TextFooter.CenterText = "{page} of {total-pages}";

var document = renderer.RenderHtmlAsPdf("<h1 style='text-align: center;'>Quarterly Report</h1>");
document.SaveAs("configured-report.pdf");
$vbLabelText   $csharpLabel

使用自定义设置输出PDF

HtmlToPdfDocument C#: DinkToPdf替代方案用于HTML到PDF转换:图片7 - 自定义PDF输出

这些选项控制纸张大小、边距、页眉和页脚。 IronPDF还支持自定义HTML页眉和页脚,接受完整的HTML和CSS,允许您在页眉和页脚区域放置徽标、动态页码和样式化文本。 PDF加密和密码API允许您限制生成后的打印、复制或编辑,以保障文档安全。

如何合并多个PDF?

当需要将多个HTML文档合并为一个PDF时,IronPDF提供了静态合并方法:

using IronPdf;

var renderer = new ChromePdfRenderer();

var pdf1 = renderer.RenderHtmlAsPdf("<h1>Section One</h1>");
var pdf2 = renderer.RenderHtmlAsPdf("<h1>Section Two</h1>");

var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged-report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

var pdf1 = renderer.RenderHtmlAsPdf("<h1>Section One</h1>");
var pdf2 = renderer.RenderHtmlAsPdf("<h1>Section Two</h1>");

var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged-report.pdf");
$vbLabelText   $csharpLabel

PDF合并文档展示了如何从多个源文件组装大文档,应用一致的页眉和页脚,并按程序重新排列页面。 这对于在生成单个最终文档之前,独立构建各个部分的报告生成管道非常有用。

为什么要从 DinkToPdf 转用 IronPDF?

对于在.NET Core应用程序中使用HtmlToPdfDocument的开发人员,IronPDF提供了直接解决每个痛点的关键优势:

  • 现代渲染:Chromium引擎处理HTML结构、现代CSS和JavaScript执行,创建像素完美的PDF文档
  • 零设置:无需wkhtmltopdf二进制文件或命令行工具配置 -- 只需添加NuGet包
  • 更好的性能:更快的PDF转换,没有单例线程限制; 渲染器是线程安全的,可以运行并发转换
  • 全面的网络支持:转换带有网络字体、CSS动画、SVG图形和复杂HTML模板的HTML
  • 企业部署:部署到Azure应用服务、AWS Lambda、Docker容器以及传统Web服务器无需额外配置
  • 高级PDF功能:可填写的PDF表单数字签名PDF/A合规性水印
  • 积极的维护:IronPDF定期发布更新,跟踪最新的Chromium版本和.NET运行时

根据Chromium项目的发布计划,引擎每四周接受安全补丁。 IronPDF随每个主要版本捆绑更新的Chromium构建,确保您的PDF生成保持最新,而无需手动管理二进制文件。 这对于需要证明其依赖项已针对已知漏洞进行补丁的安全意识团队非常重要。

IronPDF文档库涵盖了超过50个指导任务的指南,从拆分PDF提取文本添加注释

您的下一步是什么?

虽然DinkToPdf的HtmlToPdfDocument类提供了基本的HTML到PDF转换,但其过时的WebKit引擎和外部依赖对现代.NET开发带来了摩擦。 IronPDF通过基于Chromium的渲染、完全的CSS支持和零依赖部署提供了更好的结果。 无论您是在构建小型内部报告工具还是高流量文档生成服务,迁移路径都很简单:安装NuGet包,用ChromePdfRenderer等效项替换DinkToPdf API调用,从您的部署管道中删除wkhtmltopdf二进制文件。

要继续,请选择适合您情况的路径:

立即开始使用 IronPDF。
green arrow pointer

常见问题解答

什么是IronPDF?

IronPDF是一个.NET库,用于使用Chromium渲染引擎将HTML转换为PDF。它支持现代CSS、JavaScript执行和网络字体,无需本地依赖或外部二进制文件。

为什么要选择 IronPDF 而不是 DinkToPdf?

IronPDF提供完整的CSS3支持,无需本地库或wkhtmltopdf设置,线程安全的并行转换,并且简单易部署到Azure应用服务和Docker,解决了DinkToPdf的所有主要痛点。

IronPDF 如何提高 HTML 到 PDF 转换的性能?

IronPDF使用一个处理HTML、CSS和JavaScript的有效率的Chromium渲染引擎。其线程安全设计消除了在并发负载下影响DinkToPdf的单例瓶颈。

IronPDF 支持现代网络字体吗?

是的。IronPDF的Chromium引擎完全支持Google字体、系统字体和嵌入在HTML中的自定义网络字体,生成准确的字体渲染输出PDF。

IronPDF 能否在 PDF 转换过程中执行 JavaScript?

是的。在RenderingOptions上设置EnableJavaScript为true,并使用WaitFor API来控制Chromium认为页面准备就绪的时间,以确保动态内容在捕获前完全渲染。

使用 IronPDF 需要哪些依赖项?

IronPDF无需本地依赖。通过NuGet安装,包会在内部管理Chromium引擎。无需wkhtmltopdf二进制文件或命令行工具。

IronPDF 是否完全支持 CSS?

是的。IronPDF支持CSS3、Flexbox、CSS网格、自定义属性和媒体查询,实现复杂HTML文档的准确渲染。

IronPDF 如何处理外部库或工具?

IronPDF不依赖外部库或命令行工具。所有内容都包含在NuGet包中,简化了部署并消除了兼容性问题。

IronPDF使用什么渲染引擎?

IronPDF使用一个基于Chromium的渲染引擎,与Google Chrome相同,提供精确和高性能的HTML到PDF转换。

IronPDF 是否适合正在寻找 HTML 转 PDF 解决方案的 .NET 开发人员?

是的。IronPDF支持.NET 8、.NET 9、.NET 10、.NET Standard 2.0和.NET Framework 4.6.2或更高,适合现代和传统.NET应用程序。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me