.NET Core 中的 HTML 转 PDF 转换(2024 更新教程)

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

.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 文档操作功能
  • 添加页眉和页脚、合并文件、添加印章
  • 使用Docker

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

    开始使用IronPDF

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

    第一步:
    green arrow pointer


步骤 1

1. 免费安装 IronPDF 库

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

要将 IronPDF 库添加到我们的项目中有两种方式,一种是通过 Visual Studio 编辑器使用 NuGet 进行安装,另一种是使用包管理控制台通过命令行进行安装。

使用 NuGet 安装

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

.1.1 使用 NuGet 软件包管理器

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

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

- 从工具 -> NuGet 软件包管理器 -> 软件包管理器控制台 5 related to 使用 NuGet 安装- 运行命令 -> 安装软件包 IronPdf 6 related to 使用 NuGet 安装


教程

2.将网站转换为 PDF

样本ConvertUrlToPdf 控制台应用程序

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


- 打开 Visual Studio 7 related to 2.将网站转换为 PDF- 选择创建新项目 8 related to 2.将网站转换为 PDF- 选择控制台应用程序(.NET Core) 9 related to 2.将网站转换为 PDF- 将样本命名为 "ConvertUrlToPdf",然后点击创建 10 related to 2.将网站转换为 PDF- 现在我们创建了一个控制台应用程序 11 related to 2.将网站转换为 PDF- 添加 IronPdf => 点击安装 12 related to 2.将网站转换为 PDF13 related to 2.将网站转换为 PDF

- 添加前几行,将维基百科网站主页渲染为 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#

- 运行并检查创建的文件 wiki.pdf 14 related to 2.将网站转换为 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 将是这样的

15 related to 3.将 .NET Core HTML 转换为 PDF


4. 将MVC视图转换为PDF

示例:TicketsApps .NET Core MVC 应用程序

让我们实施一个现实生活中的例子。 我选择了一个在线购票网站。打开网站,导航至“预订票务”页面,填写所需信息,然后将您的票据下载为PDF文件。

我们将遵循以下步骤:

创建项目

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

    16 related to 创建项目
  2. 将项目命名为 "TicketsApps"。

    17 related to 创建项目
  3. 让我们使用启用了 Linux Docker 的 .NET 8。 在Dockerfile中,将“USER app”更改为“USER root”。 这将确保库获得足够的权限。

    18 related to 创建项目
  4. 现在可以了。 19 related to 创建项目

添加客户端模型

  1. 右键单击“Models”文件夹并添加类。

    20 related to 添加客户端模型
  2. 将模型命名为 "ClientModel",然后点击添加。

    21 related to 添加客户端模型
  3. 将属性'name'、'phone'和'email'添加到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. 创建一个文件夹并将其命名为“services”。

  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. 在解决方案资源管理器中,右键单击“Controllers”文件夹并添加一个控制器。

    22 related to 设计订票页面
  2. 将其命名为 "BookTicketController"。

    23 related to 设计订票页面
  3. 右击索引功能(我们称之为行动)并选择 "添加视图"。

    24 related to 设计订票页面
  4. 添加名为 "索引 "的视图。

    25 related to 设计订票页面
  5. 更新 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. 结果应该是这样的

    26 related to 设计订票页面
  2. 导航至“预订票务”页面。 您应该会发现它看起来是这样的: 27 related to 设计订票页面

验证并保存预订信息

  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#

错误信息示例 28 related to 验证并保存预订信息

  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添加到我们的票证显示。 此视图将托管一个Ticket局部视图,该视图负责显示票据,并将用于稍后打印票据。
: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
  1. 添加以下内容:"ticket.css"wwwroot/css"文件中的文件。

  2. 将 IronPDF 添加到项目中并同意许可协议。

    31 related to 验证并保存预订信息
  3. 添加将处理下载按钮的 TicketView post 方法。
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-10.cs
[HttpPost]
public ActionResult TicketView(TicketModel model)
{
    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");
}
<HttpPost>
Public Function TicketView(ByVal model As TicketModel) As ActionResult
	IronPdf.Installation.TempFolderPath = $"{AddressOf Directory.GetParent}/irontemp/"
	IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True
	Dim html = Me.RenderViewAsync("_TicketPdf", model)
	Dim renderer = New IronPdf.ChromePdfRenderer()
	Dim pdf = renderer.RenderHtmlAsPdf(html.Result, "wwwroot/css")
	Return File(pdf.Stream.ToArray(), "application/pdf")
End Function
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. 运行申请并填写机票信息,然后点击 "保存"。

    32 related to 验证并保存预订信息
  2. 查看生成的票据 33 related to 验证并保存预订信息

下载 PDF 文件

要将票证下载为PDF格式,请点击“下载PDF”。 您将收到一份包含门票的PDF文件。

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


5. .NET PDF 渲染选项图表

我们有一些高级选项可以定义PDF呈现选项,例如调整页边距,

纸张方向、纸张尺寸等。

下表展示了多种不同的选项。

班级ChromePdfRenderer
说明用于定义 PDF 打印选项,如纸张大小、DPI、页眉和页脚
属性/功能类型说明
自定义 CookiesDictionary<string, string>;用于 HTML 渲染的自定义 Cookie。Cookie 不会在两次渲染之间持续存在,每次都必须设置。
PaperFit虚拟纸张布局管理器这是一款用于设置虚拟纸张布局的管理器,可控制 PDF "纸张 "页面的内容布局。包括默认 Chrome 浏览器行为、缩放、响应式 CSS3 布局、缩放至页面 & 连续进纸式 PDF 页面设置等选项。
在页眉和页脚使用边距使用边距在渲染页眉和页脚时,使用主文档中的页边距值。
从 HTML 创建 PDFFormsFromHtmlbool将所有 HTML 表单元素转化为可编辑的 PDF 表单。默认值为 true。
CssMediaTypePdfCssMediaType启用 Media="screen" CSS 样式和样式表。默认值为 PdfCssMediaType.Screen。
自定义 CSSUrl字符串允许在呈现之前将自定义 CSS 样式表应用于 HTML。可以是本地文件路径或远程 URL。仅适用于将 HTML 呈现为 PDF 时。
启用 JavaScriptbool可在页面渲染前执行 JavaScript 和 JSON。非常适合从 Ajax / Angular 应用程序打印。默认值为 false。
启用数学语言版本bool启用数学 LaTeX 元素的渲染。
Javascript字符串自定义 JavaScript 字符串,将在加载所有 HTML 之后、PDF 渲染之前执行。
JavascriptMessageListenerStringDelegate浏览器 JavaScript 控制台消息可用时调用的方法回调。
首页编号intPDF 页眉和页脚中使用的第一个页码。默认值为 1。
目录内容表类型在 HTML 文档中找到 id 为 "ironpdf-toc "元素的位置生成目录。
灰度bool输出黑白 PDF。默认值为假。
文本标题ITextHeaderFooter将每个 PDF 页面的页脚内容设置为文本,支持 "邮件合并 "并自动将 URL 转变为超链接。
文本页脚
标题HtmlHeaderFooter将每个 PDF 页面的页眉内容设置为 HTML。支持 "邮件合并"。
HtmlFooter
输入编码编码字符串形式的输入字符编码。默认值为 Encoding.UTF8。
边距顶部双人PDF 顶部 "纸张 "页边距,单位为毫米。对于无边框和商业印刷应用,设置为零。默认值为 25。
右边距双人PDF 右 "纸 "边距,单位为毫米。对于无边框和商业印刷应用,设置为零。默认值为 25。
底部边距双人PDF 底部 "纸张 "边距,单位为毫米。对于无边框和商业印刷应用,设置为零。默认值为 25。
左侧边距双人PDF 左 "纸 "边距,单位为毫米。对于无边框和商业印刷应用,设置为零。默认值为 25。
纸张方向PdfPaperOrientationPDF 纸张方向,如纵向或横向。默认值为纵向。
纸张尺寸PdfPaperSize设置纸张大小
设置自定义纸张大小(以厘米为单位双人以厘米为单位设置纸张大小。
设置自定义纸张尺寸(英寸以英寸为单位设置纸张大小。
设置自定义纸张尺寸(以毫米为单位以毫米为单位设置纸张大小。
以像素或点为单位设置自定义纸张尺寸以屏幕像素或打印机点为单位设置纸张大小。
打印 HTML 背景布尔型表示是否从 HTML 打印背景颜色和图像。默认值为 true。
请求上下文请求上下文该呈现的请求上下文,决定某些资源(如 cookie)的隔离。
超时整数渲染超时(秒)。默认值为 60。
标题字符串PDF 文档名称和标题元数据,在 IronPdf MVC 和 Razor 扩展中用于邮件合并和自动文件命名。
强制纸张大小布尔型在从 HTML 生成 PDF 后,通过调整页面大小,强制页面大小与通过 IronPdf.ChromePdfRenderOptions.PaperSize 指定的完全一致。在将 HTML 渲染为 PDF 时,有助于纠正页面大小的微小错误。
等待等待封装对象,用于保存等待机制的配置,以便用户在渲染前等待特定事件。默认情况下,它不会等待任何事件。

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

班级文本页眉页脚
说明用于定义文本页眉和页脚显示选项
特性 (函数类型说明
居中文本字符串设置 PDF 页眉或页脚文本的居中/靠左/靠右位置。还可以使用字符串占位符合并元数据:{page}, {total-pages}, {url}, {date}, {time}, {html-title}, {pdf-title}
左侧文本
右侧文本
绘制分割线布尔型在 PDF 文档的每一页页眉/页脚和页面内容之间添加水平线分隔线。
绘制分割线颜色颜色为 IronPdf.TextHeaderFooter.DrawDividerLine 指定的分隔线颜色。
字体PdfFontPDF 文档使用的字体系列。默认为 IronSoftware.Drawing.FontTypes.Helvetica。
字体大小双人字体大小(以像素为单位)。

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 是一套平台即服务产品,它使用操作系统级虚拟化技术来交付称为容器的软件包。 容器相互隔离,并打包它们自己的软件、库和配置文件; 他们可以通过明确的渠道相互沟通。

You can learn more aboutDocker 和 ASP.NET Core 应用程序这里。

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

让我们一起开始使用Docker吧。

8.2. 安装 Docker

访问这里的Docker网站安装 Docker。 40 related to 8.2. 安装 Docker点击开始。 41 related to 8.2. 安装 Docker点击下载 Mac 和 Windows 版。 42 related to 8.2. 安装 Docker免费注册,然后登录。 43 related to 8.2. 安装 Docker下载 Windows 版 Docker 44 related to 8.2. 安装 Docker开始安装 Docker 45 related to 8.2. 安装 Docker它需要重新启动。 重新启动计算机后,登录到 Docker。 46 related to 8.2. 安装 Docker现在您可以通过打开Windows命令行或PowerShell脚本运行Docker“hello world”,然后输入:

Docker运行hello-world 47 related to 8.2. 安装 Docker这是一份最重要的命令行列表,可以帮助您:

  • Docker 镜像 => 列出此机器上的所有可用镜像
  • Docker ps => 列出所有运行中的容器
  • Docker ps –a => 列出所有容器

8.3.运行到 Linux 容器中

38 related to 8.3.运行到 Linux 容器中39 related to 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");
IronPdf.License.LicenseKey = "YourLicenseKey"
' Open an unencrypted pdf
Dim unencryptedPdf As PdfDocument = PdfDocument.FromFile("testFile.pdf")

' Open an encrypted pdf
Dim encryptedPdf As PdfDocument = PdfDocument.FromFile("testFile2.pdf", "MyPassword")
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();
}
IronPdf.License.LicenseKey = "YourLicenseKey"
Dim PDFs As New List(Of PdfDocument)()
PDFs.Add(PdfDocument.FromFile("1.pdf"))
PDFs.Add(PdfDocument.FromFile("2.pdf"))
PDFs.Add(PdfDocument.FromFile("3.pdf"))
Using PDF As PdfDocument = PdfDocument.Merge(PDFs)
	PDF.SaveAs("mergedFile.pdf")
'INSTANT VB NOTE: The variable pdf was renamed since Visual Basic will not allow local variables with the same name as parameters or other local variables:
	For Each Me.pdf_Conflict As PdfDocument In PDFs
		Me.pdf_Conflict.Dispose()
	Next pdf_Conflict
End Using
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");
IronPdf.License.LicenseKey = "YourLicenseKey"
Dim pdf As PdfDocument = PdfDocument.FromFile("1.pdf")
Dim pdf2 As PdfDocument = PdfDocument.FromFile("2.pdf")
pdf.AppendPdf(pdf2)
pdf.SaveAs("appendedFile.pdf")
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");
IronPdf.License.LicenseKey = "YourLicenseKey"
Dim pdf As PdfDocument = PdfDocument.FromFile("1.pdf")
Dim pdf2 As PdfDocument = PdfDocument.FromFile("2.pdf")
pdf.InsertPdf(pdf2, 0)
pdf.SaveAs("InsertIntoSpecificIndex.pdf")
VB   C#

9.3 添加页眉或页脚

您可以在现有的PDF中添加页眉和页脚,或者在从HTML或URL渲染PDF时添加。

可以使用两个类在PDF中添加页眉或页脚:

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

    现在让我们看两个例子,展示如何使用这两个类为现有的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");
IronPdf.License.LicenseKey = "YourLicenseKey"
Dim pdf As PdfDocument = PdfDocument.FromFile("testFile.pdf")
Dim header As New TextHeaderFooter() With {
	.CenterText = "Pdf Header",
	.LeftText = "{date} {time}",
	.RightText = "{page} of {total-pages}",
	.DrawDividerLine = True,
	.FontSize = 10
}
pdf.AddTextHeaders(header)
pdf.SaveAs("withHeader.pdf")

Dim Footer As New HtmlHeaderFooter() With {
	.HtmlFragment = "<span style='text-align:right'> page {page} of {totalpages}</span>",
	.DrawDividerLine = True,
	.MaxHeight = 10
}
pdf.AddHtmlFooters(Footer)
pdf.SaveAs("withHeaderAndFooters.pdf")
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");
IronPdf.License.LicenseKey = "YourLicenseKey"
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
	.CenterText = "Pdf Header",
	.LeftText = "{date} {time}",
	.RightText = "{page} of {total-pages}",
	.DrawDividerLine = True,
	.FontSize = 10
}

renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter() With {
	.HtmlFragment = "<span style='text-align:right'> page {page} of {totalpages}</span>",
	.DrawDividerLine = True,
	.MaxHeight = 10
}
Dim pdf As PdfDocument = renderer.RenderHtmlFileAsPdf("test.html")
pdf.SaveAs("generatedFile.pdf")
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. 数字签名 PDFs

您也可以按如下方式对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"));
pdf.SaveAs("signed.pdf");
IronPdf.License.LicenseKey = "YourLicenseKey"
Dim pdf As PdfDocument = PdfDocument.FromFile("testFile.pdf")
pdf.Sign(New PdfSignature("cert123.pfx", "password"))
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. 添加PDF水印

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#

教程快速访问

Brand Visual Studio related to 教程快速访问

获取源代码

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

获取代码

访问 GitHub 教程

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

在 .NET Core 中生成 PDF 教程
Github Icon related to 教程快速访问
Html To Pdf Icon related to 教程快速访问

保留 PDF CSharp Cheat Sheet

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

保存小抄

更多文档

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

应用程序接口参考文档
Documentation related to 教程快速访问