使用IRONPDF

从HTML文件在C#中创建PDF

更新 2024年一月20日
分享:

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

如何用 C# 创建 PDF - HTML 转 PDF 示例

这种技术的一个简单示例可以是 下载和观看.

整篇文章的源代码可作为 C# 的 C# HTML 转 PDF 项目源代码下载.

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

HTML 转 PDF 演练

该演示通过实例向您介绍如何使用 IronPdf。 请随时要求提供其他用例演示.

演示包括 Hello World、 将Html渲染为Pdf将URL渲染为PDF 示例。所有示例均可在 IronPDF 演示解决方案下的相应项目中找到。

步骤 1:安装

你可以通过 NuGet 安装 IronPdf。软件包名称为 IronPDF.

或者您可以使用 下载资料库的直接链接.

第 2 步:你好,世界

在项目中安装并引用 IronPDF 后,只需键入几个字符串,就可以立即开始使用它了:

var ChromePdfRenderer = new ChromePdfRenderer();  // new instance of ChromePdfRenderer
var ChromePdfRenderer = new ChromePdfRenderer();  // new instance of ChromePdfRenderer
Dim ChromePdfRenderer As New ChromePdfRenderer() ' new instance of ChromePdfRenderer
VB   C#

那么如果您需要将 HTML 转换成 PDF

// html to turn into pdf
var html = @"<h1>Hello World!</h1><br><p>This is IronPdf.</p>";
// turn html to pdf
using var pdf = ChromePdfRenderer.RenderHtmlAsPdf(html);
// save resulting pdf into file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRenderer.Pdf"));
// html to turn into pdf
var html = @"<h1>Hello World!</h1><br><p>This is IronPdf.</p>";
// turn html to pdf
using var pdf = ChromePdfRenderer.RenderHtmlAsPdf(html);
// save resulting pdf into file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRenderer.Pdf"));
' html to turn into pdf
Dim html = "<h1>Hello World!</h1><br><p>This is IronPdf.</p>"
' turn html to pdf
Dim pdf = ChromePdfRenderer.RenderHtmlAsPdf(html)
' save resulting pdf into file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRenderer.Pdf"))
VB   C#

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

// uri of the page to turn into pdf
var uri = new Uri("http://www.google.com/ncr");
// turn page into pdf
pdf = ChromePdfRenderer.RenderUrlAsPdf(uri);
// save resulting pdf into 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");
// turn page into pdf
pdf = ChromePdfRenderer.RenderUrlAsPdf(uri);
// save resulting pdf into 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")
' turn page into pdf
pdf = ChromePdfRenderer.RenderUrlAsPdf(uri)
' save resulting pdf into file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdf.Pdf"))
VB   C#

就是这样!

相应的结果是

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

将 HTML 转换为 PDF** 的结果

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

将网页转换为 PDF 的结果

请在 IronPDFDemo.HelloWorld 项目下查看代码示例。

步骤 3:RenderHtmlAsPdf

示例 1

举一个更真实的例子,想象一张 HTML 发票需要转换成 PDF。下面是如何转换的代码。

注: 您可以在 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"))
VB   C#

结果是

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

从 HTML 生成 PDF 文件

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

也可在 如何在 IronPDF 中使用带字节数组的 HTML 文档或字符串

示例 2

本节将帮助定制例 1 中生成的 PDF。例如,它将为标准发票的 "打印 "媒体类型添加自定义页边距、带有文档标题的页眉、带有创建日期和印章的页脚、页码和一些自定义 CSS。为此,我们将初始化一个 ChromePdfRenderOptions 实例,并将其传入 ChromePdfRenderer 构造函数。

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);
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);
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)
VB   C#

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

var chromePdfRenderer = new ChromePdfRenderer();
chromePdfRenderer.RenderingOptions = pdfRenderingOptions;
var chromePdfRenderer = new ChromePdfRenderer();
chromePdfRenderer.RenderingOptions = pdfRenderingOptions;
Dim chromePdfRenderer As New ChromePdfRenderer()
chromePdfRenderer.RenderingOptions = pdfRenderingOptions
VB   C#

注: 页眉和页脚具有合并功能,这意味着所有合并字段 ({页码}, {总页数}, {网址}, {日期}, {时间}, {html-title}, {pdf标题}) 可以填充相应的数据。

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

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

生成带页眉和页脚的发票

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

步骤 4:RenderUrlAsPdf

设置

要运行本节中的示例,需要在本地托管 IronPDFDemo.DemoWebSite。要做到这一点,请使用 IIS Express:

1.导航至演示网站

2.右键单击 > 设置为启动项目

3.不调试启动 (Ctrl+F5)

4.导航至您的 {基址}/Static/TestInvoice1.html 以确保其正常工作。这是 URL http://localhost:51169/Static/TestInvoice1.html (如果您不更改相应的项目设置,您的项目设置将保持不变).

示例 1

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

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"));
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"));
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"))
VB   C#

结果是

在 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

var uri = new Uri("http://localhost:51169/Invoice");
var urlToPdf = new ChromePdfRenderer
{
    PrintOptions = new ChromePdfRenderer()
    {
        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
    },
    // setting 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"));
var uri = new Uri("http://localhost:51169/Invoice");
var urlToPdf = new ChromePdfRenderer
{
    PrintOptions = new ChromePdfRenderer()
    {
        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
    },
    // setting 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"));
Dim uri As New Uri("http://localhost:51169/Invoice")
Dim urlToPdf = New ChromePdfRenderer With {
	.PrintOptions = New ChromePdfRenderer() 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"))
VB   C#

*注: 与 ChromePdfRenderer 示例2 使用了相同的自定义功能。

结果是

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

生成带有 PDF 文件凭据的 HTML 网站

一切就绪。请在 IronPDFDemo.RenderUrlAsPdfDemo 项目下查看代码示例。如果你想知道在没有 HttpLoginCredentials 的情况下效果如何,请看这里:

在 C# 中从 HTML 文件创建 PDF,图 10:无需凭证即可生成空 PDF 文件

生成无凭证的空 PDF 文件

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

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

< 前一页
在C#中生成PDF文件
下一步 >
如何使用C#和IronPDF在ASP.NET中查看PDF文件

准备开始了吗? 版本: 2024.10 刚刚发布

免费NuGet下载 总下载量: 11,108,738 查看许可证 >