在 .NET Core 中将 HTML 转换为 PDF 的教程

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF

.NET Core PDF 生成器

创建 .NET Core PDF 文件是一项繁琐的任务。在 ASP.NET MVC 项目中使用 PDF,以及将 MVC 视图、HTML 文件和在线网页转换为 PDF 都是一项具有挑战性的工作。本教程使用 IronPDF 工具来解决这些问题,为您的许多 PDF .NET 需求提供指导。

IronPDF 还支持使用 Chrome 浏览器调试 HTML,以获得完美像素 PDF。设置教程如下 这里.


概述

学完本教程后,您将能够

  • 从 URL、HTML、MVC 视图等不同来源转换为 PDF
  • 使用用于不同输出 PDF 设置的高级选项
  • 将项目部署到 Linux 和 Windows
  • 使用 PDF 文档操作功能
  • 添加页眉和页脚、合并文件、添加印章
  • 使用 Dockers

这些广泛的 .NET Core HTML to PDF 功能将有助于满足各种项目需求。


步骤 1

1. 免费安装 IronPDF 库

适用于PDF的C# NuGet库

安装使用 NuGet

Install-Package IronPdf
Java PDF JAR

下载 DLL

下载DLL

手动安装到你的项目中

适用于PDF的C# NuGet库

安装使用 NuGet

Install-Package IronPdf
Java PDF JAR

下载 DLL

下载DLL

手动安装到你的项目中

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

第一步:
green arrow pointer

查看 IronPDFNuget 用于快速安装和部署。它有超过800万次下载,正在使用C#改变PDF。

适用于PDF的C# NuGet库 nuget.org/packages/IronPdf/
Install-Package IronPdf

考虑安装 IronPDF DLL 直接。下载并手动安装到您的项目或GAC表单中: IronPdf.zip

手动安装到你的项目中

下载DLL

IronPDF可以安装并使用在所有的.NET项目类型中,比如Windows应用程序、ASP.NET MVC和.NET Core应用程序。

将IronPDF库添加到我们的项目中有两种方法,可以从Visual Studio编辑器中使用NuGet安装,或者使用命令行通过包管理控制台进行安装。

使用 NuGet 安装

要使用 NuGet 将 IronPDF 库添加到我们的项目中,我们可以使用可视化界面 (NuGet 软件包管理器) 或使用软件包管理器控制台的命令:

1.1.1 使用 NuGet 软件包管理器

1- 右键点击项目名称 -> 选择管理 NuGet 包 2- 从浏览器选项卡 -> 搜索 IronPdf -> 安装 3- 单击确定 4- 完成!

1.1.2 使用 NuGet 软件包控制台管理器

1- 从工具 -> NuGet 软件包管理器 -> 软件包管理器控制台 2- 运行命令 -> 安装软件包 IronPdf


教程

2.将网站转换为 PDF

样本ConvertUrlToPdf 控制台应用程序

按照以下步骤创建新的 Asp.NET MVC 项目


1- 打开 Visual Studio 2- 选择创建新项目 3- 选择控制台应用程序(.NET Core) 4- 将样本命名为 "ConvertUrlToPdf",然后点击创建 5- 现在我们创建了一个控制台应用程序 6- 添加 IronPdf => 点击安装

7- 添加前几行,将维基百科网站主页渲染为 PDF 格式

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-1.cs
IronPdf.License.LicenseKey = "YourLicenseKey";
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderUrlAsPdf("https://www.wikipedia.org/");
pdf.SaveAs("wiki.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

8- 运行并检查创建的文件 wiki.pdf


3.将 .NET Core HTML 转换为 PDF

样本ConvertHTMLToPdf 控制台应用程序

要将 HTML 转换为 PDF,我们有两种方法:
1- 将 HTML 写入字符串,然后进行渲染
2- 将 HTML 写入文件并将其路径传递给 IronPDF 以进行渲染

渲染 HTML 字符串的示例代码将如下所示。

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-2.cs
IronPdf.License.LicenseKey = "YourLicenseKey";
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");
pdf.SaveAs("HtmlString.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

生成的 PDF 将是这样的


4.将 MVC 视图转换为 PDF

Sample:TicketsApps .NET Core MVC 应用程序

让我们来实现一个真实的例子。我选择了一个在线票务网站。打开网站,导航到 "订票",填写所需信息,然后下载 PDF 格式的副本。

我们将完成这些步骤:

创建项目

1.选择 "ASP.NET Core Web 应用程序 (模型-视图-控制器)"项目。

  1. 将项目命名为 "TicketsApps"。
  1. 让我们使用启用了 Linux Docker 的 .NET 8。在 Dockerfile 中,将 "USER app "改为 "USER root"。这将确保向库授予足够的权限。
  1. 现在可以了。

添加客户端模型

1.右击 "模型 "文件夹并添加类。

  1. 将模型命名为 "ClientModel",然后点击添加。
  1. 在 ClientModel 类中添加 "姓名"、"电话 "和 "电子邮件 "属性。如下所示,在每个属性上添加 "Required "属性,使它们都成为必填属性:
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-3.cs
public class ClientModel
{
    [Required]
    public string Name { get; set; }
    [Required]
    public string Phone { get; set; }
    [Required]
    public string Email { get; set; }
}
Public Class ClientModel
	<Required>
	Public Property Name() As String
	<Required>
	Public Property Phone() As String
	<Required>
	Public Property Email() As String
End Class
VB   C#

添加客户服务

1.创建一个文件夹,命名为 "服务"。

2.添加一个名为 "ClientServices "的类。

3.添加一个类型为 "ClientModel "的静态对象,将其用作存储库。

4.添加两个函数:一个用于将客户保存到存储库,另一个用于检索已保存的客户。

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-4.cs
public class ClientServices
{
    private static ClientModel _clientModel;
    public static void AddClient(ClientModel clientModel)
    {
        _clientModel = clientModel;
    }
    public static ClientModel GetClient()
    {
        return _clientModel;
    }
}
Public Class ClientServices
	Private Shared _clientModel As ClientModel
	Public Shared Sub AddClient(ByVal clientModel As ClientModel)
		_clientModel = clientModel
	End Sub
	Public Shared Function GetClient() As ClientModel
		Return _clientModel
	End Function
End Class
VB   C#

设计订票页面

1.在解决方案资源管理器中,右键单击 "控制器 "文件夹并添加控制器。

  1. 将其命名为 "BookTicketController"。
  1. 右击索引功能 (我们称之为行动) 并选择 "添加视图"。
  1. 添加名为 "索引 "的视图。
  1. 更新 HTML 如下
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-5.cs
@model IronPdfMVCHelloWorld.Models.ClientModel
@{
  ViewBag.Title = "Book Ticket";
}
<h2>Index</h2>
@using (Html.BeginForm())
{
  <div class="form-horizontal">
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group">
      @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
      <div class="col-md-10">
        @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
      </div>
    </div>
    <div class="form-group">
      @Html.LabelFor(model => model.Phone, htmlAttributes: new { @class = "control-label col-md-2" })
      <div class="col-md-10">
        @Html.EditorFor(model => model.Phone, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Phone, "", new { @class = "text-danger" })
      </div>
    </div>
    <div class="form-group">
      @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
      <div class="col-md-10">
        @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
      </div>
    </div>
    <div class="form-group">
      <div class="col-md-10 pull-right">
        <button type="submit" value="Save" class="btn btn-sm">
          <i class="fa fa-plus"></i>
          <span>
            Save
          </span>
        </button>
      </div>
    </div>
  </div>
}
model ReadOnly Property () As IronPdfMVCHelloWorld.Models.ClientModel
  ViewBag.Title = "Book Ticket"
End Property
'INSTANT VB TODO TASK: The following line could not be converted:
(Of h2) Index</h2> [using](Html.BeginForm())
If True Then
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'  <div class="form-horizontal"> @Html.ValidationSummary(True, "", New { @class = "text-danger" }) <div class="form-group"> @Html.LabelFor(model => model.Name, htmlAttributes: New { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Name, New { htmlAttributes = New { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Name, "", New { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Phone, htmlAttributes: New { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Phone, New { htmlAttributes = New { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Phone, "", New { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Email, htmlAttributes: New { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Email, New { htmlAttributes = New { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Email, "", New { @class = "text-danger" }) </div> </div> <div class="form-group"> <div class="col-md-10 pull-right"> <button type="submit" value="Save" class="btn btn-sm"> <i class="fa fa-plus"></i> <span> Save </span> </button> </div> </div> </div> }
VB   C#
  1. 添加导航链接,使网站访问者能够导航到我们的新预订页面。这可以通过更新现有路径的布局来实现 (视图 -> 共享 -> _Layout.cshtml).添加以下代码
<li class="nav-item">
    <a
        class="nav-link text-dark"
        asp-area=""
        asp-controller="BookTicket"
        asp-action="Index"
        >Book Ticket</a
    >
</li>
<li class="nav-item">
    <a
        class="nav-link text-dark"
        asp-area=""
        asp-controller="BookTicket"
        asp-action="Index"
        >Book Ticket</a
    >
</li>
HTML
  1. 结果应该是这样的
  1. 导航至 "预订车票 "页面。您会发现它看起来像这样:

验证并保存预订信息

1.添加另一个索引操作,其属性为 [HttpPost] 以告知 MVC 引擎该操作用于提交数据。验证发送的模型,如果有效,代码将把访问者重定向到 TicketView 页面。如果无效,访问者将在屏幕上收到错误验证信息。

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-7.cs
[HttpPost]
public ActionResult Index(ClientModel model)
{
    if (ModelState.IsValid)
    {
        ClientServices.AddClient(model);
        return RedirectToAction("TicketView");
    }
  return View(model);
}
<HttpPost>
Public Function Index(ByVal model As ClientModel) As ActionResult
	If ModelState.IsValid Then
		ClientServices.AddClient(model)
		Return RedirectToAction("TicketView")
	End If
  Return View(model)
End Function
VB   C#

错误信息示例

  1. 在 "模型 "文件中创建一个票据模型,并添加如下代码
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-9.cs
public class TicketModel : ClientModel
{
    public int TicketNumber { get; set; }
    public DateTime TicketDate { get; set; }
}
Public Class TicketModel
	Inherits ClientModel

	Public Property TicketNumber() As Integer
	Public Property TicketDate() As DateTime
End Class
VB   C#
  1. 添加 TicketView 来显示我们的票据。该视图将包含一个负责显示门票的门票部分视图,稍后将用于打印门票。
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-8.cs
public ActionResult TicketView()
{
    var rand = new Random();
    var client = ClientServices.GetClient();
    var ticket = new TicketModel()
    {
        TicketNumber = rand.Next(100000, 999999),
        TicketDate = DateTime.Now,
        Email = client.Email,
        Name = client.Name,
        Phone = client.Phone
    };

    return View(ticket);
}
Public Function TicketView() As ActionResult
	Dim rand = New Random()
	Dim client = ClientServices.GetClient()
	Dim ticket = New TicketModel() With {
		.TicketNumber = rand.Next(100000, 999999),
		.TicketDate = DateTime.Now,
		.Email = client.Email,
		.Name = client.Name,
		.Phone = client.Phone
	}

	Return View(ticket)
End Function
VB   C#
  1. 右键单击 TicketView 函数,选择 "添加视图 "并命名为 "TicketView"。添加以下代码
@model TicketsApps.Models.TicketModel @{ ViewData["Title"] = "TicketView"; }
@Html.Partial("_TicketPdf", Model) @using (Html.BeginForm()) { @Html.HiddenFor(c
=> c.Email) @Html.HiddenFor(c => c.Name) @Html.HiddenFor(c => c.Phone)
@Html.HiddenFor(c => c.TicketDate) @Html.HiddenFor(c => c.TicketNumber)

<div class="form-group">
    <div class="col-md-10 pull-right">
        <button type="submit" value="Save" class="btn btn-sm">
            <i class="fa fa-plus"></i>
            <span> Download Pdf </span>
        </button>
    </div>
</div>
}
@model TicketsApps.Models.TicketModel @{ ViewData["Title"] = "TicketView"; }
@Html.Partial("_TicketPdf", Model) @using (Html.BeginForm()) { @Html.HiddenFor(c
=> c.Email) @Html.HiddenFor(c => c.Name) @Html.HiddenFor(c => c.Phone)
@Html.HiddenFor(c => c.TicketDate) @Html.HiddenFor(c => c.TicketNumber)

<div class="form-group">
    <div class="col-md-10 pull-right">
        <button type="submit" value="Save" class="btn btn-sm">
            <i class="fa fa-plus"></i>
            <span> Download Pdf </span>
        </button>
    </div>
</div>
}
HTML
  1. 右键单击 BookTicket 文件,添加另一个视图并命名为"_TicketPdf"。添加以下代码
@model TicketsApps.Models.TicketModel @{ Layout = null; }
<link href="../css/ticket.css" rel="stylesheet" />
<div class="ticket">
    <div class="stub">
        <div class="top">
            <span class="admit">VIP</span>
            <span class="line"></span>
            <span class="num">
                @Model.TicketNumber
                <span> Ticket</span>
            </span>
        </div>
        <div class="number">1</div>
        <div class="invite">Room Number</div>
    </div>
    <div class="check">
        <div class="big">
            Your <br />
            Ticket
        </div>
        <div class="number">VIP</div>
        <div class="info">
            <section>
                <div class="title">Date</div>
                <div>@Model.TicketDate.ToShortDateString()</div>
            </section>
            <section>
                <div class="title">Issued By</div>
                <div>Admin</div>
            </section>
            <section>
                <div class="title">Invite Number</div>
                <div>@Model.TicketNumber</div>
            </section>
        </div>
    </div>
</div>
@model TicketsApps.Models.TicketModel @{ Layout = null; }
<link href="../css/ticket.css" rel="stylesheet" />
<div class="ticket">
    <div class="stub">
        <div class="top">
            <span class="admit">VIP</span>
            <span class="line"></span>
            <span class="num">
                @Model.TicketNumber
                <span> Ticket</span>
            </span>
        </div>
        <div class="number">1</div>
        <div class="invite">Room Number</div>
    </div>
    <div class="check">
        <div class="big">
            Your <br />
            Ticket
        </div>
        <div class="number">VIP</div>
        <div class="info">
            <section>
                <div class="title">Date</div>
                <div>@Model.TicketDate.ToShortDateString()</div>
            </section>
            <section>
                <div class="title">Issued By</div>
                <div>Admin</div>
            </section>
            <section>
                <div class="title">Invite Number</div>
                <div>@Model.TicketNumber</div>
            </section>
        </div>
    </div>
</div>
HTML

6.添加以下"ticket.css"文件中的 "wwwroot/css "文件。

7.将 IronPDF 添加到项目中并同意许可证。

  1. 添加将处理下载按钮的 TicketView post 方法。
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-10.cs
[HttpPost]
public ActionResult TicketView(TicketModel model)
{
    IronPdf.License.LicenseKey = "YourLicenseKey";
    IronPdf.Installation.TempFolderPath = $@"{Directory.GetParent}/irontemp/";
    IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
    var html = this.RenderViewAsync("_TicketPdf", model);
    var renderer = new IronPdf.ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(html.Result, @"wwwroot/css");
    return File(pdf.Stream.ToArray(), "application/pdf");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#
  1. 在 "Controller "文件中创建一个控制器,并将其命名为 "ControllerExtensions"。该控制器将把部分视图渲染为字符串。使用扩展代码如下:
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-11.cs
using System.IO;
using System.Threading.Tasks;

public static class ControllerExtensions
{
    public static async Task<string> RenderViewAsync<TModel>(this Controller controller, string viewName, TModel model, bool partial = false)
    {
        if (string.IsNullOrEmpty(viewName))
        {
            viewName = controller.ControllerContext.ActionDescriptor.ActionName;
        }
        controller.ViewData.Model = model;
        using (var writer = new StringWriter())
        {
            IViewEngine viewEngine = controller.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine;
            ViewEngineResult viewResult = viewEngine.FindView(controller.ControllerContext, viewName, !partial);
            if (viewResult.Success == false)
            {
                return $"A view with the name {viewName} could not be found";
            }
            ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer, new HtmlHelperOptions());
            await viewResult.View.RenderAsync(viewContext);
            return writer.GetStringBuilder().ToString();
        }
    }
}
Imports System.IO
Imports System.Threading.Tasks

Public Module ControllerExtensions
	<System.Runtime.CompilerServices.Extension> _
	Public Async Function RenderViewAsync(Of TModel)(ByVal controller As Controller, ByVal viewName As String, ByVal model As TModel, Optional ByVal As Boolean = False) As Task(Of String)
		If String.IsNullOrEmpty(viewName) Then
			viewName = controller.ControllerContext.ActionDescriptor.ActionName
		End If
		controller.ViewData.Model = model
		Using writer = New StringWriter()
			Dim viewEngine As IViewEngine = TryCast(controller.HttpContext.RequestServices.GetService(GetType(ICompositeViewEngine)), ICompositeViewEngine)
			Dim viewResult As ViewEngineResult = viewEngine.FindView(controller.ControllerContext, viewName, Not partial)
			If viewResult.Success = False Then
				Return $"A view with the name {viewName} could not be found"
			End If
			Dim viewContext As New ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer, New HtmlHelperOptions())
			Await viewResult.View.RenderAsync(viewContext)
			Return writer.GetStringBuilder().ToString()
		End Using
	End Function
End Module
VB   C#
  1. 运行申请并填写机票信息,然后点击 "保存"。
  1. 查看生成的票据

下载 PDF 票

要下载 PDF 格式的入场券,请单击 "下载 PDF"。您将收到一份包含入场券的 PDF 文件。

您可以下载本指南的完整代码。它是一个压缩文件,可以在 Visual Studio 中打开。 点击此处下载项目。


5. .NET PDF 渲染选项图

我们有一些高级选项来定义 PDF 渲染选项,如调整页边距、

纸张方向、纸张大小等。

下面的表格说明了许多不同的选项。

班级ChromePdfRenderer
说明用于定义 PDF 打印选项,如纸张大小、DPI、页眉和页脚
属性/功能类型说明
自定义 CookiesDictionary<字符串, 字符串>;用于 HTML 渲染的自定义 Cookie。Cookie 不会在两次渲染之间持续存在,每次都必须设置。
PaperFit虚拟纸张布局管理器这是一款用于设置虚拟纸张布局的管理器,可控制 PDF "纸张 "页面的内容布局。包括默认 Chrome 浏览器行为、缩放、响应式 CSS3 布局、缩放至页面 & 连续进纸式 PDF 页面设置等选项。
在页眉和页脚使用边距使用边距在渲染页眉和页脚时,使用主文档中的页边距值。
从 HTML 创建 PDFFormsFromHtmlbool将所有 HTML 表单元素转化为可编辑的 PDF 表单。默认值为 true。
CssMedia类型PdfCssMedia类型Enables Media="screen" CSS Styles and StyleSheets. Default value is PdfCssMedia类型.Screen.
自定义 CSSUrl字符串允许在呈现之前将自定义 CSS 样式表应用于 HTML。可以是本地文件路径或远程 URL。仅适用于将 HTML 呈现为 PDF 时。
启用 JavaScriptbool可在页面渲染前执行 JavaScript 和 JSON。非常适合从 Ajax / Angular 应用程序打印。默认值为 false。
启用数学语言版本bool启用数学 LaTeX 元素的渲染。
Javascript字符串A custom JavaScript 字符串 to be executed after all HTML has loaded but before PDF rendering.
JavascriptMessageListener字符串Delegate浏览器 JavaScript 控制台消息可用时调用的方法回调。
首页编号intPDF 页眉和页脚中使用的第一个页码。默认值为 1。
目录目录类型s在 HTML 文档中找到 id 为 "ironpdf-toc "元素的位置生成目录。
灰度bool输出黑白 PDF。默认值为假。
文本标题I文本标题Footer将每个 PDF 页面的页脚内容设置为文本,支持 "邮件合并 "并自动将 URL 转变为超链接。
文本页脚
标题标题Footer将每个 PDF 页面的页眉内容设置为 HTML。支持 "邮件合并"。
HtmlFooter
输入编码编码The input character encoding as a 字符串. Default value is 编码.UTF8.
边距顶部双人PDF 顶部 "纸张 "页边距,单位为毫米。对于无边框和商业印刷应用,设置为零。默认值为 25。
右边距双人PDF 右 "纸 "边距,单位为毫米。对于无边框和商业印刷应用,设置为零。默认值为 25。
底部边距双人PDF 底部 "纸张 "边距,单位为毫米。对于无边框和商业印刷应用,设置为零。默认值为 25。
左侧边距双人PDF 左 "纸 "边距,单位为毫米。对于无边框和商业印刷应用,设置为零。默认值为 25。
纸张方向Pdf纸张方向PDF 纸张方向,如纵向或横向。默认值为纵向。
纸张尺寸Pdf纸张尺寸设置纸张大小
SetCustom纸张尺寸inCentimeters双人设置纸张大小 in centimeters.
SetCustom纸张尺寸InInches设置纸张大小 in inches.
SetCustom纸张尺寸inMilimeters设置纸张大小 in millimeters.
SetCustom纸张尺寸inPixelsOrPoints设置纸张大小 in screen pixels or printer points.
打印 HTML 背景布尔型表示是否从 HTML 打印背景颜色和图像。默认值为 true。
请求上下文请求上下文s该呈现的请求上下文,决定某些资源(如 cookie)的隔离。
超时整数渲染超时(秒)。默认值为 60。
标题字符串PDF Document Name and 标题 metadata, useful for mail-merge and automatic file naming in the IronPdf MVC and Razor extensions.
Force纸张尺寸布尔型Force page sizes to be exactly what is specified via IronPdf.ChromePdfRenderOptions.纸张尺寸 by resizing the page after generating a PDF from HTML. Helps correct small errors in page size when rendering HTML to PDF.
等待等待封装对象,用于保存等待机制的配置,以便用户在渲染前等待特定事件。默认情况下,它不会等待任何事件。

6. .NET PDF 页眉页脚选项图表

班级文本页眉页脚
说明用于定义文本页眉和页脚显示选项
特性 (函数类型说明
居中文本字符串Set the text in centered/left/right of PDF header or footer. Can also merge metadata using 字符串s placeholders: {page}, {total-pages}, {url}, {date}, {time}, {html-title}, {pdf-title}
左侧文本
右侧文本
绘制分割线布尔型在 PDF 文档的每一页页眉/页脚和页面内容之间添加水平线分隔线。
绘制分割线颜色颜色The color of the divider line specified for IronPdf.文本页眉页脚.绘制分割线.
字体Pdf字体字体 family used for the PDF document. Default is IronSoftware.Drawing.字体类型s.Helvetica.
字体Size双人字体 size in pixels.

7.应用 PDF 打印 (效果图) 选项

让我们尝试配置 PDF 渲染选项。

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-12.cs
IronPdf.License.LicenseKey = "YourLicenseKey";
ChromePdfRenderer renderer = new ChromePdfRenderer();

// Set rendering options
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Portrait;

renderer.RenderHtmlFileAsPdf(@"testFile.html").SaveAs("GeneratedFile.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

8.Docker .NET Core 应用程序

8.1.什么是 Docker?

Docker 是一套平台即服务产品,它使用操作系统级虚拟化技术,以称为容器的软件包提供软件。容器之间相互隔离,并捆绑自己的软件、库和配置文件;它们可以通过定义明确的通道相互通信。

您可以了解 Docker 和 ASP.NET Core 应用程序 这里。

我们将跳过使用 Docker,但如果你想了解更多,这里有一个很好的介绍。 这里是 .NET 和 Docker。 以及更多关于如何 为 .NET core 应用程序构建容器.

让我们一起开始使用 Docker。

8.2.安装 Docker

访问 Docker 网站 安装 Docker。

点击开始。

点击下载 Mac 和 Windows 版。

免费注册,然后登录。

下载 Windows 版 Docker

开始安装 Docker

这需要重新启动。机器重启后,登录 Docker。

现在,您可以打开 Windows 命令行或 PowerShell 脚本并编写,运行 Docker "hello world":

Docker run hello-world

以下是最重要的命令行列表,希望对您有所帮助:

  • Docker 映像 => 列出本机上所有可用的映像
  • Docker ps => 列出所有正在运行的容器

  • Docker ps -a => 列出所有容器

8.3.运行到 Linux 容器中


9.处理现有 PDF 文档

9.1.打开现有 PDF

从 URL 和 HTML 创建 PDF (文本或文件)此外,您还可以处理现有的 PDF 文档。

下面是打开普通 PDF 或带密码加密 PDF 的示例

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-13.cs
IronPdf.License.LicenseKey = "YourLicenseKey";

// Open an unencrypted pdf
PdfDocument unencryptedPdf = PdfDocument.FromFile("testFile.pdf");

// Open an encrypted pdf
PdfDocument encryptedPdf = PdfDocument.FromFile("testFile2.pdf", "MyPassword");
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

9.2.合并多个 PDF

您可以按以下方式将多个 PDF 文件合并为一个 PDF 文件:

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-14.cs
IronPdf.License.LicenseKey = "YourLicenseKey";

List<PdfDocument> PDFs = new List<PdfDocument>();
PDFs.Add(PdfDocument.FromFile("1.pdf"));
PDFs.Add(PdfDocument.FromFile("2.pdf"));
PDFs.Add(PdfDocument.FromFile("3.pdf"));

using PdfDocument PDF = PdfDocument.Merge(PDFs);
PDF.SaveAs("mergedFile.pdf");

foreach (PdfDocument pdf in PDFs)
{
    pdf.Dispose();
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

在当前 PDF 的末尾添加另一个 PDF,如下所示:

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-15.cs
IronPdf.License.LicenseKey = "YourLicenseKey";

PdfDocument pdf = PdfDocument.FromFile("1.pdf");
PdfDocument pdf2 = PdfDocument.FromFile("2.pdf");

pdf.AppendPdf(pdf2);
pdf.SaveAs("appendedFile.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

从给定的索引开始,将 PDF 插入另一个 PDF:

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-16.cs
IronPdf.License.LicenseKey = "YourLicenseKey";

PdfDocument pdf = PdfDocument.FromFile("1.pdf");
PdfDocument pdf2 = PdfDocument.FromFile("2.pdf");
pdf.InsertPdf(pdf2, 0);
pdf.SaveAs("InsertIntoSpecificIndex.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

9.3 添加页眉或页脚

您可以为现有 PDF 添加页眉和页脚,也可以在从 HTML 或 URL 呈现 PDF 时添加页眉和页脚。

您可以使用两个类别为 PDF 添加页眉或页脚:

  • TextHeaderFooter:在页眉或页脚中添加简单文本。
  • HtmlHeaderFooter:在页眉或页脚中添加丰富的 HTML 内容和图片。

现在,让我们看两个例子,说明如何在现有 pdf 中添加页眉/页脚,或在使用这两个类渲染 pdf 时添加页眉/页脚。

9.3.1 为现有 pdf 添加页眉

下面是一个加载现有 PDF 的示例,然后使用 AddTextHeadersAddHtmlFooters 方法添加页眉和页脚。

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-17.cs
IronPdf.License.LicenseKey = "YourLicenseKey";

PdfDocument pdf = PdfDocument.FromFile("testFile.pdf");
TextHeaderFooter header = new TextHeaderFooter()
{
    CenterText = "Pdf Header",
    LeftText = "{date} {time}",
    RightText = "{page} of {total-pages}",
    DrawDividerLine = true,
    FontSize = 10
};
pdf.AddTextHeaders(header);
pdf.SaveAs("withHeader.pdf");

HtmlHeaderFooter Footer = new HtmlHeaderFooter()
{
    HtmlFragment = "<span style='text-align:right'> page {page} of {totalpages}</span>",
    DrawDividerLine = true,
    MaxHeight = 10 //mm
};
pdf.AddHtmlFooters(Footer);
pdf.SaveAs("withHeaderAndFooters.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

9.3.2 为新 pdf 添加页眉和页脚

下面是一个从 HTML 文件创建 PDF 并使用渲染选项添加页眉和页脚的示例。

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-18.cs
IronPdf.License.LicenseKey = "YourLicenseKey";

ChromePdfRenderer renderer = new ChromePdfRenderer();
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
    CenterText = "Pdf Header",
    LeftText = "{date} {time}",
    RightText = "{page} of {total-pages}",
    DrawDividerLine = true,
    FontSize = 10
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
    HtmlFragment = "<span style='text-align:right'> page {page} of {totalpages}</span>",
    DrawDividerLine = true,
    MaxHeight = 10
};

PdfDocument pdf = renderer.RenderHtmlFileAsPdf("test.html");
pdf.SaveAs("generatedFile.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

10.添加 PDF 密码和安全性

您可以为 PDF 文件设置密码和编辑文件安全设置,如防止复制和打印。

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-19.cs
IronPdf.License.LicenseKey = "YourLicenseKey";

PdfDocument pdf = PdfDocument.FromFile("testFile.pdf");

// Edit file metadata
pdf.MetaData.Author = "john smith";
pdf.MetaData.Keywords = "SEO, Friendly";
pdf.MetaData.ModifiedDate = DateTime.Now;

// Edit file security settings
// The following code makes a PDF read only and will disallow copy & paste and printing
pdf.SecuritySettings.RemovePasswordsAndEncryption();
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key"); //secret-key is a owner password
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserFormData = false;
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;

// Change or set the document ecrpytion password
pdf.Password = "123";
pdf.SaveAs("secured.pdf");
IronPdf.License.LicenseKey = "YourLicenseKey"

Dim pdf As PdfDocument = PdfDocument.FromFile("testFile.pdf")

' Edit file metadata
pdf.MetaData.Author = "john smith"
pdf.MetaData.Keywords = "SEO, Friendly"
pdf.MetaData.ModifiedDate = DateTime.Now

' Edit file security settings
' The following code makes a PDF read only and will disallow copy & paste and printing
pdf.SecuritySettings.RemovePasswordsAndEncryption()
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key") 'secret-key is a owner password
pdf.SecuritySettings.AllowUserAnnotations = False
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserFormData = False
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights

' Change or set the document ecrpytion password
pdf.Password = "123"
pdf.SaveAs("secured.pdf")
VB   C#

11.对 PDF 文件进行数字签名

您还可以按以下方式对 PDF 进行数字签名:

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-20.cs
IronPdf.License.LicenseKey = "YourLicenseKey";

PdfDocument pdf = PdfDocument.FromFile("testFile.pdf");
pdf.Sign(new PdfSignature("cert123.pfx", "password"), IronPdf.Signing.SignaturePermissions.Default);
pdf.SaveAs("signed.pdf");
IronPdf.License.LicenseKey = "YourLicenseKey"

Dim pdf As PdfDocument = PdfDocument.FromFile("testFile.pdf")
pdf.Sign(New PdfSignature("cert123.pfx", "password"), IronPdf.Signing.SignaturePermissions.Default)
pdf.SaveAs("signed.pdf")
VB   C#

高级示例可实现更多控制:

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-21.cs
IronPdf.License.LicenseKey = "YourLicenseKey";

PdfDocument pdf = PdfDocument.FromFile("testFile.pdf");
IronPdf.Signing.PdfSignature signature = new IronPdf.Signing.PdfSignature("cert123.pfx", "123");

// Optional signing options
signature.SigningContact = "support@ironsoftware.com";
signature.SigningLocation = "Chicago, USA";
signature.SigningReason = "To show how to sign a PDF";

// Sign the PDF with the PdfSignature. Multiple signing certificates may be used
pdf.Sign(signature);
IronPdf.License.LicenseKey = "YourLicenseKey"

Dim pdf As PdfDocument = PdfDocument.FromFile("testFile.pdf")
Dim signature As New IronPdf.Signing.PdfSignature("cert123.pfx", "123")

' Optional signing options
signature.SigningContact = "support@ironsoftware.com"
signature.SigningLocation = "Chicago, USA"
signature.SigningReason = "To show how to sign a PDF"

' Sign the PDF with the PdfSignature. Multiple signing certificates may be used
pdf.Sign(signature)
VB   C#

12.从 PDF 中提取文本和图像

提取文本和图像 使用 IronPdf,您可以从 PDF 中提取文本和图像,具体方法如下:

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-22.cs
IronPdf.License.LicenseKey = "YourLicenseKey";
PdfDocument pdf = PdfDocument.FromFile("testFile.pdf");

pdf.ExtractAllText(); // Extract all text in the pdf
pdf.ExtractTextFromPage(0); // Read text from specific page

// Extract all images in the pdf
var AllImages = pdf.ExtractAllImages();

// Extract images from specific page
var ImagesOfAPage = pdf.ExtractImagesFromPage(0);
IronPdf.License.LicenseKey = "YourLicenseKey"
Dim pdf As PdfDocument = PdfDocument.FromFile("testFile.pdf")

pdf.ExtractAllText() ' Extract all text in the pdf
pdf.ExtractTextFromPage(0) ' Read text from specific page

' Extract all images in the pdf
Dim AllImages = pdf.ExtractAllImages()

' Extract images from specific page
Dim ImagesOfAPage = pdf.ExtractImagesFromPage(0)
VB   C#

12.1.将 PDF 栅格化为图像

您还可以按以下方式将 PDF 页面转换为图像

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-23.cs
IronPdf.License.LicenseKey = "YourLicenseKey";
PdfDocument pdf = PdfDocument.FromFile("testFile.pdf");

List<int> pageList = new List<int>() { 1, 2 };

pdf.RasterizeToImageFiles("*.png", pageList);
IronPdf.License.LicenseKey = "YourLicenseKey"
Dim pdf As PdfDocument = PdfDocument.FromFile("testFile.pdf")

Dim pageList As New List(Of Integer)() From {1, 2}

pdf.RasterizeToImageFiles("*.png", pageList)
VB   C#

13. Add PDF Watermark

The following is an example of how to watermark PDF pages.

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-24.cs
IronPdf.License.LicenseKey = "YourLicenseKey";

ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");

// Apply watermark
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center);
pdf.SaveAs("Watermarked.pdf");
IronPdf.License.LicenseKey = "YourLicenseKey"

Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf")

' Apply watermark
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center)
pdf.SaveAs("Watermarked.pdf")
VB   C#

水印的选项和功能受到限制。要获得更强的控制能力,可以使用 HTMLStamper 类。

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-25.cs
IronPdf.License.LicenseKey = "YourLicenseKey";

ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<div>test text </div>");

// Configure HTML stamper
HtmlStamper backgroundStamp = new HtmlStamper()
{
    Html = "<h2 style='color:red'>copyright 2018 ironpdf.com",
    MaxWidth = new Length(20),
    MaxHeight = new Length(20),
    Opacity = 50,
    Rotation = -45,
    IsStampBehindContent = true,
    VerticalAlignment = VerticalAlignment.Middle
};

pdf.ApplyStamp(backgroundStamp);
pdf.SaveAs("stamped.pdf");
IronPdf.License.LicenseKey = "YourLicenseKey"

Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<div>test text </div>")

' Configure HTML stamper
Dim backgroundStamp As New HtmlStamper() With {
	.Html = "<h2 style='color:red'>copyright 2018 ironpdf.com",
	.MaxWidth = New Length(20),
	.MaxHeight = New Length(20),
	.Opacity = 50,
	.Rotation = -45,
	.IsStampBehindContent = True,
	.VerticalAlignment = VerticalAlignment.Middle
}

pdf.ApplyStamp(backgroundStamp)
pdf.SaveAs("stamped.pdf")
VB   C#

教程快速访问

获取源代码

以 Visual Studio 项目 ZIP 文件的形式访问本教程中的所有源代码,方便您在项目中使用和共享。

获取代码

访问 GitHub 教程

通过 GitHub 探索本教程和更多内容。使用项目和源代码是学习并将其应用于您自己的 PDF .NET Core 需求和用例的最佳方式。

在 .NET Core 中生成 PDF 教程

保留 PDF CSharp Cheat Sheet

使用我们方便的参考文档在您的 .NET 应用程序中开发 PDFS。通过快速访问常用函数和示例来在 C# 和 VB.NET 中生成和编辑 PDF,这个可共享的工具可帮助您节省开始使用 IronPDF 和项目中常见 PDF 需求所需的时间和精力。

保存小抄

更多文档

阅读《IronPDF API 参考》,其中详细介绍了 IronPDF 的所有功能,以及命名空间、类、方法字段和枚举。

应用程序接口参考文档