使用 C# 和 IronPDF 在 .NET Core 中將 HTML 轉換為 PDF
直接從 HTML 生成高保真 PDF 是現代 .NET 應用程式的常規需求——報告、發票和票據皆需與網頁使用者介面完全一致的像素級精準輸出。 IronPDF 透過提供單一 C# API,將 HTML、Razor 視圖及完整網站渲染為符合標準的 PDF 文件,從而簡化此工作流程。 閱讀完本指南後,開發人員將能夠在 .NET Core 專案中轉換 URL、原始 HTML 或 MVC 檢視,並將相同的程式碼部署至 Windows、Linux、Docker 或無伺服器環境。
快速入門:在 .NET Core 中將 HTML 轉為 PDF using IronPDF 函式庫,在 .NET Core 中輕鬆將 HTML 轉換為 PDF。 本指南提供一個簡單的範例,讓您能透過極少的程式碼,將 HTML 內容渲染成高品質的 PDF,快速上手。 非常適合希望輕鬆將 PDF 建立功能整合至應用程式的開發人員。
簡化工作流程(5 個步驟)
- 安裝
IronPdfNuGet 套件 - 使用
RenderUrlAsPdf - 透過
RenderHtmlAsPdf - 將 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 及無伺服器目標解析所有依賴項。
PM> Install-Package IronPdf # .NET 8 LTS and higher
PM> Install-Package IronPdf # .NET 8 LTS and higher
dotnet add package IronPdf 即可使用相同的指令。安裝完成後,請透過轉換任何公開網址來確認所有設定是否已正確連接:
// Program.cs — .NET 8 LTS
using IronPdf;
var renderer = new ChromePdfRenderer();
// Render a live website to PDF
using PdfDocument pdf = renderer.RenderUrlAsPdf("https://example.com");
// Persist to disk
pdf.SaveAs("website-snapshot.pdf");
// Program.cs — .NET 8 LTS
using IronPdf;
var renderer = new ChromePdfRenderer();
// Render a live website to PDF
using PdfDocument pdf = renderer.RenderUrlAsPdf("https://example.com");
// Persist to disk
pdf.SaveAs("website-snapshot.pdf");
' Program.cs — .NET 8 LTS
Imports IronPdf
Private renderer = New ChromePdfRenderer()
' Render a live website to PDF
Private PdfDocument As using
' Persist to disk
pdf.SaveAs("website-snapshot.pdf")
運作方式
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 版本中,均可直接編譯執行。
逐步範例
// Program.cs — .NET 8 LTS-compatible
using IronPdf;
// 1. Activate a license (or trial key)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// 2. Create a reusable renderer instance
var renderer = new ChromePdfRenderer
{
RenderingOptions =
{
// Force A4 portrait output and apply @media print styles
PaperSize = PdfPaperSize.A4,
CssMediaType = PdfCssMediaType.Print
}
};
// 3. Convert Microsoft Docs home page to PDF
using PdfDocument pdf = renderer.RenderUrlAsPdf("https://learn.microsoft.com/");
// 4. Save the PDF or stream it from a Web API
pdf.SaveAs("docs-offline-copy.pdf");
// Program.cs — .NET 8 LTS-compatible
using IronPdf;
// 1. Activate a license (or trial key)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// 2. Create a reusable renderer instance
var renderer = new ChromePdfRenderer
{
RenderingOptions =
{
// Force A4 portrait output and apply @media print styles
PaperSize = PdfPaperSize.A4,
CssMediaType = PdfCssMediaType.Print
}
};
// 3. Convert Microsoft Docs home page to PDF
using PdfDocument pdf = renderer.RenderUrlAsPdf("https://learn.microsoft.com/");
// 4. Save the PDF or stream it from a Web API
pdf.SaveAs("docs-offline-copy.pdf");
' Program.cs — .NET 8 LTS-compatible
Imports IronPdf
' 1. Activate a license (or trial key)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
' 2. Create a reusable renderer instance
Dim renderer = New ChromePdfRenderer With {
.RenderingOptions = {
PaperSize = PdfPaperSize.A4,
CssMediaType = PdfCssMediaType.Print
}
}
' 3. Convert Microsoft Docs home page to PDF
Using pdf As PdfDocument = renderer.RenderUrlAsPdf("https://learn.microsoft.com/")
' 4. Save the PDF or stream it from a Web API
pdf.SaveAs("docs-offline-copy.pdf")
End Using
為何有效
ChromePdfRenderer會啟動一個沙箱化的 Chromium 實例——無需依賴系統版 Chrome,從而保持 Docker 映像檔的精簡。RenderUrlAsPdf會在等待 DOM 和 JavaScript 處理完畢後才進行快照,因此單頁應用程式能正確渲染。- 將
CssMediaType設定為 PRINT,會指示引擎使用列印專用的規則,其效果等同於瀏覽器的 PRINT → Save as PDF 輸出。 - 生成的
PdfDocument可進行加密、數位簽章、合併或光柵化——相關功能將於後文詳述。
renderer.LoggingOptions.DebugMode = true 並遵循無頭 Chrome 除錯指南,以在渲染過程中檢視即時開發者工具。相關資源
- API 參考 –
ChromePdfRenderer.RenderUrlAsPdf - API 參考 –
PdfDocument.SaveAs - 教學 – 在 Docker 容器中部署 IronPDF
如何在 .NET Core 中將原始 HTML 轉換為 PDF?
將 HTML 字串(或 Razor 視圖的渲染標記)傳遞給 ChromePdfRenderer.RenderHtmlAsPdf,即可立即產生符合標準的 PDF 檔案。 此方法會啟動 IronPDF 內建的 Chromium 引擎,因此無需安裝外部瀏覽器或依賴 WebView。 下方的相同程式碼目前可在 .NET 8 LTS 上編譯,並與 .NET 9 以及預定於 2025 年 11 月發佈的 .NET 10 保持向前相容。
範例 — 從 HTML 片段產生 PDF
// Program.cs — compatible with .NET 8 and newer
using IronPdf;
// Sample HTML fragment (could also be read from a file, Razor view, or CMS)
const string html = """
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Quarterly Report</title>
<style>
body { font-family:'Segoe UI', sans-serif; margin:1.2rem; }
header { margin-bottom:2rem; }
h1 { color:#3056d3; }
table { width:100%; border-collapse:collapse; margin-top:1rem; }
th,td { border:1px solid #ddd; padding:0.5rem; text-align:right; }
tr:nth-child(even){ background-color:#f8f9fa; }
</style>
</head>
<body>
<header><h1>Q2 Revenue Summary</h1></header>
<table>
<thead><tr><th>Product</th><th>Revenue ($)</th></tr></thead>
<tbody>
<tr><td>IronPDF for .NET</td><td>1,200,000</td></tr>
<tr><td>IronOCR for .NET</td><td>890,000</td></tr>
<tr><td>IronXL for .NET</td><td>610,000</td></tr>
</tbody>
</table>
</body>
</html>
""";
// 1. Create a renderer once and reuse it across conversions
var renderer = new ChromePdfRenderer
{
RenderingOptions =
{
PaperSize = PdfPaperSize.A4, // ISO-standard paper size
PaperOrientation = PdfPaperOrientation.Portrait,
CssMediaType = PdfCssMediaType.Screen, // Respect on-screen CSS
RenderDelay = 100, // Wait 100 ms for JS/animations
FallbackEncoding = "utf-8" // Handle non-ASCII correctly
}
};
// 2. Render the HTML fragment
using PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
// 3. Persist to disk or return via ASP.NET Core FileStreamResult
pdf.SaveAs("q2-report.pdf");
// Program.cs — compatible with .NET 8 and newer
using IronPdf;
// Sample HTML fragment (could also be read from a file, Razor view, or CMS)
const string html = """
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Quarterly Report</title>
<style>
body { font-family:'Segoe UI', sans-serif; margin:1.2rem; }
header { margin-bottom:2rem; }
h1 { color:#3056d3; }
table { width:100%; border-collapse:collapse; margin-top:1rem; }
th,td { border:1px solid #ddd; padding:0.5rem; text-align:right; }
tr:nth-child(even){ background-color:#f8f9fa; }
</style>
</head>
<body>
<header><h1>Q2 Revenue Summary</h1></header>
<table>
<thead><tr><th>Product</th><th>Revenue ($)</th></tr></thead>
<tbody>
<tr><td>IronPDF for .NET</td><td>1,200,000</td></tr>
<tr><td>IronOCR for .NET</td><td>890,000</td></tr>
<tr><td>IronXL for .NET</td><td>610,000</td></tr>
</tbody>
</table>
</body>
</html>
""";
// 1. Create a renderer once and reuse it across conversions
var renderer = new ChromePdfRenderer
{
RenderingOptions =
{
PaperSize = PdfPaperSize.A4, // ISO-standard paper size
PaperOrientation = PdfPaperOrientation.Portrait,
CssMediaType = PdfCssMediaType.Screen, // Respect on-screen CSS
RenderDelay = 100, // Wait 100 ms for JS/animations
FallbackEncoding = "utf-8" // Handle non-ASCII correctly
}
};
// 2. Render the HTML fragment
using PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
// 3. Persist to disk or return via ASP.NET Core FileStreamResult
pdf.SaveAs("q2-report.pdf");
' Program.cs — compatible with .NET 8 and newer
Imports IronPdf
' Sample HTML fragment (could also be read from a file, Razor view, or CMS)
Private Const html As String = "<!DOCTYPE html>
<html lang=""en"">
<head>
<meta charset=""utf-8"">
<title>Quarterly Report</title>
<style>
body { font-family:'Segoe UI', sans-serif; margin:1.2rem; }
header { margin-bottom:2rem; }
h1 { color:#3056d3; }
table { width:100%; border-collapse:collapse; margin-top:1rem; }
th,td { border:1px solid #ddd; padding:0.5rem; text-align:right; }
tr:nth-child(even){ background-color:#f8f9fa; }
</style>
</head>
<body>
<header><h1>Q2 Revenue Summary</h1></header>
<table>
<thead><tr><th>Product</th><th>Revenue ($)</th></tr></thead>
<tbody>
<tr><td>IronPDF for .NET</td><td>1,200,000</td></tr>
<tr><td>IronOCR for .NET</td><td>890,000</td></tr>
<tr><td>IronXL for .NET</td><td>610,000</td></tr>
</tbody>
</table>
</body>
</html>"
' 1. Create a renderer once and reuse it across conversions
Private renderer = New ChromePdfRenderer With {
.RenderingOptions = {
PaperSize = PdfPaperSize.A4,
PaperOrientation = PdfPaperOrientation.Portrait,
CssMediaType = PdfCssMediaType.Screen,
RenderDelay = 100,
FallbackEncoding = "utf-8"
}
}
' 2. Render the HTML fragment
Private PdfDocument As using
' 3. Persist to disk or return via ASP.NET Core FileStreamResult
pdf.SaveAs("q2-report.pdf")
程式碼的示範內容
- 內建 Chromium — IronPDF 整合了 Chromium 引擎,確保 HTML5、CSS3 及 JavaScript 的相容性與現代瀏覽器一致。
- 單一依賴項 — 透過輕量級 NuGet 安裝即可支援 Windows、Linux、Docker 以及 Azure/AWS,無需額外系統函式庫。
- 渲染選項 —
CssMediaType及RenderDelay會模擬瀏覽器的 PRINT 設定,使 PDF 文件與螢幕上的版面配置相符。 - 未來兼容性 — .NET 8、.NET 9 STS 以及即將推出的 .NET 10 皆採用相同的 API 介面,因此長期維護工作量極低。
- 後處理掛鉤 —
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格式與窄邊距設計,讓居家列印的票券保持緊湊。 - 一致的 PRINT 樣式 —
CssMediaType = Print採用與瀏覽器相同的@media printCSS 規則。 - 二進位串流 —
pdf.BinaryData可在不接觸檔案系統的情況下串流傳輸文件; 非常適合用於 API 端點和 Lambda 函式。 - 可重複使用的渲染器 —
ChromePdfRenderer每控制台僅實例化一次,之後便重複使用,從而將進程啟動的開銷降至最低。
PaperSize, PaperOrientation, FitToPaperWidth
Margins, Header, Footer, Watermark
下一步:新增加密、數位簽章,或將多個票證合併為單一檔案。請參閱合併範例及數位簽章操作指南。
如何在渲染前微調紙張尺寸、邊距、頁首、浮水印及安全性設定?
IronPDF 提供單一 ChromePdfRenderOptions 物件,可控制輸出的各個面向——紙張尺寸、方向、頁首與頁尾、JavaScript 計時、浮水印、加密及數位簽章——且無需額外的瀏覽器外掛程式。
程式碼範例 — 一次套用多個選項
// AdvancedOptions.cs — .NET 8 compatible
using IronPdf;
var renderer = new ChromePdfRenderer();
// Configure everything in one place
renderer.RenderingOptions = new ChromePdfRenderOptions
{
// 1. Page layout
PaperSize = PdfPaperSize.A4, // ISO size
PaperOrientation = PdfPdfOrientation.Portrait,
Margins = new PdfMargins { Top = 20, Bottom = 25, Left = 15, Right = 15 }, // mm
// 2. Timing & media
CssMediaType = PdfCssMediaType.Print, // Respect @media print
EnableJavaScript = true,
RenderDelay = 200, // Wait 200 ms for animations
// 3. Headers & footers (HTML gives full design freedom)
HtmlHeader = "<header style='font:14px Segoe UI'>Invoice — {{date}}</header>",
HtmlFooter = "<footer style='text-align:right;font-size:10px'>Page {{page}} / {{total-pages}}</footer>",
// 4. Watermark
Watermark = new HtmlStamp
{
HtmlTemplate = "<div style='font-size:50px;color:#cccccc;opacity:0.3;'>CONFIDENTIAL</div>",
VerticalAlignment = VerticalAlignment.Center,
HorizontalAlignment = HorizontalAlignment.Center
},
// 5. Security
SecurityOptions = new PdfSecurityOptions
{
OwnerPassword = "StrongOwnerPwd!",
UserPassword = "ReadOnly",
AllowUserPrinting = false,
AllowUserCopyPasteContent = false
}
};
// Render any HTML
using PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Advanced Options Demo</h1>");
// Digitally sign with a PFX certificate (optional)
pdf.SignAndStamp("./certs/company.pfx", "Iron Software", "Bangkok", "Approval");
// Save
pdf.SaveAs("advanced-options-demo.pdf");
// AdvancedOptions.cs — .NET 8 compatible
using IronPdf;
var renderer = new ChromePdfRenderer();
// Configure everything in one place
renderer.RenderingOptions = new ChromePdfRenderOptions
{
// 1. Page layout
PaperSize = PdfPaperSize.A4, // ISO size
PaperOrientation = PdfPdfOrientation.Portrait,
Margins = new PdfMargins { Top = 20, Bottom = 25, Left = 15, Right = 15 }, // mm
// 2. Timing & media
CssMediaType = PdfCssMediaType.Print, // Respect @media print
EnableJavaScript = true,
RenderDelay = 200, // Wait 200 ms for animations
// 3. Headers & footers (HTML gives full design freedom)
HtmlHeader = "<header style='font:14px Segoe UI'>Invoice — {{date}}</header>",
HtmlFooter = "<footer style='text-align:right;font-size:10px'>Page {{page}} / {{total-pages}}</footer>",
// 4. Watermark
Watermark = new HtmlStamp
{
HtmlTemplate = "<div style='font-size:50px;color:#cccccc;opacity:0.3;'>CONFIDENTIAL</div>",
VerticalAlignment = VerticalAlignment.Center,
HorizontalAlignment = HorizontalAlignment.Center
},
// 5. Security
SecurityOptions = new PdfSecurityOptions
{
OwnerPassword = "StrongOwnerPwd!",
UserPassword = "ReadOnly",
AllowUserPrinting = false,
AllowUserCopyPasteContent = false
}
};
// Render any HTML
using PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Advanced Options Demo</h1>");
// Digitally sign with a PFX certificate (optional)
pdf.SignAndStamp("./certs/company.pfx", "Iron Software", "Bangkok", "Approval");
// Save
pdf.SaveAs("advanced-options-demo.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Configure everything in one place
renderer.RenderingOptions = New ChromePdfRenderOptions With {
' 1. Page layout
.PaperSize = PdfPaperSize.A4, ' ISO size
.PaperOrientation = PdfPdfOrientation.Portrait,
.Margins = New PdfMargins With {.Top = 20, .Bottom = 25, .Left = 15, .Right = 15}, ' mm
' 2. Timing & media
.CssMediaType = PdfCssMediaType.Print, ' Respect @media print
.EnableJavaScript = True,
.RenderDelay = 200, ' Wait 200 ms for animations
' 3. Headers & footers (HTML gives full design freedom)
.HtmlHeader = "<header style='font:14px Segoe UI'>Invoice — {{date}}</header>",
.HtmlFooter = "<footer style='text-align:right;font-size:10px'>Page {{page}} / {{total-pages}}</footer>",
' 4. Watermark
.Watermark = New HtmlStamp With {
.HtmlTemplate = "<div style='font-size:50px;color:#cccccc;opacity:0.3;'>CONFIDENTIAL</div>",
.VerticalAlignment = VerticalAlignment.Center,
.HorizontalAlignment = HorizontalAlignment.Center
},
' 5. Security
.SecurityOptions = New PdfSecurityOptions With {
.OwnerPassword = "StrongOwnerPwd!",
.UserPassword = "ReadOnly",
.AllowUserPrinting = False,
.AllowUserCopyPasteContent = False
}
}
' Render any HTML
Using pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Advanced Options Demo</h1>")
' Digitally sign with a PFX certificate (optional)
pdf.SignAndStamp("./certs/company.pfx", "Iron Software", "Bangkok", "Approval")
' Save
pdf.SaveAs("advanced-options-demo.pdf")
End Using
為何這些選項至關重要
Margins及CssMediaType模擬瀏覽器的列印對話方塊,因此螢幕版面配置與 PDF 檔案在 Windows、Linux 及 Docker 環境中皆保持一致。- HTML 頁首與頁尾支援 Razor 標記、CSS 及 JavaScript,非常適合用於動態頁碼或品牌標識。
HtmlStamp讓您僅需一行程式碼,即可建立具備完整 HTML + CSS 控制權的品牌浮水印。- 安全性選項可啟用 128 位元加密、擁有者/使用者密碼,以及無需第三方工具即可設定的細粒度權限。
- 數位簽章會在程式碼中直接添加加密印章,以確保法律上的真實性並提供防篡改證明。
- 諸如
ExtractAllText和ExtractAllImages等提取輔助工具,可在需要進行分析時逆向執行該流程。
快速參考 — 常用設定
PaperSize, PaperOrientation, Margins, CssMediaType, RenderDelay
`HtmlHeader`, `HtmlFooter`, 動態 Razor 佔位符, 頁碼標記
`Watermark`, `HtmlStamp`, 不透明度, 對齊方式
`SecurityOptions`, `SignAndStamp`, 擁有者/使用者密碼、憑證封印
後續任務:合併多個 PDF 檔案、擷取文字與圖片,並部署至 Docker 或無伺服器環境。 請繼續閱讀部署章節,以確保跨平台的一致性。
如何在 Linux 和 Windows 系統上將 PDF 生成程式碼部署至 Docker?
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 DLL 已內建,因此無需額外安裝套件。端到端驗證腳本
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,與第 2 節中的做法相同。 - IronPDF 會在容器內啟動其沙箱化的 Chromium 進程——由於採用無頭渲染,因此無需 X 伺服器。
- 即使在進行大規模渲染時,記憶體佔用量仍能維持在 200 MB 以下。
libnss3 與 libatk1.0-0 皆已存在。 (不支援 Alpine 映像檔,因為 musl C 函式庫缺少必要的符號。內部資源
- 教學 – 在 Docker 容器中部署 IronPDF
- 操作指南 – 在 Azure App Service Linux 上執行 IronPDF
- API 參考 –
ChromePdfRenderer類別
如何在 .NET Core 中開啟、合併、添加浮水印以及從現有 PDF 檔案中擷取內容?
IronPDF 將所有 PDF 檔案(無論是由 IronPDF、Adobe® Acrobat 或第三方工具產生)視為一級 PdfDocument 物件,可無損品質地開啟、編輯、設定安全性及重新儲存。 相同的 API 介面目前可在 .NET 8 LTS 上運作,並能在 .NET 9 預覽版及即將推出的 .NET 10 版本中無需修改即可編譯。
統一範例 — 開啟 → 合併 → 浮水印 → 擷取
// ManipulateExistingPdf.cs — .NET 8 LTS compatible
using IronPdf;
using System.Linq;
// Step 1: Open two existing files (password-protected PDFs are supported)
PdfDocument invoice = PdfDocument.FromFile("invoice.pdf", "ReadOnly"); // open with user pwd
PdfDocument tAndCs = PdfDocument.FromFile("terms.pdf"); // no pwd required
// Step 2: Merge them (invoice pages first, then T&Cs)
PdfDocument mergedPdf = PdfDocument.Merge(invoice, tAndCs); // 1-liner merge
// Step 3: Apply a diagonal CONFIDENTIAL watermark to every page
mergedPdf.ApplyStamp(
"<div style='font-size:60px;color:#d9534f;opacity:0.2;transform:rotate(-45deg);"
+ "width:100%;text-align:center;'>CONFIDENTIAL</div>",
verticalAlignment : VerticalAlignment.Center,
horizontalAlignment : HorizontalAlignment.Center);
// Step 4: Extract all text and the first image for audit purposes
string fullText = mergedPdf.ExtractAllText();
var image = mergedPdf.ExtractAllImages().FirstOrDefault();
// Step 5: Save or stream
mergedPdf.SaveAs("invoice-with-terms.pdf");
// ManipulateExistingPdf.cs — .NET 8 LTS compatible
using IronPdf;
using System.Linq;
// Step 1: Open two existing files (password-protected PDFs are supported)
PdfDocument invoice = PdfDocument.FromFile("invoice.pdf", "ReadOnly"); // open with user pwd
PdfDocument tAndCs = PdfDocument.FromFile("terms.pdf"); // no pwd required
// Step 2: Merge them (invoice pages first, then T&Cs)
PdfDocument mergedPdf = PdfDocument.Merge(invoice, tAndCs); // 1-liner merge
// Step 3: Apply a diagonal CONFIDENTIAL watermark to every page
mergedPdf.ApplyStamp(
"<div style='font-size:60px;color:#d9534f;opacity:0.2;transform:rotate(-45deg);"
+ "width:100%;text-align:center;'>CONFIDENTIAL</div>",
verticalAlignment : VerticalAlignment.Center,
horizontalAlignment : HorizontalAlignment.Center);
// Step 4: Extract all text and the first image for audit purposes
string fullText = mergedPdf.ExtractAllText();
var image = mergedPdf.ExtractAllImages().FirstOrDefault();
// Step 5: Save or stream
mergedPdf.SaveAs("invoice-with-terms.pdf");
' ManipulateExistingPdf.cs — .NET 8 LTS compatible
Imports IronPdf
Imports System.Linq
' Step 1: Open two existing files (password-protected PDFs are supported)
Private invoice As PdfDocument = PdfDocument.FromFile("invoice.pdf", "ReadOnly") ' open with user pwd
Private tAndCs As PdfDocument = PdfDocument.FromFile("terms.pdf") ' no pwd required
' Step 2: Merge them (invoice pages first, then T&Cs)
Private mergedPdf As PdfDocument = PdfDocument.Merge(invoice, tAndCs) ' 1-liner merge
' Step 3: Apply a diagonal CONFIDENTIAL watermark to every page
mergedPdf.ApplyStamp("<div style='font-size:60px;color:#d9534f;opacity:0.2;transform:rotate(-45deg);" & "width:100%;text-align:center;'>CONFIDENTIAL</div>", verticalAlignment := VerticalAlignment.Center, horizontalAlignment := HorizontalAlignment.Center)
' Step 4: Extract all text and the first image for audit purposes
Dim fullText As String = mergedPdf.ExtractAllText()
Dim image = mergedPdf.ExtractAllImages().FirstOrDefault()
' Step 5: Save or stream
mergedPdf.SaveAs("invoice-with-terms.pdf")
為何這很重要
- 開啟與合併 –
PdfDocument.FromFile可載入任何符合標準的 PDF 檔案(包括加密檔案),而PdfDocument.Merge則能在單次呼叫中將任意數量的文件進行串接。 - Watermark –
ApplyStamp(別名HtmlStamp)可在選定的頁面中嵌入完全格式化的 HTML/CSS 疊加層——例如標誌、QR 碼或對角線文字——且無需進行光柵化處理。 - 內容擷取 –
ExtractAllText與ExtractAllImages會擷取原始 UTF-8 文字或二進位影像串流,供後續歸檔或 AI 處理流程使用。 - 支援數位簽章 – 同一個
PdfDocument實例可透過SignAndStamp進行封存,產生符合 RFC 3161 標準的雜湊值,並符合 ISO 32000-2 數位簽章規範。 - 符合開放標準 – IronPDF 保留原始 PDF 結構(字型、圖層、XMP 元資料),因此輸出檔仍與 Adobe® Reader 及其他 ISO 32000-1 檢視器相容。
- 未來兼容性 – 此 API 避免使用互操作組件和 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 加密、鎖定 PRINT 權限,並添加可見簽名
// SecureAndSign.cs — .NET 8 LTS compatible
using IronPdf;
// Step 1: Load an existing PDF (or produce one with RenderHtmlAsPdf)
PdfDocument pdf = PdfDocument.FromFile("financial-report.pdf");
// Step 2: Configure AES-256 encryption & permissions
pdf.SecuritySettings = new PdfSecuritySettings
{
EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256Bit,
OwnerPassword = "IronAdmin!2025",
UserPassword = "ReadOnly",
AllowUserPrinting = PdfPrintSecurity.Disabled,
AllowUserCopyPasteContent = false,
AllowUserAnnotations = false
};
// Step 3: Digitally sign with a PFX certificate
pdf.SignAndStamp(
certificatePath : "./certs/ironsoftware.pfx",
authority : "Iron Software Ltd.",
location : "Chicago, IL",
reason : "Final approval"
);
// Step 4: Persist or stream
pdf.SaveAs("financial-report-secured-signed.pdf");
// SecureAndSign.cs — .NET 8 LTS compatible
using IronPdf;
// Step 1: Load an existing PDF (or produce one with RenderHtmlAsPdf)
PdfDocument pdf = PdfDocument.FromFile("financial-report.pdf");
// Step 2: Configure AES-256 encryption & permissions
pdf.SecuritySettings = new PdfSecuritySettings
{
EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256Bit,
OwnerPassword = "IronAdmin!2025",
UserPassword = "ReadOnly",
AllowUserPrinting = PdfPrintSecurity.Disabled,
AllowUserCopyPasteContent = false,
AllowUserAnnotations = false
};
// Step 3: Digitally sign with a PFX certificate
pdf.SignAndStamp(
certificatePath : "./certs/ironsoftware.pfx",
authority : "Iron Software Ltd.",
location : "Chicago, IL",
reason : "Final approval"
);
// Step 4: Persist or stream
pdf.SaveAs("financial-report-secured-signed.pdf");
' SecureAndSign.cs — .NET 8 LTS compatible
Imports IronPdf
' Step 1: Load an existing PDF (or produce one with RenderHtmlAsPdf)
Private pdf As PdfDocument = PdfDocument.FromFile("financial-report.pdf")
' Step 2: Configure AES-256 encryption & permissions
pdf.SecuritySettings = New PdfSecuritySettings With {
.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256Bit,
.OwnerPassword = "IronAdmin!2025",
.UserPassword = "ReadOnly",
.AllowUserPrinting = PdfPrintSecurity.Disabled,
.AllowUserCopyPasteContent = False,
.AllowUserAnnotations = False
}
' Step 3: Digitally sign with a PFX certificate
pdf.SignAndStamp(certificatePath := "./certs/ironsoftware.pfx", authority := "Iron Software Ltd.", location := "Chicago, IL", reason := "Final approval")
' Step 4: Persist or stream
pdf.SaveAs("financial-report-secured-signed.pdf")
幕後花絮
- 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 參考 –
PdfSecuritySettings
如何在 .NET Core 中優化並擴展 HTML 轉 PDF 的效能?
IronPDF 的 Chromium 引擎在現代硬體上渲染多數頁面已不到 1 秒,但透過批次渲染、啟用多執行緒以及削減 Headless Chrome 的開銷,可將處理量倍增。 以下提示同樣適用於所有 .NET 版本。
1. 在背景執行緒池中進行批次渲染
// BatchRender.cs — Thread-safe on .NET 8+
using IronPdf;
using System.Threading.Tasks;
var htmlSources = Directory.GetFiles("./html", "*.html");
var renderer = new ChromePdfRenderer(); // reuse 1 instance
Parallel.ForEach(htmlSources, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, file =>
{
string html = File.ReadAllText(file);
using PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(Path.ChangeExtension(file, ".pdf"));
});
// BatchRender.cs — Thread-safe on .NET 8+
using IronPdf;
using System.Threading.Tasks;
var htmlSources = Directory.GetFiles("./html", "*.html");
var renderer = new ChromePdfRenderer(); // reuse 1 instance
Parallel.ForEach(htmlSources, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, file =>
{
string html = File.ReadAllText(file);
using PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(Path.ChangeExtension(file, ".pdf"));
});
' BatchRender.cs — Thread-safe on .NET 8+
Imports IronPdf
Imports System.Threading.Tasks
Private htmlSources = Directory.GetFiles("./html", "*.html")
Private renderer = New ChromePdfRenderer() ' reuse 1 instance
Parallel.ForEach(htmlSources, New ParallelOptions With {.MaxDegreeOfParallelism = Environment.ProcessorCount}, Sub(file)
Dim html As String = File.ReadAllText(file)
Using pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs(Path.ChangeExtension(file, ".pdf"))
End Using
End Sub)
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,用以減少容器環境中的記憶體消耗及 root 使用者相關問題。
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 教學,了解自訂 Promise 和 DOM 輪詢。
4. 為單一請求啟用除錯記錄
renderer.LoggingOptions.DebugMode = true;
renderer.LoggingOptions.LogsToConsole = true;
renderer.LoggingOptions.LogFilePath = "./logs/ironpdf-debug.log";
renderer.LoggingOptions.DebugMode = true;
renderer.LoggingOptions.LogsToConsole = true;
renderer.LoggingOptions.LogFilePath = "./logs/ironpdf-debug.log";
renderer.LoggingOptions.DebugMode = True
renderer.LoggingOptions.LogsToConsole = True
renderer.LoggingOptions.LogFilePath = "./logs/ironpdf-debug.log"
Live DevTools 即時追蹤功能可在無需重新編譯程式碼的情況下,偵測缺失的字型、404 錯誤圖片及時間事件。
5. 重複使用範本 PDF 檔案,而非重新渲染
針對發票批次處理,請建立包含 [[name]] 等佔位符的 PDF 範本,並透過文字替換功能處理,而非重新建構複雜的 HTML 結構。 速度提升 10 倍,且記憶體佔用更少。
快速校對清單
`Parallel.ForEach`, `async/await`, 重複使用單一 `ChromePdfRenderer`
使用 `aspnet:8.0-jammy`; 安裝 `libnss3` + `libatk1.0-0`; 旗標 `--no-sandbox`, `--disable-gpu`
`RenderDelay`, `WaitFor()`, 記錄 DevTools 時間軸以追蹤單頁應用程式(SPA)的緩慢初始化
延伸閱讀
- 操作指南 – 使用非同步 / 多執行緒生成 PDF
- 疑難排解 – 效能支援中心
- 範例 – 多執行緒渲染示範
我該去哪裡下載免費試用版、選擇授權方案,以及尋求專家支援? {#anchor-10-resources}
透過 開始免費試用 表單,系統將立即發放 30 天試用金鑰,解鎖所有功能——包括 HTML 轉 PDF、數位簽章及加密功能——且不帶水印。
評估該函式庫後,請選擇永久開發者、部署或Enterprise授權; 每個方案均包含免費的小幅更新、開發/測試/生產環境的使用權限,以及 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/ |
即時聊天、電子郵件支援、電話支援 |
後續步驟
- 複製此範例儲存庫,其中展示了從 MVC 視圖渲染到 AES-256 加密等所有主要功能。
- 將試用金鑰套用至現有解決方案,並執行單元測試以驗證跨平台相容性。
- 預約與工程團隊進行現場演示,以獲取針對您專案的具體建議。
借助這些資源,任何 .NET 團隊都能在單一衝刺週期內,將像素級精準的 PDF 文件部署至生產環境——無論是本地部署、Docker 環境或無伺服器架構。
常見問題
如何在 .NET Core 中將 HTML 轉換為 PDF?
您可以在 .NET Core 中使用 IronPDF 函式庫將 HTML 轉換為 PDF。首先,安裝 IronPDF NuGet 套件,然後建立一個 ChromePdfRenderer 實例。使用 RenderHtmlAsPdf 方法將 HTML 字串轉換為 PDF。
如何將網站網址轉換為 PDF 文件?
若要將網站網址轉換為 PDF 文件,請安裝 IronPDF NuGet 套件,建立一個 ChromePdfRenderer 實例,並使用 RenderUrlAsPdf 方法將網址渲染為 PDF。可透過 SaveAs 方法儲存。
將 Razor 視圖轉換為 PDF 的最佳方法是什麼?
將 Razor 檢視轉換為 PDF 的最佳方式是使用 IronPDF。首先,將 Razor 檢視渲染為 HTML 字串,然後將此字串傳遞給 RenderHtmlAsPdf 方法以建立 PDF 文件。
如何提升 PDF 文件的安全性?
透過 IronPDF 應用 AES-256 加密、設定密碼及控制使用者權限,以強化 PDF 安全性。可透過 SecuritySettings 屬性進行設定,以限制PRINT和編輯等操作。
有哪些可用選項可自訂 PDF 渲染?
IronPDF 透過 ChromePdfRenderOptions 類別提供多種渲染選項,包括設定紙張尺寸、方向、邊距,以及套用 CSS 媒體類型。您亦可新增頁首、頁尾及浮水印,以客製化文件輸出。
如何在 Docker 容器中部署 PDF 生成應用程式?
若要在 Docker 容器中部署 PDF 生成應用程式,請在 Dockerfile 中設定 Linux 依賴項並設定使用者權限。使用 IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig 進行自動依賴項管理。
如何使用 C# 在 PDF 中加入浮水印?
您可以透過 IronPDF 並利用 Watermark 屬性並搭配 HtmlStamp 物件。若需進階選項, HtmlStamper 類別可實現自訂定位與透明度效果。
我可以為 PDF 文件添加數位簽名嗎?
是的,您可以使用 IronPdf 的 PdfSignature 類別。請使用 Sign 方法並 PdfDocument 並提供憑證檔案,以確保文件的完整性與真實性。
如何在 .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 檔案。

