生成 .NET Core 的 PDF 文件是一項繁瑣的任務。在 ASP.NET MVC 專案中處理 PDF 文件,以及將 MVC 視圖、HTML 文件和線上網頁轉換為 PDF 都可能具有挑戰性。本教程透過 IronPDF 工具解決這些問題,提供解決您許多 PDF .NET 需求的指導方針。
IronPDF 也支持使用 Chrome 來調試您的 HTML 以獲得像素完美的 PDF。可以找到設置此功能的教程。這裡.**
<div 類別="hsg-featured-snippet">
如何在 .NET Core 中將 HTML 轉換為 PDF
<ol>
<li><a 類別="js-modal-open" data-modal-id="trial-license-after-download" href="https://nuget.org/packages/IronPdf/">下載 C# 程式庫以將 HTML 轉換為 PDF</a></li>
<li><a href='#anchor-2-convert-website-to-pdf'>使用 <code>將網址渲染為PDF</code> 將網頁URL轉換為PDF</a></li>
<li><a href='#anchor-3-convert-net-core-html-to-pdf'>將 HTML Markdown 字符串轉換為 PDF 與 <code>將HTML渲染為PDF</code></a></li>
<li><a href='#anchor-4-convert-mvc-view-to-pdf'>將MVC視圖轉換為PDF,方法是配置 <strong>模型</strong> 和 <strong>服務</strong> 類別</a></li>
<li>Modify the HTML page to use the 模型 和 invoke a method to pass the HTML to <code>將HTML渲染為PDF</code></li>
</ol>
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
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
[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
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
[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
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#
運行應用程式並填寫票務資訊,然後點擊「保存」。
查看生成的票券
下載 PDF 票券
要將票券下載為 PDF,請點擊「Download Pdf」。您將會收到包含票券的 PDF 文件。
您可以下載本指南的完整代碼。它以壓縮文件的形式提供,您可以在 Visual Studio 中打開。 點擊這裡下載專案。
5. .NET PDF 渲染選項圖表
我們有一些進階選項來定義 PDF 渲染選項,如調整邊距、紙張方向、紙張大小等等。
以下是一個表格,以說明多種不同的選項。
類別
ChromePdfRenderer
描述
用於定義PDF列印選項,例如紙張大小、DPI、頁首和頁尾
屬性 / 函數
類型
描述
自定義Cookies
Dictionary<字串, 字串>
HTML渲染的自訂Cookie。Cookie不會在渲染之間持續,必須每次都設置。
紙適
虛擬紙張佈局管理器
一個用於設置虛擬紙張佈局的管理器,控制內容在 PDF「紙張」頁面上的佈局方式。包括默認的 Chrome 行為、縮放、響應式 CSS3 佈局、按頁比例縮放和連續輸送樣式的 PDF 頁面設置選項。
使用頁首和頁腳的邊距
使用邊距
在渲染頁眉和頁腳時使用主文檔的邊距值。
從Html創建Pdf表單
布林值
將所有 HTML 表單元素轉換為可編輯的 PDF 表單。默認值為 true。
CssMedia類型
PdfCssMedia類型
Enables Media="screen" CSS Styles and StyleSheets. Default value is PdfCssMedia類型.Screen.
自訂Css網址
字串
允許在渲染之前將自定義 CSS 樣式表應用於 HTML。可以是本地檔案路徑或遠端 URL。僅在將 HTML 渲染為 PDF 時適用。
A custom JavaScript 字串 to be executed after all HTML has loaded but before PDF rendering.
JavaScriptMessageListener
字串委派
當瀏覽器的 JavaScript 控制台訊息變為可用時,將調用的方法回調。
第一頁號碼
整數
PDF 頁眉和頁腳中使用的第一頁頁碼。預設值為 1。
目錄
目錄類型s
在 HTML 文件中找到 id 為 "ironpdf-toc" 的元素所在位置生成目錄。
灰度
布林值
輸出黑白 PDF。預設值為 false。
文本標題
I文本標題Footer
Sets the footer content for every PDF page as text, supporting 'mail-merge' and automatically turning URLs 整數o hyperlinks.
文本頁腳
HtmlHeader
HtmlHeaderFooter
將每個 PDF 頁面的標題內容設置為 HTML。支援「郵件合併」。
HtmlFooter
輸入編碼
編碼
The input character encoding as a 字串. Default value is 編碼.UTF8.
上邊距
雙精度
Top PDF "paper" margin in millimeters. Set to zero for border-less and commercial pr整數ing applications. Default value is 25.
右邊邊距
雙精度
Right PDF "paper" margin in millimeters. Set to zero for border-less and commercial pr整數ing applications. Default value is 25.
底邊距
雙精度
Bottom PDF "paper" margin in millimeters. Set to zero for border-less and commercial pr整數ing applications. Default value is 25.
左邊距
雙精度
Left PDF "paper" margin in millimeters. Set to zero for border-less and commercial pr整數ing applications. Default value is 25.
紙張方向
Pdf紙張方向
PDF文件的紙張方向,例如縱向或橫向。默認值為縱向。
紙張大小
Pdf紙張大小
設定紙張大小
SetCustom紙張大小inCentimeters
雙精度
設定紙張大小 in centimeters.
SetCustom紙張大小InInches
設定紙張大小 in inches.
SetCustom紙張大小inMilimeters
設定紙張大小 in millimeters.
SetCustom紙張大小inPixelsOrPo整數s
設定紙張大小 in screen pixels or pr整數er po整數s.
Pr整數HtmlBackgrounds
布林值
Indicates whether to pr整數 background-colors and images from HTML. Default value is 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.
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.
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")
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
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")
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 或在渲染時添加頁首/頁尾的兩個示例。
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")
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")
IronPdf.License.LicenseKey = "YourLicenseKey"
Dim pdf As PdfDocument = PdfDocument.FromFile("testFile.pdf")
pdf.Sign(New PdfSignature("cert123.pfx", "password"))
pdf.SaveAs("signed.pdf")
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)
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)
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.
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")
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")