使用 IRON SUITE

从 HTML 文件在 C# 中创建 PDF

IronPDF 通过编程方式将 HTML 转换为 PDF 文档。

如何在 C# 中创建一个 PDF - HTML 转 PDF 示例

本文的源代码可用于 C#,作为一个 C# HTML 到 PDF 项目源代码下载

以下教程将引导您使用 IronPDF 作为 C# PDF 生成器的过程。 它涵盖了基础知识以及许多高级 C# PDF 主题。

HTML 转 PDF 演练

此演示向您展示如何使用 IronPdf 的示例。 从 Iron Software 请求更多用例演示

该演示包括 Hello World、RenderHtmlAsPdfRenderUrlAsPdf 示例。 所有示例都可以在 IronPDF 示例解决方案中的相应项目下找到。

步骤 1:安装

您可以通过 NuGet 安装 IronPdf。 The package name is IronPDF NuGet Package.

Or you can use the Direct Library Download.

步骤 2:Hello World

一旦将 IronPDF 安装并引用到您的项目中,您就可以立即开始使用它,只需输入几个字符串:

// Create a new instance of ChromePdfRenderer
var chromePdfRenderer = new ChromePdfRenderer();
// Create a new instance of ChromePdfRenderer
var chromePdfRenderer = new ChromePdfRenderer();
' Create a new instance of ChromePdfRenderer
Dim chromePdfRenderer As New ChromePdfRenderer()
$vbLabelText   $csharpLabel

然后如果您需要将 HTML 转换为 PDF:

// Define HTML content to turn into PDF
var html = @"<h1>Hello World!</h1><br><p>This is IronPdf.</p>";

// Render the HTML string as a PDF
using var pdf = chromePdfRenderer.RenderHtmlAsPdf(html);

// Save the resulting PDF to a file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRenderer.Pdf"));
// Define HTML content to turn into PDF
var html = @"<h1>Hello World!</h1><br><p>This is IronPdf.</p>";

// Render the HTML string as a PDF
using var pdf = chromePdfRenderer.RenderHtmlAsPdf(html);

// Save the resulting PDF to a file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRenderer.Pdf"));
' Define HTML content to turn into PDF
Dim html = "<h1>Hello World!</h1><br><p>This is IronPdf.</p>"

' Render the HTML string as a PDF
Dim pdf = chromePdfRenderer.RenderHtmlAsPdf(html)

' Save the resulting PDF to a file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRenderer.Pdf"))
$vbLabelText   $csharpLabel

或者如果您想将网页转换为 PDF 文件:

// URI of the page to turn into PDF
var uri = new Uri("http://www.google.com/ncr");

// Render the webpage as a PDF
using var pdf = chromePdfRenderer.RenderUrlAsPdf(uri);

// Save the resulting PDF to a file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdf.Pdf"));
// URI of the page to turn into PDF
var uri = new Uri("http://www.google.com/ncr");

// Render the webpage as a PDF
using var pdf = chromePdfRenderer.RenderUrlAsPdf(uri);

// Save the resulting PDF to a file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdf.Pdf"));
' URI of the page to turn into PDF
Dim uri As New Uri("http://www.google.com/ncr")

' Render the webpage as a PDF
Dim pdf = chromePdfRenderer.RenderUrlAsPdf(uri)

' Save the resulting PDF to a file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdf.Pdf"))
$vbLabelText   $csharpLabel

就是这样! 相应的结果是:

在 C# 中从 HTML 文件创建 PDF,图 1:将 HTML 转换为 PDF 的结果 将 HTML 转换为 PDF 的结果

在 C# 中从 HTML 文件创建 PDF,图 2:将网页转换为 PDF 的结果 将网页转换为 PDF 的结果

请在 IronPDFDemo.HelloWorld 项目下找到代码示例。

步骤 3:RenderHtmlAsPdf

示例 1

要评估一个更贴近现实的示例,想象一个需要转换为 PDF 的 HTML 发票。 下面是如何做到这一点的代码。

注意:您可以在 IronPDFDemo.DemoWebSite 项目中找到发票 HTML(~/Static/TestInvoice1.html)。 请注意,发票有用于"打印"媒体类型的自定义 CSS。

浏览器中的源发票看起来像这样:

在 C# 中从 HTML 文件创建 PDF,图 4:


要将其转换为 PDF 文件,使用与上面的 HelloWorld 示例类似的代码,区别是源 HTML 文件不同。

// Read HTML from file
var html = File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "TestInvoice1.html"));
var chromePdfRenderer = new ChromePdfRenderer();
using var pdf = chromePdfRenderer.RenderHtmlAsPdf(html);
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRendererExample1.Pdf"));
// Read HTML from file
var html = File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "TestInvoice1.html"));
var chromePdfRenderer = new ChromePdfRenderer();
using var pdf = chromePdfRenderer.RenderHtmlAsPdf(html);
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRendererExample1.Pdf"));
' Read HTML from file
Dim html = File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "TestInvoice1.html"))
Dim chromePdfRenderer As New ChromePdfRenderer()
Dim pdf = chromePdfRenderer.RenderHtmlAsPdf(html)
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRendererExample1.Pdf"))
$vbLabelText   $csharpLabel

结果是:

在 C# 中从 HTML 文件创建 PDF,图 5:从 HTML 生成 PDF 文件 从 HTML 生成 PDF 文件

看起来不错! 请在 IronPDFDemo.RenderHtmlAdPdfDemo 项目下找到代码示例。

也可以查看关于如何在 IronPDF 中使用 HTML 文档或字符串与字节数组的问题

示例 2

本节将帮助定制示例 1 中生成的 PDF。例如,它将添加自定义边距、带有文档标题的页眉、带有创建日期和页码的页脚,以及标准发票所具有的用于"打印"媒体类型的自定义 CSS。 为此,将初始化 ChromePdfRenderOptions 实例并传递到 ChromePdfRenderer 构造函数中。

// Configure rendering options with margins, headers, and footers
var pdfRenderingOptions = new ChromePdfRenderOptions()
{
    MarginTop = 50,
    MarginBottom = 50,
    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
    },
    CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
};

var chromePdfRenderer = new ChromePdfRenderer(pdfRenderingOptions);
// Configure rendering options with margins, headers, and footers
var pdfRenderingOptions = new ChromePdfRenderOptions()
{
    MarginTop = 50,
    MarginBottom = 50,
    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
    },
    CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
};

var chromePdfRenderer = new ChromePdfRenderer(pdfRenderingOptions);
' Configure rendering options with margins, headers, and footers
Dim pdfRenderingOptions = New ChromePdfRenderOptions() With {
	.MarginTop = 50,
	.MarginBottom = 50,
	.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
	},
	.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
}

Dim chromePdfRenderer As New ChromePdfRenderer(pdfRenderingOptions)
$vbLabelText   $csharpLabel

提示:可以通过设置 ChromePdfRenderer 实例的相应字段,而不是在构造函数中传递选项作为参数:

var chromePdfRenderer = new ChromePdfRenderer();
chromePdfRenderer.RenderingOptions = pdfRenderingOptions;
var chromePdfRenderer = new ChromePdfRenderer();
chromePdfRenderer.RenderingOptions = pdfRenderingOptions;
Dim chromePdfRenderer As New ChromePdfRenderer()
chromePdfRenderer.RenderingOptions = pdfRenderingOptions
$vbLabelText   $csharpLabel

注意:页眉和页脚功能合并功能,意味着所有合并字段({page}{total-pages}{url}{date}{time}{html-title}{pdf-title})可以用相应的数据填充。

其余的代码与示例 1 相同。结果是:

在 C# 中从 HTML 文件创建 PDF,图 6:生成带有页眉和页脚的发票 生成带有页眉和页脚的发票

现在已经就位自定义边距、页眉、页脚和"打印"媒体类型的 CSS。 请在 IronPDFDemo.RenderHtmlAdPdfDemo 项目下找到代码示例。 更多设置可在 IronPDF API 参考中找到。

步骤 4:RenderUrlAsPdf

设置

要运行此部分的示例,您需要在本地托管 IronPDFDemo.DemoWebSite。 在 IIS Express 中这样做:

  1. 导航到 DemoWebSite
  2. 右键单击 > 设置为启动项目
  3. 启动而不调试(Ctrl+F5)
  4. 导航到您的 {baseurl}/Static/TestInvoice1.html 以确保其正常工作。 这是 URL http://localhost:51169/Static/TestInvoice1.html(如果您没有更改相应的项目设置,将与您的一样)。

示例 1

在本节中,将托管的 DemoWebSite 发票转换为 PDF,使用与 HelloWorld 示例相同的代码。 区别在于托管的 URL:

// URL of the hosted invoice webpage
var uri = new Uri("http://localhost:51169/Static/TestInvoice1.html");
var urlToPdf = new ChromePdfRenderer();
using var pdf = urlToPdf.RenderUrlAsPdf(uri);
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdfExample1.Pdf"));
// URL of the hosted invoice webpage
var uri = new Uri("http://localhost:51169/Static/TestInvoice1.html");
var urlToPdf = new ChromePdfRenderer();
using var pdf = urlToPdf.RenderUrlAsPdf(uri);
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdfExample1.Pdf"));
' URL of the hosted invoice webpage
Dim uri As New Uri("http://localhost:51169/Static/TestInvoice1.html")
Dim urlToPdf = New ChromePdfRenderer()
Dim pdf = urlToPdf.RenderUrlAsPdf(uri)
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdfExample1.Pdf"))
$vbLabelText   $csharpLabel

结果是:

在 C# 中从 HTML 文件生成 PDF,图 7:生成托管网站为 PDF 生成托管网站为 PDF

这很棒,外观与预期一致。 请在 IronPDFDemo.RenderUrlAsPdfDemo 项目中找到代码示例。

示例 2

许多网站通常受到身份验证方法的保护。 本节中,使用提供的用户名和密码在渲染 PDF 文件的过程中进行一些自定义:自定义边距、带有文档标题的页眉、带有创建日期和页码的页脚,以及标准发票所具有的用于"打印"媒体类型的自定义 CSS。 发票的 URL 在 http://localhost:51169/Invoice

访问 http://localhost:51169/Invoice 会出现"需要身份验证"表单:

在 C# 中从 HTML 文件创建 PDF,图 8:需要身份验证表单 需要身份验证表单

注意:凭证是"testUser"/"testPassword"。

那么如何绕过身份验证呢? 通过设置 HttpLoginCredentials

// URL of the protected invoice webpage
var uri = new Uri("http://localhost:51169/Invoice");

// Configure renderer with login credentials to bypass authentication
var urlToPdf = new ChromePdfRenderer
{
    RenderingOptions = new ChromePdfRenderOptions()
    {
        MarginTop = 50,
        MarginBottom = 50,
        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
        },
        CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
    },

    // Set login credentials to bypass basic authentication
    LoginCredentials = new HttpLoginCredentials()
    {
        NetworkUsername = "testUser",
        NetworkPassword = "testPassword"
    }
};

using var pdf = urlToPdf.RenderUrlAsPdf(uri);
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdfExample2.Pdf"));
// URL of the protected invoice webpage
var uri = new Uri("http://localhost:51169/Invoice");

// Configure renderer with login credentials to bypass authentication
var urlToPdf = new ChromePdfRenderer
{
    RenderingOptions = new ChromePdfRenderOptions()
    {
        MarginTop = 50,
        MarginBottom = 50,
        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
        },
        CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
    },

    // Set login credentials to bypass basic authentication
    LoginCredentials = new HttpLoginCredentials()
    {
        NetworkUsername = "testUser",
        NetworkPassword = "testPassword"
    }
};

using var pdf = urlToPdf.RenderUrlAsPdf(uri);
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdfExample2.Pdf"));
' URL of the protected invoice webpage
Dim uri As New Uri("http://localhost:51169/Invoice")

' Configure renderer with login credentials to bypass authentication
Dim urlToPdf = New ChromePdfRenderer With {
	.RenderingOptions = New ChromePdfRenderOptions() With {
		.MarginTop = 50,
		.MarginBottom = 50,
		.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
		},
		.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
	},
	.LoginCredentials = New HttpLoginCredentials() With {
		.NetworkUsername = "testUser",
		.NetworkPassword = "testPassword"
	}
}

Dim pdf = urlToPdf.RenderUrlAsPdf(uri)
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdfExample2.Pdf"))
$vbLabelText   $csharpLabel

注意:使用的自定义与 ChromePdfRenderer 示例 2 相同。

结果是:

在 C# 中从 HTML 文件创建 PDF,图 9:用凭证生成 HTML 网站的 PDF 文件 用凭证生成 HTML 网站的 PDF 文件

一切都已就位。 请在 IronPDFDemo.RenderUrlAsPdfDemo 项目中找到代码示例。 如果您想知道没有 HttpLoginCredentials 的结果会如何,您可以看到:

在 C# 中从 HTML 文件创建 PDF,图 10:生成没有凭证的空 PDF 文件 生成没有凭证的空 PDF 文件

也请参阅 Jean 的.NET HTML 转 PDF 教程

此外,IronPDF 还可以以不同的方式与 PDF 交互: