在 .NET Core 中使用 IronPDF 將 HTML 轉換為 PDF
透過 HTML 直接生成高保真PDF是現代 .NET 應用程式中的常見需求——報告、發票和票證都需要像素完美的輸出,以匹配網頁 UI。 IronPDF 透過暴露單一的 C# API 來簡化此工作流程,將 HTML、Razor 頁面和整個網站渲染為符合標準的 PDF 文件。 到本指南結尾時,開發者將能夠在 ASP.NET Core 專案中轉換URL、原始HTML或MVC視圖,並將相同的程式部署到Windows、Linux、Docker或無伺服器環境。
快速開始:在 .NET Core 中從 HTML 建立 PDF
以輕鬆在 .NET Core 中使用 IronPDF 程式庫將 HTML 轉換為 PDF。 本指南提供了一個簡單的範例,讓您能夠快速開始通過渲染HTML內容轉換成高品質的PDF,僅需最少的程式碼。 非常適合希望輕鬆將PDF建立整合到其應用程式中的開發者。
最小的工作流(5 步驟)
- Install the
IronPdfNuGet package - 使用
RenderUrlAsPdf轉換網站 URL - 通過
RenderHtmlAsPdf渲染原始 HTML - 將 MVC 視圖匯出為 PDF
- 調整紙張大小、邊距、頁眉和頁尾
快速開始檢查表
- 安裝 –
Install-Package IronPdf - 渲染 URL –
ChromePdfRenderer.RenderUrlAsPdf() - 渲染原始 HTML –
ChromePdfRenderer.RenderHtmlAsPdf() - 匯出 Razor 視圖 –
ChromePdfRenderer.RenderHtmlAsPdfAsync() - 調整輸出 – 利用
ChromePdfRenderer.RenderingOptions
本教程涵蓋的內容
- URL、HTML 字串和 Razor 視圖轉換
- 紙張、頁邊距和媒體型別配置
- 跨平台部署(Windows、Linux、Docker)
- 後期處理:合併、水印、密碼保護和數位簽章 PDF
- 全端範例:訂票 MVC 應用程式
如何在 .NET Core 中安裝 PDF 程式庫?
安裝程式庫在任何 .NET 8 專案中只需執行一行命令,並且保持對 .NET 9 預覽版和即將推出的 .NET 10 發行版的前向相容。 使用 NuGet 的套件管理器控制台,套件管理器將會自動解析Windows、Linux、Docker 和無伺服器目標的所有相依性。
:ProductInstall # .NET 8 LTS and higher
:ProductInstall # .NET 8 LTS and higher
dotnet add package IronPdf 在您的專案資料夾中。安裝後,透過轉換任何公共URL確認一切已接線完成:
: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
如何運作
ChromePdfRenderer在底層啟動了一個沙盒化的 Chromium 實例—不需要單獨安裝 Chrome。RenderUrlAsPdf會捕捉完整渲染的 DOM,包括由 JavaScript 驅動的內容、CSS 媒體查詢和字體。- 結果
PdfDocument提供合併、密碼保護或數位簽章輸出的輔助方法—這些功能會在後面教程中涵蓋。
有關部署細節(Azure App Service、AWS Lambda、內部部署 Linux)的更多內容,請參閱專用的 安裝指南 和 進階 NuGet 設定 頁面。 Docker 和 K8s 集群的內部 CI/CD 提示在 Docker 部署最佳實踐 中有所涵蓋。
.NET Core 服務如何將一個即時網站URL轉換成 PDF?
只需單次呼叫 RenderUrlAsPdf:傳遞任何公開可存取的 URL,IronPDF 即會返回一個完整渲染且符合標準的 PDF。 以下程式碼目標 .NET 8 LTS,並在 .NET 9 預覽版以及即將到來的 2025 年 .NET 10 發行版上不變編譯。
逐步範例
: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
為什麼它有效
ChromePdfRenderer啟動了一個沙盒化的 Chromium 實例—沒有系統 Chrome 相依性,保持 Docker 映像瘦小。RenderUrlAsPdf會等待 DOM 和 JavaScript 完成後再進行快照,因此單頁應用程式正確渲染。- 設定
CssMediaType為 Print 告訴引擎使用列印特定的規則,匹配瀏覽器的_列印 → 存為 PDF_輸出。 - 結果的
PdfDocument可以加密、數位簽章、合併或將其栅格化—功能會在後面的部分涵蓋。
renderer.LoggingOptions.DebugMode = true 並按照 無頭 Chrome 除錯指南 在渲染期間檢查即時 DevTools。相關資源
-API 參考– ChromePdfRenderer.RenderUrlAsPdf
-API 參考– PdfDocument.SaveAs
如何在 .NET Core 中將原始 HTML 轉換為 PDF?
傳遞 HTML 字串—或 Razor 視圖的渲染標記—to ChromePdfRenderer.RenderHtmlAsPdf 馬上產生一個符合標準的 PDF。 該方法會啟動 IronPDF 的內嵌 Chromium 引擎,因此不需要外部瀏覽器安裝或 WebView 相依性。 以下顯示的相同程式碼在今天的 .NET 8 LTS 上編譯,而在 2025 年 11 月預定的 .NET 10 發行中仍保持向前相容。
範例 — 從 HTML 片段生成 PDF
: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> }
程式碼展示的內容
- 內嵌 Chromium — IronPDF 捆綁了 Chromium 引擎,保證與現代瀏覽器HTML5、CSS3 和 JavaScript 的一致性。
- 單一相依性 — 一個輕量化 NuGet 安裝支援 Windows、Linux、Docker 和 Azure/AWS,而不需要額外的系統庫。
- 渲染選項 —
CssMediaType和RenderDelay鏡像瀏覽器列印設定,因此 PDF 與螢幕上的佈局匹配。 - 面向未來的定位 — API 介面在 .NET 8、.NET 9 STS 和即將推出的 .NET 10 中保持一致,因此長期維護工作量最小。
- 後期處理掛鉤 —
PdfDocument提供合併、密碼保護和數位簽章的輔助函式—在本指南後面會詳述每一個部分。
深入閱讀: 參見逐步HTML 字串到 PDF 教學 和完整 ChromePdfRenderer API 文件。
ASP .NET Core MVC 視圖如何匯出為 PDF?
IronPDF 渲染完全處理過的 Razor 視圖 ( .cshtml ) 方式與瀏覽器相同,并將結果作為 PdfDocument 流。 以下工作流程保持控制器邏輯乾淨,不需要瀏覽器插件,並且支持在 .NET 8 LTS、.NET 9 預覽版和預定於 2025 年 11 月的 .NET 10 發行中使用。
全端控制器範例
// TicketsController.cs — .NET 8 LTS / MVC
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using YourApp.Models; // TicketViewModel
public class TicketsController : Controller
{
private readonly ChromePdfRenderer _renderer;
public TicketsController()
{
_renderer = new ChromePdfRenderer
{
RenderingOptions =
{
PaperSize = PdfPaperSize.A5, // Compact ticket size
PaperOrientation = PdfPdfOrientation.Portrait,
FitToPaperWidth = true,
CssMediaType = PdfCssMediaType.Print,
Margins = new PdfMargins(5, 10, 5, 10) // mm
}
};
}
// GET /Tickets/Print/42
public async Task<IActionResult> Print(int id)
{
TicketViewModel vm = await _service.GetTicketAsync(id);
// 1. Render the Razor view to an HTML string
string html = await RazorTemplateEngine.RenderViewAsync(
HttpContext, "~/Views/Tickets/Print.cshtml", vm);
// 2. Convert HTML → PDF
using PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);
// 3. Stream back as a file
return File(pdf.BinaryData, "application/pdf",
$"ticket-{id}.pdf");
}
}
// TicketsController.cs — .NET 8 LTS / MVC
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using YourApp.Models; // TicketViewModel
public class TicketsController : Controller
{
private readonly ChromePdfRenderer _renderer;
public TicketsController()
{
_renderer = new ChromePdfRenderer
{
RenderingOptions =
{
PaperSize = PdfPaperSize.A5, // Compact ticket size
PaperOrientation = PdfPdfOrientation.Portrait,
FitToPaperWidth = true,
CssMediaType = PdfCssMediaType.Print,
Margins = new PdfMargins(5, 10, 5, 10) // mm
}
};
}
// GET /Tickets/Print/42
public async Task<IActionResult> Print(int id)
{
TicketViewModel vm = await _service.GetTicketAsync(id);
// 1. Render the Razor view to an HTML string
string html = await RazorTemplateEngine.RenderViewAsync(
HttpContext, "~/Views/Tickets/Print.cshtml", vm);
// 2. Convert HTML → PDF
using PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);
// 3. Stream back as a file
return File(pdf.BinaryData, "application/pdf",
$"ticket-{id}.pdf");
}
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc
Imports YourApp.Models ' TicketViewModel
Public Class TicketsController
Inherits Controller
Private ReadOnly _renderer As ChromePdfRenderer
Public Sub New()
_renderer = New ChromePdfRenderer With {
.RenderingOptions = New PdfRenderingOptions With {
.PaperSize = PdfPaperSize.A5, ' Compact ticket size
.PaperOrientation = PdfPdfOrientation.Portrait,
.FitToPaperWidth = True,
.CssMediaType = PdfCssMediaType.Print,
.Margins = New PdfMargins(5, 10, 5, 10) ' mm
}
}
End Sub
' GET /Tickets/Print/42
Public Async Function Print(id As Integer) As Task(Of IActionResult)
Dim vm As TicketViewModel = Await _service.GetTicketAsync(id)
' 1. Render the Razor view to an HTML string
Dim html As String = Await RazorTemplateEngine.RenderViewAsync(
HttpContext, "~/Views/Tickets/Print.cshtml", vm)
' 2. Convert HTML → PDF
Using pdf As PdfDocument = _renderer.RenderHtmlAsPdf(html)
' 3. Stream back as a file
Return File(pdf.BinaryData, "application/pdf", $"ticket-{id}.pdf")
End Using
End Function
End Class
此程式碼所說明的內容
- 無暫存檔案 — Razor 視圖在記憶體中渲染,然後直接傳遞給
RenderHtmlAsPdf,避免磁碟 I/O 及臨時文件夾競態條件。 - 票券大小輸出 —
PaperSize = A5與窄邊距保持列印票緊湊。 - 一致的列印樣式 —
CssMediaType = Print使用與瀏覽器相同的@media printCSS 規則。 - 二進位流 —
pdf.BinaryData將文件流出而不觸碰文件系統; 理想用於 API 端點和 Lambda 函式。 - 可重用的渲染器 —
ChromePdfRenderer在每個控制器中實例化一次,然後重用,最大化減少進程啟動負荷。
PaperSize, PaperOrientation, FitToPaperWidth
Margins, Header, Footer, Watermark
下一步: 新增加密、數位簽章,或將多個票券合併為一個文件。參見合併範例和數位簽章指南。
在渲染前如何微調紙張大小、邊距、頁眉、水印和安全性?
IronPDF 提供一個 ChromePdfRenderOptions 物件來控制輸出的各個方面—紙張尺寸、方向、頁眉和頁尾、JavaScript 時間控制、水印、加密和數位簽章—所有這一切都不需要任何額外瀏覽器插件。
程式碼範例—同時應用多個選項
: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
為什麼這些選項重要
Margins和CssMediaType鏡像瀏覽器的列印對話框,因此在 Windows、Linux 和 Docker 上螢幕佈局和 PDF 保持一致。- HTML 頁眉和頁尾 支援 Razor 程式碼、CSS 和 JavaScript—對於動態頁碼或品牌標識非常有用。
HtmlStamp讓一行建立品牌水印,具有完整 HTML + CSS 控制。- 安全選項 啟用 128 位加密,所有者/使用者密碼,和精細權限控制,無需第三方工具。
- 數位簽章 可以直接在程式中新增密碼學印章,保持法律有效性和防篡改證據。
- 提取助手如
ExtractAllText和ExtractAllImages在需要分析時逆轉過程。
快速參考—熱門設置
PaperSize, PaperOrientation, Margins, CssMediaType, RenderDelay
`HtmlHeader`, `HtmlFooter`, 動態 Razor 佔位符,頁碼程式碼
`Watermark`, `HtmlStamp`, 不透明度,對齊
`SecurityOptions`, `SignAndStamp`, 所有者 / 使用者密碼,證書密封
下一步任務: 合併多個 PDF,提取文字與圖像,並部署到 Docker或無伺服器。 繼續到部署部分以確保跨平台的相同功能。
如何將 PDF 生成程式碼部署到 Docker 上的 Linux 和 Windows?
IronPdf 以一個自備的 NuGet 套件發行,因此在Windows 和 Linux上容器化一個 ASP.NET Core(或控制台)應用非常容易。 關鍵是在瘦運行時映像中複製發布的二進制文件,並在 Linux 上新增 IronPDF 需要的兩個本機庫 (libnss3 和 libatk1.0-0)。
多階段 Dockerfile (Ubuntu 22.04)
####### ---------- stage 1 ----------
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["MyPdfApp.csproj", "."]
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /app/publish
####### ---------- stage 2 ----------
FROM mcr.microsoft.com/dotnet/aspnet:8.0-jammy
######## Install two native libs required by Chromium
RUN apt-get update && \
apt-get install -y --no-install-recommends libnss3 libatk1.0-0 && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "MyPdfApp.dll"]
mcr.microsoft.com/dotnet/aspnet:8.0-windowsservercore-ltsc2022—不需要其他套件,因為 Chromium DLLs 已打包。全端驗證脚本
docker build -t pdf-demo .
docker run --rm -p 8080:80 pdf-demo
######### ↳ Navigate to http://localhost:8080/api/pdf?url=https://example.com
docker build -t pdf-demo .
docker run --rm -p 8080:80 pdf-demo
######### ↳ Navigate to http://localhost:8080/api/pdf?url=https://example.com
- API 操作內部調用
ChromePdfRenderer.RenderUrlAsPdf就像在 Section2 一樣。 - IronPDF 在容器裡啟動其沙盒化的 Chromium 處理—不需要 X server,因為它無頭渲染。
- 即使在大型渲染期間,實際記憶體佔用保持在 200 MB 以下。
libnss3 和 libatk1.0-0 皆存在。 Alpine 映像不支持,因為 musl C 庫缺乏必要的符號。內部資源
- 教學 – 在 Docker 容器中部署 IronPDF
- 如何進行 – 在 Azure App Service Linux 上運行 IronPDF
-API 參考–
ChromePdfRendererclass
如何在 .NET Core 中打開、合併、水印和提取現有的 PDF 內容?
IronPDF 將每個 PDF—無論是由 IronPDF、Adobe® Acrobat 或第三方工具生成的—視為一等 PdfDocument 數位物件,不會喪失質量地打開、編輯、保護和重儲存。 相同的 API 介面在今天的 .NET 8 LTS 上工作,並在 .NET 9 預覽版和即將到來的 .NET 10 發行上不變編譯。
統一範例—打開→合併→水印→提取
: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
為什麼這很重要
- 打開和合併 –
PdfDocument.FromFile載入任何符合標準的 PDF,包括加密文件,同時PdfDocument.Merge將任意數目的文件串聯在單次調用中。 - 水印 –
ApplyStamp(別名HtmlStamp)將完全設計的 HTML/CSS 覆蓋層(logo、QR 工具或斜體文字)嵌入選定頁面中而不進行栅格化。 - 內容提取 –
ExtractAllText和ExtractAllImages提取原始 UTF-8 文字或二進位圖像流,用於下游存檔或 AI 管道。 - 數位簽章準備好 – 相同的
PdfDocument實例可以與SignAndStamp密封,產生符合 RFC 3161 的雜湊,符合 ISO 32000-2 數位簽章要求。 - 開放標準合規 – IronPDF 保留了原始 PDF 結構(字體、圖層、XMP 詮釋資料)因此輸出保持同 Adobe® Reader 及其他 ISO 32000-1 瀏覽器的相容性。
- 面向未來 – API 避免使用 interop 程式庫和 Win32 GDI 調用,因此程式碼在 Windows、Linux、Docker 和即將來臨的 .NET 10 無伺服器 SKU 上運行不變。
需要拆分、旋轉或刪除頁面嗎? 請參閱頁面級編輯指南以進行細粒度操作。
如何在 .NET Core 中加密並數位簽章 PDF?
IronPDF 透過兩步驟保護文件:AES 基礎加密(使用者/所有者密碼 + 精細權限)和 X.509 數位簽章,用密碼雜湊進行文件封條。 兩個 API 皆位於同一個 PdfDocument 物件上,因此工作流程在今天的 .NET 8 LTS 上保持一致,並在 .NET 9 預覽版以及即將到來的 .NET 10 發行上不變編譯。
範例 — 應用 256 位 AES,加鎖列印權限,並新增可見簽名
: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
背後的運作
- AES-256 加密 — IronPDF 用 NIST 認可的 AES 鑰匙打包有效載荷,阻擋未授權的打開、列印或複製粘貼。
- 權限精細化 — 性質如
AllowUserPrinting和AllowUserFormData切換每個操作的權限; 需要所有者密碼才能使任何限制生效。 - 數位簽章 —
SignAndStamp嵌入RFC 3161的時間戳和證書鏈,創造出由 Adobe® Acrobat 和其他 ISO 32000-2 瀏覽器認識的防篡改雜湊。 - 單一API — 加密和簽名皆對相同
PdfDocument實例進行修改,避免多次文件傳遞並保留內部字體、圖層、以及詮釋資料。
location 字串是 ASCII 清潔的。核心安全設置
`PdfSecuritySettings` → `OwnerPassword`, `UserPassword`, `EncryptionAlgorithm`, `AllowUserPrinting`
`PdfDocument.SignAndStamp` — PFX 路徑,授權機構,位置,原因,時間戳
內部資源加深探索
- 教程 – 如何給 PDF 設置密碼保護
- 範例 – 數位簽章一個 PDF
- API reference –
PdfSecuritySettings
如何在 .NET Core 中優化並擴展 HTML 到 PDF 的效能?
IronPDF 的 Chromium 引擎在現代硬體上已經能夠在 < 1 秒內渲染大多數頁面,但隨著 批次渲染、啟用多執行緒和消除無頭 Chrome 負擔,還可以極大倍增吞吐量。 以下提示同樣適用於所有 .NET 版本。
1. 在背景執行緒池批量渲染
: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");
Imports IronPdf
License.LicenseKey = "YourLicenseKey"
Dim renderer As New ChromePdfRenderer()
' Set rendering options
renderer.RenderingOptions.PaperSize = Rendering.PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = Rendering.PdfPaperOrientation.Portrait
renderer.RenderHtmlFileAsPdf("testFile.html").SaveAs("GeneratedFile.pdf")
ChromePdfRenderer是 執行緒安全的; 一個實例可以同時處理數十個任務而不會死鎖。Parallel.ForEach飽和每個 CPU 核; 與單執行緒迴圈相比,典型的伺服器經常會看到 4-6 倍的吞吐量增長。- 如果 ASP.NET 請求排隊,將大量渲染移到托管背景服務或訊息佇列中保持響應時間短。
2. 修剪無頭 Chrome 啟動成本
IronPDF 發行其自己的 Chromium 構建,但每次渲染都會帶來小額啟動稅。 資源池幫助,而 Linux 容器必須包含兩個本機庫:
RUN apt-get update && \
apt-get install -y --no-install-recommends libnss3 libatk1.0-0
缺少任何一個庫會表現在 Docker 日誌中的 libnss3.so not found 錯誤。
推薦的 Chrome 標誌(將由 IronPDF 自動應用) 包括 --disable-gpu 和 --no-sandbox 以降低記憶體和容器中的根使用者問題。
3. 使用 RenderDelay 或 WaitFor 等待延遲 JavaScript
計算或在 DOMContentLoaded 之後獲取資料的頁面可能需要短暫的延遲:
renderer.RenderingOptions.RenderDelay = 200; // ms
// OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
renderer.RenderingOptions.RenderDelay = 200; // ms
// OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
renderer.RenderingOptions.RenderDelay = 200 ' ms
' OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
請參見專門的 WaitFor 教學 獲取自定義承诺和 DOM 輪詢。
4. 打開除錯日誌記錄以進行一個請求
: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")
即時 DevTools 跡線中揭露缺失的字體、404 圖像和時間事件而不需重新編譯程式碼。
5. 重用模板 PDF 而不是重新渲染
對於發票運行,建立一個模板 PDF用占位符位於 [[name]] 而不是重建複雜的 HTML。 速度快10倍且記憶體輕巧。
快速調整檢查表
`Parallel.ForEach`, `async/await`, reuse a single `ChromePdfRenderer`
Use `aspnet:8.0-jammy`; install `libnss3` + `libatk1.0-0`; flags `--no-sandbox`, `--disable-gpu`
`RenderDelay`, `WaitFor()`, 日誌 DevTools 時間軸以適應慢速 SPA 強化
進一步閱讀
- 如何進行 – 使用非同步 / 多執行緒生成 PDF
- 故障排除 – 效能輔助中心
- 例子 – 執行緒式渲染演示
在哪裡可以下載免費試用、選擇授權和找到專家支援?
一鍵獲取30 天 試用密鑰,從 開始免費試用表單開放,這樣您就可以解鎖所有功能——包括 HTML 到 PDF、數位簽章和加密——而無需加上水印。
在評估程式庫后,選擇一項永久開發者、部署或企業授權; 每個計畫都包括免費的次要更新、開發/暫存/製作用權,以及 30 天退款保證。 申請密鑰是一行程式碼 (IronPdf.License.LicenseKey = "YOUR-KEY";),可以在 CI/CD 管道中自動化。
全面的文件——快速開始指南,API 參考,和教程影片,所有在文件入口中,並且為每個 .NET 發布更新。
工程問題可以通過即時聊天,電子郵件或電話由位於芝加哥的支援團隊在一個工作天內得到回答。
效能調整和部署的常見問題被彙集在效能協助中心。
快捷連結
| 資源 | URL | 為什麼很重要 |
|---|---|---|
| 獲取 30 天試用密鑰 | https://ironpdf.com/demos/ |
解鎖所有功能而無需水印 |
| 授權與定價 | https://ironpdf.com/licensing/ |
永久或訂閱方案; Iron Suite 包含 10 個程式庫 |
| API 參考 | https://ironpdf.com/object-reference/api/ |
完整類文件,例如 ChromePdfRenderer |
| 文件入口 | https://ironpdf.com/docs/ |
指南、教程、樣本專案 |
| 效能協助 | https://ironpdf.com/troubleshooting/ironpdf-performance-assistance/ |
優化與尺度擴展提示 |
| 聯繫支援 | https://ironsoftware.com/contact-us/ |
即時聊天,電子郵件,電話支援 |
下一步
利用這些資源,任何 .NET 團隊都能在一個開發迭代內,將像素完美的PDF部署到生產環境中——無論是本地、在Docker中,還是無伺服器的環境。
常見問題
如何在.NET Core中將HTML轉換為PDF?
您可以使用IronPDF程式庫在.NET Core中將HTML轉換為PDF。首先,安裝IronPDF NuGet套件,然後建立一個ChromePdfRenderer實例。使用RenderHtmlAsPdf方法將HTML字串轉換為PDF。
如何將網站URL轉換為PDF文件?
要將網站URL轉換為PDF文件,請安裝IronPDF NuGet套件,建立一個ChromePdfRenderer實例,並使用RenderUrlAsPdf方法將URL渲染為PDF。結果可以使用SaveAs方法儲存。
將Razor視圖轉換為PDF的最佳方法是什麼?
將Razor視圖轉換為PDF的最佳方法是使用IronPDF。首先將Razor視圖渲染為HTML字串,然後將此字串傳遞給RenderHtmlAsPdf方法以建立PDF文件。
如何增強我的PDF文件的安全性?
使用IronPDF增強PDF安全性,方法是應用AES-256加密、設定密碼並控管使用者權限。通過SecuritySettings屬性配置這些設定,以限制列印和編輯等行為。
有哪些選項可用於自定PDF渲染?
IronPDF通過ChromePdfRenderOptions類提供各種渲染選項,包括設定紙張尺寸、方向、邊距以及應用CSS媒體型別。您還可以新增標頭、頁尾和浮水印,以自訂文件輸出。
如何在Docker容器中部署PDF生成應用程式?
要在Docker容器中部署PDF生成應用程式,請在Dockerfile中配置Linux依賴項,並設定使用者權限。利用IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig進行自動依賴項管理。
如何使用C#向PDF新增浮水印?
您可以使用IronPDF通過HtmlStamp物件來設置Watermark屬性,向PDF新增浮水印。欲使用進階選項,HtmlStamper類允許自訂位置及透明度效果。
我可以在PDF文件中新增數位簽名嗎?
是的,您可以使用IronPDF的PdfSignature類向PDF新增數位簽名。對PdfDocument使用Sign方法並提供憑證文件,以確保文件的完整性和真實性。
如何在.NET Core中優化PDF生成性能?
通過重複使用一個執行緒安全的ChromePdfRenderer實例,啟用多執行緒,並削減不必要的無頭Chrome啟動標誌來優化PDF生成性能。這些做法有助於提高應用程式的效率。
.NET Core的HTML到PDF範例在本教程中也適用於.NET 10嗎?
是的。IronPDF完全相容.NET 10,因此您可以在.NET 10項目中使用本教程中的ChromePdfRenderer HTML到PDF範例,而不更改核心程式碼。主要區別是您在建立項目時鎖定.NET 10,然後從NuGet安裝最新的IronPdf套件,以從HTML、Razor視圖或URL生成像素完美的PDF。

