HTML 转换为 PDF 在 C# .NET

.NET软件工程师 对许多人来说,这是从.NET生成PDF文件的最有效方式,因为无需学习额外的API或复杂的设计系统。
让·阿什伯格
2018年八月28日
更新 2025年二月11日
分享:
This article was translated from English: Does it need improvement?
Translated
View the article in English

作为IronPDF的开发者,我们深知HTML到PDF的转换需要产生准确、高质量的结果,以满足客户的期望。 本C#教程将指导您为您的应用程序、项目和网站构建一个HTML转PDF转换器。 我们将开发一个C#的HTML到PDF转换器,IronPDF输出的PDF文档将与由Google Chrome浏览器生成的PDF达到像素级的完美一致。


概述


用于C#和VB.NET的HTML到PDF转换器

在 .NET 中以编程方式创建 PDF 文件可能是一项令人沮丧的任务。 PDF 文档文件格式的设计更多地是为了打印机,而不是为开发人员。 C# 并没有很多适合的库或内置的功能来生成 PDF,市场上的许多库不能开箱即用,且在需要多行代码来完成简单任务时会导致进一步的挫败感。

我们在本教程中将使用的C# HTML到PDF转换工具是由Iron Software开发的IronPDF,这是一款非常受欢迎的C# PDF生成和编辑库。 这个库具有全面的PDF编辑和生成功能,开箱即用,以最少的代码行数完全满足您的需求,并且对其50多个功能的文档完备。 IronPDF 的突出之处在于它支持.NET 8、.NET 7、.NET 6 和 .NET 5,.NET Core、Standard 和 Framework 可在 Windows、macOS、Linux、Docker、Azure 和 AWS 上使用。

使用 C# 和 IronPDF,"生成 PDF 文档" 或 "HTML 转换为 PDF" 的逻辑非常简单。 由于IronPDF的高级Chrome渲染器,大部分或全部PDF文档设计和布局将使用现有的HTML资产。

这种在 .NET 中使用 HTML5 的动态 PDF 生成方法同样适用于控制台应用程序、Windows Forms 应用程序、WPF 以及网站和 MVC。

**IronPDF 还支持使用 Chrome 调试您的 HTML,以实现像素级完美的 PDF。 您可以在此处找到设置教程。

IronPDF 能够在 .NET 生态系统内外以多种语言工作。

下载并安装 HTML to PDF C# 库

立即在您的项目中开始使用IronPDF,并享受免费试用。

第一步:
green arrow pointer

Visual Studio - NuGet 包管理器

在 Visual Studio 中,右键点击项目解决方案资源管理器,然后选择管理 NuGet 包...,然后只需搜索 IronPDF 并将最新版本安装到您的解决方案中... 单击确定以关闭任何弹出的对话框。这在 VB.NET 项目中同样有效。

Install-Package IronPdf

NuGet 网站上的 IronPDF

如需查看 IronPDF 的功能、兼容性和下载的全面介绍,请访问 NuGet 官方网站上的 IronPDF:https://www.nuget.org/packages/IronPdf

通过 DLL 安装

另一种选择是直接安装 IronPDF DLL。 可以从https://ironpdf.com/packages/IronPdf.zip下载并手动安装IronPDF到项目或GAC


教程

在 C# .NET 中使用 HTML 字符串创建 PDF

如何:将 HTML 字符串转换为 PDF? 在 C# 中创建新的 PDF 文件是一项非常高效且有益的技能。

我们可以简单地使用ChromePdfRenderer.RenderHtmlAsPdf 方法将任何 HTML (HTML5) 字符串转换为 PDF。 C# HTML 到 PDF 渲染 是由包含在 IronPDF DLL 中的完整功能的 Google Chromium 引擎版本完成的。

:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-1.cs
using IronPdf;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1> Hello IronPdf </h1>");
pdf.SaveAs("pixel-perfect.pdf");
Imports IronPdf

Private renderer = New ChromePdfRenderer()
Private pdf = renderer.RenderHtmlAsPdf("<h1> Hello IronPdf </h1>")
pdf.SaveAs("pixel-perfect.pdf")
$vbLabelText   $csharpLabel

RenderHtmlAsPdf完全支持HTML5、CSS3、JavaScript和图像。 如果这些资产位于硬盘上,我们可能希望将RenderHtmlAsPdf的第二个参数设置为包含资产的目录。 此方法返回一个PdfDocument对象,这是一个用于保存PDF信息的类。

IronPDF将按HTML在Chrome中的显示方式准确呈现您的HTML内容。

我们提供了一个完整的教程,专门教您如何设置 Chrome 进行完整的 HTML 调试,以确保在编辑 HTML、CSS 和 JavaScript 时,您在那看到的更改与 IronPDF 在选择渲染时生成的输出 PDF 完全一致。 请在此处查找教程:如何在Chrome中调试HTML以创建像素完美的PDF

BaseUrlPath

:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-2.cs
using IronPdf;

// this will render C:\MyProject\Assets\image1.png
var pdf = renderer.RenderHtmlAsPdf("<img src='image1.png'/>", @"C:\MyProject\Assets\");
Imports IronPdf

' this will render C:\MyProject\Assets\image1.png
Private pdf = renderer.RenderHtmlAsPdf("<img src='image1.png'/>", "C:\MyProject\Assets\")
$vbLabelText   $csharpLabel

所有引用的CSS样式表、图像和JavaScript文件都将相对于BaseUrlPath,并可以保持在一个整洁合理的结构中。 当然,您也可以选择引用在线的图片、样式表和资产,包括 Google Fonts 等网络字体,甚至是 jQuery。


使用现有URL导出PDF

URL 转 PDF

使用 C# 将现有 URL 渲染为 PDF 非常高效且直观。这也允许团队将 PDF 设计和后端 PDF 渲染工作分配给多个团队。

在以下示例中,让我们渲染 Wikipedia.com 的一个页面:

:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-3.cs
using IronPdf;

// Create a PDF from any existing web page
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
pdf.SaveAs("wikipedia.pdf");
Imports IronPdf

' Create a PDF from any existing web page
Private renderer = New ChromePdfRenderer()
Private pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF")
pdf.SaveAs("wikipedia.pdf")
$vbLabelText   $csharpLabel

您会注意到,通过我们的C#代码生成的PDF中,超链接甚至HTML表单都会被保留。

在渲染现有网页时,我们可能希望应用一些技巧:

打印和屏幕CSS

在现代CSS3中,我们有用于打印和屏幕的CSS指令。 我们可以指示IronPDF渲染通常被简化或忽略的“打印”CSS。 默认情况下,将渲染“Screen”CSS样式,IronPDF 用户发现这种方式最为直观。

:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-4.cs
using IronPdf;
using IronPdf.Rendering;

renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;
// or
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
Imports IronPdf
Imports IronPdf.Rendering

renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen
' or
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
$vbLabelText   $csharpLabel

主页:可在此处找到包含屏幕和打印图像的完整比较。

JavaScript

IronPDF支持JavaScript、jQuery,甚至支持AJAX。 我们可能需要指示IronPDF 等待 JS 或 ajax完成运行,然后再渲染我们网页的快照。

:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-5.cs
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(500); // milliseconds
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

我们可以通过从像这样的CSV数据集中呈现高级d3.js JavaScript和弦图表,来展示对JavaScript标准的遵从。

:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-6.cs
using IronPdf;

// Create a PDF Chart a live rendered dataset using d3.js and javascript
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://bl.ocks.org/mbostock/4062006");
pdf.SaveAs("chart.pdf");
Imports IronPdf

' Create a PDF Chart a live rendered dataset using d3.js and javascript
Private renderer = New ChromePdfRenderer()
Private pdf = renderer.RenderUrlAsPdf("https://bl.ocks.org/mbostock/4062006")
pdf.SaveAs("chart.pdf")
$vbLabelText   $csharpLabel

响应式CSS

在 .NET 中使用响应式 CSS 将 HTML 转换为 PDF! 响应式网页旨在浏览器中查看。 IronPDF不会在服务器的操作系统中打开真实的浏览器窗口。 这可能导致响应式元素以最小尺寸进行渲染。

我们建议使用打印CSS媒体类型来解决这个问题。 打印 CSS 通常不应该是响应式的。

:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-7.cs
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
$vbLabelText   $csharpLabel

从HTML页面生成PDF文件

我们也可以将任何HTML页面渲染为PDF并存储在硬盘上。 所有相关资产,例如 CSS、图像和 js,将被呈现为该文件好像已使用file://协议打开一样。

:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-8.cs
using IronPdf;

// Create a PDF from an existing HTML using C#
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");
pdf.SaveAs("Invoice.pdf");
Imports IronPdf

' Create a PDF from an existing HTML using C#
Private renderer = New ChromePdfRenderer()
Private pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")
pdf.SaveAs("Invoice.pdf")
$vbLabelText   $csharpLabel

这种方法的优点是允许开发人员在开发过程中在浏览器中测试HTML内容。 我们推荐使用Chrome,因为IronPDF的渲染引擎基于此网络浏览器。

要将XML 转换为 PDF,您可以使用 XSLT 模板将您的 XML 内容打印到 PDF


添加自定义页眉和页脚

在渲染PDF或使用IronPDF处理现有PDF文件时,可以添加页眉和页脚。

使用IronPDF,页眉和页脚可以使用TextHeaderFooter类包含简单的文本内容——或者使用HtmlHeaderFooter类包含图像和丰富的HTML内容。

:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-9.cs
using IronPdf;

// Create a PDF from an existing HTML
var renderer = new ChromePdfRenderer
{
    RenderingOptions =
    {
        MarginTop = 50, //millimeters
        MarginBottom = 50,
        CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print,
        TextHeader = new TextHeaderFooter
        {
            CenterText = "{pdf-title}",
            DrawDividerLine = true,
            FontSize = 16
        },
        TextFooter = new TextHeaderFooter
        {
            LeftText = "{date} {time}",
            RightText = "Page {page} of {total-pages}",
            DrawDividerLine = true,
            FontSize = 14
        }
    }
};

var pdf = renderer.RenderHtmlFileAsPdf("assets/TestInvoice1.html");
pdf.SaveAs("Invoice.pdf");

// This neat trick opens our PDF file so we can see the result
System.Diagnostics.Process.Start("Invoice.pdf");
Imports IronPdf

' Create a PDF from an existing HTML
Private renderer = New ChromePdfRenderer With {
	.RenderingOptions = {
		MarginTop = 50, MarginBottom = 50, CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print, TextHeader = New TextHeaderFooter With {
			.CenterText = "{pdf-title}",
			.DrawDividerLine = True,
			.FontSize = 16
		},
		TextFooter = New TextHeaderFooter With {
			.LeftText = "{date} {time}",
			.RightText = "Page {page} of {total-pages}",
			.DrawDividerLine = True,
			.FontSize = 14
		}
	}
}

Private pdf = renderer.RenderHtmlFileAsPdf("assets/TestInvoice1.html")
pdf.SaveAs("Invoice.pdf")

' This neat trick opens our PDF file so we can see the result
System.Diagnostics.Process.Start("Invoice.pdf")
$vbLabelText   $csharpLabel

在以下操作指南文章中探索所有渲染选项:如何使用渲染选项

HTML页眉和页脚

HtmlHeaderFooter 类允许使用 HTML5 内容生成丰富的页眉和页脚,这些内容甚至可以包括图像、样式表和超链接。

:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-10.cs
using IronPdf;

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"
};
Imports IronPdf

renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {.HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"}
$vbLabelText   $csharpLabel

PDF页眉和页脚中的动态数据

我们可以使用占位符将内容“邮件合并”到文本中,甚至是页眉和页脚的HTML中,例如:

  • {page} 代表当前页码
  • {total-pages} 用于表示 PDF 中的总页数
  • 如果从网页渲染,则为渲染 PDF 的 URL:{url}
  • {date} 今日日期
  • {time} 用于当前时间
  • {html-title} 用于呈现 HTML 文档的title属性
  • {pdf-title} 用于文档标题,可通过 ChromePdfRenderOptions 设置

C#HTML到PDF转换设置

我们的用户和客户可能期望 PDF 内容呈现的方式有许多细微之处。

ChromePdfRenderer类包含一个RenderingOptions属性,可用于设置这些选项。

例如,我们可能希望选择仅接受“print”样式的CSS3指令:

:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-11.cs
using IronPdf;

renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
Imports IronPdf

renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
$vbLabelText   $csharpLabel

我们可能还希望改变打印页边距的大小,以便在页面上留出更多空白,为大页眉或页脚留出空间,甚至为商业印刷小册子或海报设置零页边距:

:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-12.cs
using IronPdf;

renderer.RenderingOptions.MarginTop = 50; // millimeters
renderer.RenderingOptions.MarginBottom = 50; // millimeters
Imports IronPdf

renderer.RenderingOptions.MarginTop = 50 ' millimeters
renderer.RenderingOptions.MarginBottom = 50 ' millimeters
$vbLabelText   $csharpLabel

我们可能希望打开或关闭 HTML 元素的背景图片:

:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-13.cs
using IronPdf;

renderer.RenderingOptions.PrintHtmlBackgrounds = true;
Imports IronPdf

renderer.RenderingOptions.PrintHtmlBackgrounds = True
$vbLabelText   $csharpLabel

还可以设置我们输出的 PDF 文件在任何虚拟纸张尺寸上呈现,包括纵向和横向尺寸,甚至可以设置为毫米或英寸的自定义尺寸。

:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-14.cs
using IronPdf;
using IronPdf.Rendering;

renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
Imports IronPdf
Imports IronPdf.Rendering

renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
$vbLabelText   $csharpLabel

在以下操作指南文章中探索所有渲染选项:“如何使用渲染选项”。


应用 HTML 模板

为模板或“批量创建”PDF 是互联网和网站开发人员的常见需求。

与其直接对PDF文档进行模板化操作,我们可以使用IronPDF利用现有的、经过验证的技术来对HTML进行模板化。 当 HTML 模板与查询字符串或数据库中的数据结合时,我们最终会得到一个动态生成的 PDF 文档。

在最简单的情况下,使用 C# 的 String.Format 方法对于基本示例是有效的。

:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-15.cs
using System;


String.Format("<h1>Hello {0} !</h1>", "World");
Imports System


String.Format("<h1>Hello {0} !</h1>", "World")
$vbLabelText   $csharpLabel

如果 HTML 文件较长,通常我们可以使用任意占位符,例如 [[NAME]],并在之后用真实数据替换它们。

以下示例将创建三个PDF,每个PDF都是针对用户个性化的。

:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-16.cs
var htmlTemplate = "<p>[[NAME]]</p>";
var names = new[] { "John", "James", "Jenny" };
foreach (var name in names)
{
    var htmlInstance = htmlTemplate.Replace("[[NAME]]", name);
    var pdf = renderer.RenderHtmlAsPdf(htmlInstance);
    pdf.SaveAs(name + ".pdf");
}
Dim htmlTemplate = "<p>[[NAME]]</p>"
Dim names = { "John", "James", "Jenny" }
For Each name In names
	Dim htmlInstance = htmlTemplate.Replace("[[NAME]]", name)
	Dim pdf = renderer.RenderHtmlAsPdf(htmlInstance)
	pdf.SaveAs(name & ".pdf")
Next name
$vbLabelText   $csharpLabel

使用Handlebars.NET的高级模板功能

将C#数据与HTML合并生成PDF的一种复杂方法是使用Handlebars模板标准。

Handlebars 使得从 C# 对象和类实例(包括数据库记录)创建动态 HTML 成为可能。 Handlebars 在生成发票时,尤其用于查询可能返回未知行数的情况下,特别有效。

我们首先必须向我们的项目添加一个额外的 NuGet 软件包:https://www.nuget.org/packages/Handlebars.NET/

:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-17.cs
var source =
    @"<div class=""entry"">
        <h1>{{title}}</h1>
        <div class=""body"">
            {{body}}
        </div>
    </div>";
var template = Handlebars.Compile(source);

var data = (title: "My new post", body: "This is my first post!");

var result = template(data);

/* Would render:
<div class="entry">
  <h1>My New Post</h1>
  <div class="body">
    This is my first post!
  </div>
</div>
*/
Dim source = "<div class=""entry"">
        <h1>{{title}}</h1>
        <div class=""body"">
            {{body}}
        </div>
    </div>"
Dim template = Handlebars.Compile(source)

Dim data = (title:= "My new post", body:= "This is my first post!")

Dim result = template(data)

' Would render:
'<div class="entry">
'  <h1>My New Post</h1>
'  <div class="body">
'    This is my first post!
'  </div>
'</div>
'
$vbLabelText   $csharpLabel

要呈现此 HTML,我们可以简单地使用RenderHtmlAsPdf方法。

:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-18.cs
using IronPdf;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlInstance);
pdf.SaveAs("Handlebars.pdf");
Imports IronPdf

Private renderer = New ChromePdfRenderer()
Private pdf = renderer.RenderHtmlAsPdf(htmlInstance)
pdf.SaveAs("Handlebars.pdf")
$vbLabelText   $csharpLabel

您可以通过 https://github.com/rexm/Handlebars.NET,了解有关 handlebars HTML 模板标准及其 C# 使用的更多信息。

使用HTML5添加分页符

在 PDF 文档中,一个常见的需求是分页。 开发人员需要控制 PDF 页面开始和结束的位置,以获得清晰、易读的布局。

最简单的方法是使用一个不太为人所知的 CSS 技巧,它会在任何打印的 HTML 文档中插入分页符。

<div style='page-break-after: always;'>&nbsp;</div>
<div style='page-break-after: always;'>&nbsp;</div>
HTML

提供的HTML可以工作,但不是最佳实践。我们建议像以下例子一样调整媒体属性。 一种整洁的方式来布局多页HTML内容。

<!DOCTYPE html>
<html>
  <head>
    <style type="text/css" media="print">
      .page{
        page-break-after: always;
        page-break-inside: avoid;
      }
    </style>
  </head>
  <body>
    <div class="page">
      <h1>This is Page 1</h1>
    </div>
    <div class="page">
      <h1>This is Page 2</h1>
    </div>
    <div class="page">
      <h1>This is Page 3</h1>
    </div>
  </body>
</html>
<!DOCTYPE html>
<html>
  <head>
    <style type="text/css" media="print">
      .page{
        page-break-after: always;
        page-break-inside: avoid;
      }
    </style>
  </head>
  <body>
    <div class="page">
      <h1>This is Page 1</h1>
    </div>
    <div class="page">
      <h1>This is Page 2</h1>
    </div>
    <div class="page">
      <h1>This is Page 3</h1>
    </div>
  </body>
</html>
HTML

本指南概述了更多关于分页符的小窍门和技巧


将封面附加到PDF

IronPDF让合并PDF文档变得简单。 这种技术最常见的用法是为现有的已呈现的PDF文档添加封面或背面。

为此,我们首先渲染一个封面页面,然后使用PdfDocument.Merge()静态方法来合并这两个文档。

:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-19.cs
using IronPdf;

var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/");
var pdfMerged = PdfDocument.Merge(new PdfDocument("CoverPage.pdf"), pdf).SaveAs("Combined.Pdf");
Imports IronPdf

Private pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/")
Private pdfMerged = PdfDocument.Merge(New PdfDocument("CoverPage.pdf"), pdf).SaveAs("Combined.Pdf")
$vbLabelText   $csharpLabel

完整的代码示例可以在这里找到:PDF封面页代码示例


添加水印

IronPDF支持的最终C# PDF功能是在文档中添加水印。 这可以用于在每页添加一个带有“机密”或“示例”字样的通知。

:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-20.cs
using IronPdf;
using IronPdf.Editing;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
// Watermarks all pages with red "SAMPLE" text at a custom location.
// Also adding a link to the watermark on-click
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 0, VerticalAlignment.Middle, HorizontalAlignment.Center);
pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
Imports IronPdf
Imports IronPdf.Editing

Private renderer = New ChromePdfRenderer()
Private pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf")
' Watermarks all pages with red "SAMPLE" text at a custom location.
' Also adding a link to the watermark on-click
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 0, VerticalAlignment.Middle, HorizontalAlignment.Center)
pdf.SaveAs("C:\Path\To\Watermarked.pdf")
$vbLabelText   $csharpLabel

完整的代码示例可以在这里找到:PDF 水印代码示例


下载C#源代码

本教程的完整免费 HTML 到 PDF 转换器 C# 源代码可以作为压缩的 Visual Studio 2022 项目文件下载。它将使用其渲染引擎在 C# 中生成 PDF 文档对象。

将本教程下载为 Visual Studio 项目

免费下载包含了将HTML创建为PDF所需的一切 - 包括用于以下内容的C# PDF代码示例:

  1. 使用C#将HTML字符串转换为PDF

  2. 在C#中将HTML文件转换为PDF(支持CSS、JavaScript和图像)

  3. C# HTML 转换为 PDF 使用 URL(“URL 转 PDF”)

  4. C# PDF编辑和设置示例

  5. 将 JavaScript 画布图表(如 d3.js)渲染为 PDF

  6. 用于 C# 的 PDF 库

类参考

开发者可能也会对IronPdf.PdfDocument类参考感兴趣:

https://ironpdf.com/object-reference/api/

此对象模型展示了 PDF 文档如何:

  • 加密和密码保护
  • 编辑或“标记”新的HTML内容
  • 增强了前景和背景图像
  • 合并、连接、截断和拼接于页面或文档级别
  • OCR处理以提取纯文本和图像

Blazor HTML 转 PDF

将HTML到PDF的功能添加到您的Blazor服务器非常简单,只需:

  1. 创建一个新的Blazor服务器项目或使用一个现有的项目

  2. 使用NuGet将IronPDF库添加到您的项目中

  3. 添加一个新的 Razor 组件或使用现有的组件

  4. 添加一个InputTextArea并将其链接到IronPDF

  5. 让IronPDF负责其余的部分并部署

    完整的分步指南,包括图片和代码示例,可以在此处找到。

    Blazor Tutorial 3 related to Blazor HTML 转 PDF

与其他 PDF 库的比较

IronPDF 是一个功能强大且功能齐全的 PDF 库,专为现代 .NET 开发人员量身定制。 借助由先进的Chromium引擎驱动的原生HTML到PDF转换、直观的API以及定期更新,它简化了开发过程,同时确保了高质量的结果。 让我们仔细看看它如何与其他工具进行比较:

PDFSharp

  • 核心功能:PdfSharp 是一个开源库,支持基础的 PDF 创建和编辑。 然而,它缺乏内置的HTML到PDF转换,这对于准确呈现网页内容至关重要。
  • 现代标准:IronPDF通过其基于Chromium的引擎利用现代Web技术,包括HTML、CSS和JavaScript,确保PDF保持现代化的外观和感觉。
  • 支持和更新:PdfSharp 更新很少且缺乏官方支持,而 IronPDF 提供每月更新、安全补丁和专业支持,使其成为企业应用的理想选择。

wkhtmltopdf

  • 易于集成:wkhtmltopdf需要命令行操作和手动依赖配置,使其与.NET应用程序集成更加繁琐。
  • 渲染技术:wkhtmltopdf依赖于过时的WebKit引擎,在处理现代JavaScript和CSS时常常遇到困难,生成输出的时间过长,尤其是对于动态、内容丰富的网站。 IronPDF 的 Chromium 引擎提供精确可靠的渲染。
  • 持续开发:wkhtmltopdf 自 2022 年以来几乎没有积极开发,支持有限,而 IronPDF 继续通过频繁更新和专门的客户服务不断发展。
  • 安全漏洞

iTextSharp

  • HTML 到 PDF 渲染:iTextSharp 的免费版本不提供原生的 HTML 到 PDF 转换,通常迫使开发人员使用复杂的变通方法。 而IronPDF则提供与现代网络技术充分支持的无缝转换。
  • 开发者体验:iTextSharp的底层API可能会很麻烦且费时,减慢开发进程。 IronPDF 提供简洁直观的 C# API,简化编码并加速项目交付。
  • 维护与支持:IronPDF提供专业支持和定期更新,确保安全性和效率,而iTextSharp的免费版本已过时且缺乏官方支持。
  • 许可证很烦人

Aspose.PDF

  • 转换质量:Aspose.PDF 是一个功能强大的工具,但其HTML到PDF的转换有局限性,可能难以处理现代CSS和JavaScript。 Aspose不允许直接将URL转换为PDF,因此开发人员必须手动下载HTML或流式传输内容,增加了额外的步骤。 即使这样做,生成的PDF通常仍然缺少样式、布局元素和动态内容。 IronPDF 的 Chromium 引擎确保对复杂网页布局进行高保真转换。
  • API 可用性:Aspose.PDF 的 API 可能冗长且难以导航,而 IronPDF 专注于开发者友好的体验,减少设置时间并提高生产力。
  • 性能:IronPDF 的优化处理确保了更快的转换速度和更好的性能,是需要大量生成 PDF 的企业应用程序的强大选择。

Syncfusion PDF

  • API 复杂性:Syncfusion PDF 是一个强大的工具,但其 API 较为复杂,可能会延缓开发进程。 相比之下,IronPDF 提供了一个简单的 API 以便快速集成。
  • 渲染引擎:Syncfusion 支持 WebKit 和 Blink 引擎。 虽然Blink比WebKit更快,但实际测试显示Syncfusion的Blink引擎仍然比IronPDF的Chromium渲染引擎性能更慢。此外,Syncfusion在完整捕获复杂页面时存在困难,遗漏了一些动态加载部分和某些CSS样式。 IronPDF 的 Chromium 引擎确保了精确和一致的渲染,即使是对使用大量 JavaScript 和 CSS 的现代网站也是如此。
  • 高级功能:除了标准转换外,IronPDF还包括强大的功能,如数字签名、注释、表单填写、OCR和条形码生成,为您的项目增加额外的价值。

渲染对比

为了比较这些库的HTML到PDF转换质量,我们使用了Reddit页面,其中包含动态内容、实时更新、现代CSS和基于JavaScript的元素:

https://www.reddit.com/

Reddit主页的截图

以下是结果(点击每个图像查看放大版本):

IronPDF

Output of IronPDF Conversion of Reddit Home Page from HTML to PDF 格式良好且视觉精确的PDF,保留动态内容和现代风格。

同步融合

Output of Syncfusion Conversion of Reddit Home Page from HTML to PDF 转换成功,但错过了大部分章节和样式,尤其是动态内容。最初被Reddit阻止。要获得更好的结果,需要通过命令行参数进行广泛调整,但输出仍然不尽如人意。

Aspose.PDF

通过Aspose.PDF将Reddit主页从HTML转换为PDF的输出 首先需要手动下载HTML(因为Aspose不支持直接URL转换)。即使在转换之后,输出也缺乏适当的格式,并且几乎遗漏了各部分的所有内容。

Wkhtmltopdf

通过Aspose.PDF将Reddit主页从HTML转换为PDF的输出 wkhtmltopdf快速完成了转换,但结果是一个简单的静态页面,缺少实时更新、动态元素和交互部分等关键内容。 这使得wkhtmltopdf不适合现代动态网页。

注意:PdfSharp和iTextSharp均不原生支持HTML到PDF的转换,因此未包含在本次测试中。使用这些库的开发人员需要依赖第三方工具进行HTML渲染。

结论

对于寻求现代且可靠的PDF解决方案的.NET开发人员,IronPDF在竞争中脱颖而出。 其无缝的HTML到PDF转换、易用性、定期更新以及全面的功能集使其成为首选。不论您是在进行小型项目还是大型企业应用,IronPDF在提高生产力的同时避免了使用过时或不受支持的库所带来的风险。 为商业应用而设计,IronPDF 确保您的项目保持稳健、高效和面向未来。

在对真实动态网站进行的直接测试中,IronPDF 提供了速度最快且最准确的结果。 Syncfusion 较慢,并且错过了大多数部分。 Aspose需要先下载HTML,但仍然无法正确渲染。 wkhtmltopdf 提供了静态 HTML 内容,却没有捕捉样式,这不适合现代网站。

这确认了IronPDF在现代HTML到PDF的工作流中提供了速度、准确性和易用性之间的最佳平衡。

体验 IronPDF 的全功能套件,它可以轻松地将动态、复杂的 CSS HTML 转换为 PDF—现在通过我们的免费试用进行测试。


观看HTML转PDF教程视频

关于PDF文档,您可以访问以下链接,了解如何在Chrome中打开PDF而无需下载

.NET软件工程师 对许多人来说,这是从.NET生成PDF文件的最有效方式,因为无需学习额外的API或复杂的设计系统。
.NET软件工程师

Jean 是美国马萨诸塞州一家企业内部信息解决方案的独立软件开发人员。

Jean 是 IronPDF 的早期采用者,并多次参与“规格设计”产品改进和构建单一稳定 C# 库的路线图,以涵盖所有主要的 PDF 产品功能使用场景。

注释
用户圈
Jake Thompson 说:
刚读了这个教程,真的非常有帮助。将 HTML 字符串直接转换为 PDF 的示例在我第一次尝试时就成功了,这很罕见!
用户圈
Lena Parker 说:
他们一步一步地分解内容让我非常喜欢。即使我将此添加到一个相当大的C#项目中,也不觉得太过压倒。对于任何新接触IronPDF的人来说,这都是一个坚实的起点。
用户圈
Marcus Rivera 说:
很好的概述。我已经对HTML转PDF有一些了解,但看到IronPDF如何处理这些事情很有趣。可能会在我们的一个内部工具中试用一下。
用户圈
Rachel Nguyen 说:
本教程正是我开始一个报告功能所需要的。解释清晰,我在一小时内就有了一个可行的原型。感谢这一切是如此简单明了。
用户圈
Tom Bennett 说:
我发现关于从URL渲染的部分很有用,尤其是因为我们的大量内容是动态生成的。不过,非常希望能获得更多关于缓存的信息。总体而言,目前为止印象深刻。
用户圈
Melissa Chen 说:
我尝试过一些C#的HTML到PDF库,这份教程让IronPDF看起来像是更流畅的选择之一。示例运行时没有任何重大问题。无可挑剔!
用户圈
Noah Brooks 说:
在我们的报告中添加页眉和页脚曾经很麻烦。本教程让它变得几乎太简单了。超级方便,而且代码也很容易读懂。
用户圈
Emma Scott 说:
本指南的语调友好,代码整洁。它非常适合那些只想跳过冗余内容直接获取有用信息的有经验的开发人员。而且内容也不算太长!
用户圈
Jason Reed 说:
老实说,没想到会这么喜欢它。我只是随便看看有什么选项,但这里的示例让我开始思考如何自动化一些文档工作流程。打算试试看。
用户圈
Sophia Walsh 说:
很高兴你在不让我陷入过多理论的情况下,涵盖了基础知识。我能够将其插入到Blazor应用程序中,几乎无需调整。它起作用了。
用户圈
Liam Foster 说:
一直在寻找这样一个 .NET 解决方案。教程相当易读,并且没有过多假设。不过,可以添加一些更高级的示例。
用户圈
Chloe Simmons 说:
超级有帮助!特别喜欢关于外部资产(如字体和样式表)的解释。如果不小心的话,那部分可能会很棘手。
用户圈
Ethan Patel 说:
我不需要大部分的介绍内容,但高级渲染技巧非常有价值。喜欢如何轻松将CSS嵌入HTML中并仍然获得清晰的PDF。IronPDF似乎非常适合我们的报告。
用户圈
Zoe Murphy 说:
直奔主题,没有冗长的营销废话。我欣赏这一点。只需要弄清楚PDF的生成,这个页面确实做到了。
用户圈
Aiden Hughes 说:
这是一篇很好的介绍,尤其适合时间紧张的人。没有太花哨的东西,仅仅足够让一个工作设置运行起来。IronPDF 迄今看起来相当稳固。
用户圈
Natalie Kim 说:
希望能有更多关于PDF/A和合规性的内容,但核心内容确实很清晰。成功渲染了我的第一个PDF,没有遇到任何问题。
用户圈
Owen Carter 说:
有很多代码示例。我可以在不深入查看文档的情况下复制、调整并运行这些代码。感觉这是在查看完整 API 参考之前的一个很好的起点。
用户圈
Hailey Morgan 说:
这个教程没有深入讲解性能,但对于基本需求来说,它已经很棒了。帮助我理解了使用 URL 与原始 HTML 输入之间的区别。
用户圈
Caleb Russell 说:
多亏了这个,我在15分钟内运行了一个基本的转换器。完全不错。很想看看它在生产环境中的表现如何。
用户圈
莉莉·巴恩斯 说:
整体来说非常好。代码清晰,解释简单,并提供了足够的信息,让您可以自行探索其余内容。可能会将此页加入书签。
留下回复