如何在C#中將HTML轉換為PDF(開發者指南)
在 C# 中將 HTML 轉換為 PDF 通常看起來很簡單,直到實際需求出現。 開發人員很快就會遇到影響渲染精度、部署和可擴展性的限制。
除了渲染之外,基礎設施相容性也至關重要。 團隊必須確保 PDF 生成功能能夠在現代 .NET 運行時、雲端平台和容器化環境中正常運行,且不會影響效能。
為了彌補這些差距,現代基於 Chrome 的解決方案(如 IronPDF)提供了更高的渲染保真度、更廣泛的平台支援和可用於生產的部署工作流程——本指南的其餘部分將逐步探討這些內容。
TL;DR:HTML 轉 PDF 快速入門指南
您可透過 IronPDF 函式庫,輕鬆地在 C# 中將 HTML 轉換為 PDF。該函式庫提供 ChromePdfRenderer.RenderHtmlAsPdf 方法,能從 HTML、CSS 和 JavaScript 建立高品質的 PDF 檔案。
購買或註冊 IronPDF 30 天試用版後,請尋找寄送至您信箱的許可證金鑰。 請在申請開始時新增您的許可證密鑰。
IronPdf.License.LicenseKey = "KEY";
IronPdf.License.LicenseKey = "KEY";
Imports IronPdf
IronPdf.License.LicenseKey = "KEY"
為什麼.NET開發人員需要C#的HTML轉PDF轉換器
IronPDF 利用嵌入式 Google Chromium 渲染引擎來確保高保真轉換,準確地保留您的網頁內容的佈局和樣式。
✅強大的 Chrome 渲染引擎: Chrome 的 Blink 引擎可實現精確的 HTML 到 PDF 轉換,現在已針對內存、表單和渲染精度進行了修復 (v2025.9.4)
✅像素級精準度:產生的 PDF 檔案與網頁上的版本完全一致,而非列印友善版本。 最近的修復包括自訂頁首/頁腳裁剪、灰階文字保留以及元資料中的特殊字元/表情符號(截至 v2025.9.4)
✅全面支援現代 Web:全面支援 CSS3、HTML5 和 JavaScript,適用於所有 HTML 元素。 最近的增強包括對長文本區和複選框的表單欄位處理。
✅效能提升 5-20 倍:比瀏覽器自動化或 Web 驅動程式快得多,現在修復了記憶體洩漏問題,並減少了批次操作中重複元素(如印章/標題)的檔案大小。
✅ PDF/UA 合規性:產生符合第 508 節標準的無障礙 PDF,並針對跨平台(例如 Linux)表單渲染進行了增強。
✅無外部依賴:無需在伺服器上安裝任何可執行文件
✅ 專為運行在 .NET 10、9、8、7、6(Core、Standard 或 Framework)上的 C#、F# 和 VB.NET 而設計
IronPDF 簡化了 .NET 開發人員的工作流程,提供了一個簡單且有效率的解決方案,可以從 Web 應用程式的 HTML 產生外觀專業的 PDF 文件。 從發票和報表到憑證和檔案,開發人員可以使用他們熟悉的 Web 技術堆疊,而 IronPDF 只需幾行程式碼即可處理複雜的操作。
相關內容: IronPDF 更新日誌:更新、里程碑、路線圖
您將學到什麼
- [如何將 HTML 字串轉換為 PDF](#how-to-convert-html-string-to-pdf)
- [如何將現有 URL 匯出至 PDF](#how-to-export-existing-url-to-pdf)
- [如何將 HTML 檔案轉換為 PDF](#如何將 HTML 檔案轉換為 PDF)
[如何將Razor Pages 轉換為 PDF](#how-to-convert-razor-pages-to-pdf)
[如何將 MVC 視圖轉換為 PDF](#how-to-convert-mvc-views-to-pdf)
2.如何配置 HTML 轉 PDF 設定 如何設定自訂 HTTP 標頭、Cookie 和登入憑證 如何配置用於 PDF 渲染的代理
- [ 如何為批量 PDF 創建生成 HTML 模板](#how-to-generate-html-template-for-batch-pdf-creation)。
- [如何使用 Async 方法生成 PDF](#how-to-generate-pdf-using-async-method)
- [如何新增進階安全功能](#如何新增進階安全功能)。
[如何將HTML表單轉換為可填寫PDF](#how-to-convert-html-forms-to-fillable-pdfs)
[如何將特定的 HTML 元素轉換為 PDF](#how-to-convert-specific-html-elements-to-pdf)
[如何將已認證頁面渲染為 PDF](#how-to-render-authenticated-pages-to-pdf)
4.如何在雲端平台上將 HTML 部署為 PDF -如何在 Azure 上部署 -如何在 AWS Lambda 上部署 如何使用 Docker 進行部署
- 快速決策矩陣:IronPDF 對比其他 .NET PDF 轉換器。
- Detailed Comparison:IronPDF 與其他 .NET PDF Converters 的比較。
- Real-life HTML to PDF Conversion Comparison:渲染 Reddit 的首頁。
- 性能和 PDF 輸出品質的結論
- 摘要
1. How to Convert HTML to PDF C
無論您是處理 HTML 字串、URL 還是 HTML 文件,IronPDF 都提供靈活的選項來產生符合您特定要求的高品質 PDF 文件。
在本教程中,我們將帶您了解最常見的場景,包括 HTML 字串轉 PDF、URL 轉 PDF 和 HTML 檔案轉 PDF。 此外,IronPDF 還提供了多種用於操作 PDF 文件的功能:
| 多功能 PDF 轉換 | 動態網頁轉 PDF |
|---|---|
如何將 HTML 字串轉換為 PDF
最基本的操作是將 HTML 字串轉換為 PDF。 這種方法非常適合動態產生的HTML內容。 當您直接將 HTML 轉換為 PDF 時,RenderHtmlAsPdf 方法可完全支援 HTML5、CSS3、JavaScript 及圖片。
using IronPdf;
// Create the Chrome renderer
var renderer = new ChromePdfRenderer();
// Convert HTML string to PDF
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");
// Save the PDF
pdf.SaveAs("output.pdf");
using IronPdf;
// Create the Chrome renderer
var renderer = new ChromePdfRenderer();
// Convert HTML string to PDF
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");
// Save the PDF
pdf.SaveAs("output.pdf");
Imports IronPdf
' Create the Chrome renderer
Dim renderer As New ChromePdfRenderer()
' Convert HTML string to PDF
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>")
' Save the PDF
pdf.SaveAs("output.pdf")
效能
IronPDF 將字串、URL 和 HTML 轉換為 PDF 的效能,是使用配備 16GB 記憶體的聯想筆記型電腦進行測試的。 測試文件是一份 3 頁的 Enterprise 發票,其中包含標準的 CSS Grid、漸層效果以及多區段表格。
翻譯結果如下:
| 指標 | 價值 |
|---|---|
| 平均渲染時間 | ~486 毫秒 |
| 每次渲染的記憶體用量 | ~3.6 MB |
測量基準為在 16 核心工作站(Windows 11、.NET 8)上連續執行 5 次渲染。 首次呼叫還包含一次性的 Chromium 引擎初始化(約 1.3 秒)
我第一次執行測試時,渲染速度相當緩慢(每次呼叫需耗時超過一秒!)。 觀察情況後,我發現當時有多個 Chromium 執行個體同時運行,且裝置正處於電池供電狀態,這兩項因素都導致該函式庫無法展現其真正的速度。 關閉競爭程序並重新啟動後,效能明顯提升:暖機測試平均耗時約 486 毫秒,最快紀錄接近 473 毫秒。
當您的 HTML 字串引用圖片或樣式表等本地資源時,請使用 BaseUrlPath 參數,以正確轉換包含所有資源的 HTML 內容:
using IronPdf;
var renderer = new ChromePdfRenderer();
// Convert HTML content with local image and CSS references
string html = @"
<link rel='stylesheet' href='styles.css'>
<img src='logo.png' alt='Company Logo'>
<h1>Company Report</h1>
<p>Annual report content...</p>";
// Set base path for resolving relative URLs in HTML to PDF conversion
var pdf = renderer.RenderHtmlAsPdf(html, @"C:\MyProject\Assets\");
pdf.SaveAs("report.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Convert HTML content with local image and CSS references
string html = @"
<link rel='stylesheet' href='styles.css'>
<img src='logo.png' alt='Company Logo'>
<h1>Company Report</h1>
<p>Annual report content...</p>";
// Set base path for resolving relative URLs in HTML to PDF conversion
var pdf = renderer.RenderHtmlAsPdf(html, @"C:\MyProject\Assets\");
pdf.SaveAs("report.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Convert HTML content with local image and CSS references
Dim html As String = "
<link rel='stylesheet' href='styles.css'>
<img src='logo.png' alt='Company Logo'>
<h1>Company Report</h1>
<p>Annual report content...</p>"
' Set base path for resolving relative URLs in HTML to PDF conversion
Dim pdf = renderer.RenderHtmlAsPdf(html, "C:\MyProject\Assets\")
pdf.SaveAs("report.pdf")
BaseUrlPath 參數,讓您能將相對路徑指向正確的目錄,因此通常只需在批量執行前快速檢查輸出結果,即可發現此問題。如何將現有 URL 匯出為 PDF
using C# 將整個網頁渲染成 PDF 可以讓團隊將 PDF 設計和後端渲染工作分開。 此方法可讓您將任何指定的 URL 直接轉換為 PDF 格式。
列印與螢幕 CSS
您可以配置 IronPDF 使用 CSS 媒體類型進行渲染。
using IronPdf;
using IronPdf.Rendering;
// Initialize HTML to PDF converter
var renderer = new ChromePdfRenderer();
// Configure CSS media type for rendering specified URLs
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
// Screen media type shows the entire web page as displayed on screen
using IronPdf;
using IronPdf.Rendering;
// Initialize HTML to PDF converter
var renderer = new ChromePdfRenderer();
// Configure CSS media type for rendering specified URLs
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
// Screen media type shows the entire web page as displayed on screen
Imports IronPdf
Imports IronPdf.Rendering
' Initialize HTML to PDF converter
Dim renderer As New ChromePdfRenderer()
' Configure CSS media type for rendering specified URLs
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
' Screen media type shows the entire web page as displayed on screen
JavaScript 支援
IronPDF 將 HTML 轉換為 PDF 時,完全支援 JavaScript、jQuery 甚至 AJAX。 對於動態 HTML 內容,您可以設定 IronPDF 等待 JavaScript 執行完畢後再將網頁渲染成 PDF。 這非常適合單頁應用程式和動態網站。
using IronPdf;
// Configure JavaScript rendering for dynamic HTML content to PDF
var renderer = new ChromePdfRenderer();
// Enable JavaScript execution during PDF generation
renderer.RenderingOptions.EnableJavaScript = true;
// WaitFor.RenderDelay pauses before capturing the HTML
renderer.RenderingOptions.WaitFor.RenderDelay = 500; // milliseconds
using IronPdf;
// Configure JavaScript rendering for dynamic HTML content to PDF
var renderer = new ChromePdfRenderer();
// Enable JavaScript execution during PDF generation
renderer.RenderingOptions.EnableJavaScript = true;
// WaitFor.RenderDelay pauses before capturing the HTML
renderer.RenderingOptions.WaitFor.RenderDelay = 500; // milliseconds
Imports IronPdf
' Configure JavaScript rendering for dynamic HTML content to PDF
Dim renderer As New ChromePdfRenderer()
' Enable JavaScript execution during PDF generation
renderer.RenderingOptions.EnableJavaScript = True
' WaitFor.RenderDelay pauses before capturing the HTML
renderer.RenderingOptions.WaitFor.RenderDelay = 500 ' milliseconds
當網頁上的進階 d3.js 和弦圖渲染成 PDF 格式時,也可以顯示 JavaScript 執行情況:
using IronPdf;
// Create renderer for JavaScript-heavy HTML
var renderer = new ChromePdfRenderer();
// Convert d3.js visualization web page to PDF
var pdf = renderer.RenderUrlAsPdf("https://bl.ocks.org/mbostock/4062006");
// Save the interactive chart as static PDF
pdf.SaveAs("chart.pdf");
using IronPdf;
// Create renderer for JavaScript-heavy HTML
var renderer = new ChromePdfRenderer();
// Convert d3.js visualization web page to PDF
var pdf = renderer.RenderUrlAsPdf("https://bl.ocks.org/mbostock/4062006");
// Save the interactive chart as static PDF
pdf.SaveAs("chart.pdf");
Imports IronPdf
' Create renderer for JavaScript-heavy HTML
Dim renderer As New ChromePdfRenderer()
' Convert d3.js visualization web page to PDF
Dim pdf = renderer.RenderUrlAsPdf("https://bl.ocks.org/mbostock/4062006")
' Save the interactive chart as static PDF
pdf.SaveAs("chart.pdf")
響應式 CSS
由於響應式網頁是設計用於在瀏覽器中檢視,而 IronPDF 不會在伺服器的作業系統中開啟真正的瀏覽器視窗,因此響應式 HTML 元素可能會以最小尺寸呈現。建議使用 PdfCssMediaType.Print 來處理渲染整個網頁時所面臨的此問題。
// Configure for optimal responsive design handling in HTML to PDF
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
// Configure for optimal responsive design handling in HTML to PDF
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
```vbnet
' Configure for optimal responsive design handling in HTML to PDF
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
```
相關教學:如何將 URL 渲染為 PDF
如何將HTML檔案轉換為PDF
將本機 HTML 檔案轉換為 PDF 時,會保留所有相關資源,包括 CSS、圖片和 JavaScript,就像使用 file:// 協定開啟一樣。 這種 HTML 轉 PDF 方法最適合將範本或預先設計的 HTML 頁面轉換為 PDF 文件。
using IronPdf;
// Initialize ChromePdfRenderer for HTML file conversion
var renderer = new ChromePdfRenderer();
// Convert HTML file to PDF documents
// Preserves all relative paths and linked resources in HTML
var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");
// Save the HTML file as PDF
pdf.SaveAs("Invoice.pdf");
// All CSS, JavaScript, and images load correctly in the generated PDF
using IronPdf;
// Initialize ChromePdfRenderer for HTML file conversion
var renderer = new ChromePdfRenderer();
// Convert HTML file to PDF documents
// Preserves all relative paths and linked resources in HTML
var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");
// Save the HTML file as PDF
pdf.SaveAs("Invoice.pdf");
// All CSS, JavaScript, and images load correctly in the generated PDF
Imports IronPdf
' Initialize ChromePdfRenderer for HTML file conversion
Dim renderer As New ChromePdfRenderer()
' Convert HTML file to PDF documents
' Preserves all relative paths and linked resources in HTML
Dim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")
' Save the HTML file as PDF
pdf.SaveAs("Invoice.pdf")
' All CSS, JavaScript, and images load correctly in the generated PDF
效能
我們再次透過將所有變數設定為恆定值,並從磁碟檔案載入先前那份 3 頁的 Enterprise 發票來進行效能測試:
| 指標 | 價值 |
|---|---|
| 平均渲染時間 | ~502 毫秒 |
| 每次渲染的記憶體用量 | ~3.1 MB |
測量基準為在同一台 16 核心工作站(Windows 11、.NET 8)上連續執行 5 次渲染。 基於檔案的渲染與記憶體內字串渲染的誤差約在 3% 內; 從磁碟讀取 HTML 並不會增加可測量的開銷。
將 HTML 檔案及其資源(CSS、圖像)放在單獨的資料夾中,以便在將 HTML 檔案轉換為 PDF 之前在瀏覽器中進行編輯和測試。 這樣可以確保您的 HTML 程式碼完美渲染,從而產生高品質的 PDF 文件。
相關的 HOW-TO 文章: 將 HTML 檔案渲染為 PDF
如何將Razor Pages 轉換為 PDF
如果您的ASP.NET Core專案已經使用了Razor Pages,您可以直接將其轉換為 PDF,而無需重新建置 HTML。 IronPDF 的 Razor 擴充套件新增了 RenderRazorToPdf 方法,該方法能透過單一呼叫,將您的 .cshtml 頁面(包含其模型與版面配置)渲染為 PDF 文件。
PM > Install-包裹 IronPdf.Extensions.Razor
PM > Install-包裹 IronPdf.Extensions.Razor
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
public class ReportModel : PageModel
{
public IActionResult OnGet()
{
var renderer = new ChromePdfRenderer();
// Render a Razor Page directly to PDF
PdfDocument pdf = renderer.RenderRazorToPdf(this);
Response.Headers.Add("Content-Disposition", "inline");
return new FileContentResult(pdf.BinaryData, "application/pdf");
}
}
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
public class ReportModel : PageModel
{
public IActionResult OnGet()
{
var renderer = new ChromePdfRenderer();
// Render a Razor Page directly to PDF
PdfDocument pdf = renderer.RenderRazorToPdf(this);
Response.Headers.Add("Content-Disposition", "inline");
return new FileContentResult(pdf.BinaryData, "application/pdf");
}
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.AspNetCore.Mvc.RazorPages
Public Class ReportModel
Inherits PageModel
Public Function OnGet() As IActionResult
Dim renderer As New ChromePdfRenderer()
' Render a Razor Page directly to PDF
Dim pdf As PdfDocument = renderer.RenderRazorToPdf(Me)
Response.Headers.Add("Content-Disposition", "inline")
Return New FileContentResult(pdf.BinaryData, "application/pdf")
End Function
End Class
如何將 MVC 視圖轉換為 PDF
using MVC 模式的團隊可以直接從現有的視圖和控制器產生 PDF。 安裝 MVC Core 擴充套件,然後傳入您的檢視路徑和模型來呼叫 RenderRazorViewToPdf — IronPDF 會處理 Razor 渲染流程,並輸出完整的 PDF 檔案。
這對於報告、發票以及任何 HTML 已經在瀏覽器中設計和測試過的頁面尤其有用。 產生的 PDF 檔案保留了完整的視圖輸出,包括佈局頁面和局部視圖。
PM > Install-包裹 IronPdf.Extensions.Mvc.Co/re
PM > Install-包裹 IronPdf.Extensions.Mvc.Co/re
首先,請在 Program.cs 中註冊 IRazorViewRenderer 服務,以便您的控制器能夠注入該服務:
using IronPdf.Extensions.Mvc.Co/re;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
// Register the Razor view renderer for IronPDF
builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.Services.AddSingleton<IRazorViewRenderer, RazorViewRenderer>();
using IronPdf.Extensions.Mvc.Co/re;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
// Register the Razor view renderer for IronPDF
builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.Services.AddSingleton<IRazorViewRenderer, RazorViewRenderer>();
Imports IronPdf.Extensions.Mvc.Core
Dim builder = WebApplication.CreateBuilder(args)
builder.Services.AddControllersWithViews()
' Register the Razor view renderer for IronPDF
builder.Services.AddSingleton(Of IHttpContextAccessor, HttpContextAccessor)()
builder.Services.AddSingleton(Of IRazorViewRenderer, RazorViewRenderer)()
然後,在控制器操作中,注入渲染器並將任何視圖轉換為 PDF:
using IronPdf;
using IronPdf.Extensions.Mvc.Co/re;
using Microsoft.AspNetCore.Mvc;
public class ReportController : Controller
{
private readonly IRazorViewRenderer _viewRenderService;
// Inject the view renderer via constructor
public ReportController(IRazorViewRenderer viewRenderService)
{
_viewRenderService = viewRenderService;
}
public IActionResult Download()
{
var reportModel = new { Title = "Quarterly Report", Total = 1250.00 };
var renderer = new ChromePdfRenderer();
// Render an MVC View with model data to PDF
PdfDocument pdf = renderer.RenderRazorViewToPdf(
_viewRenderService, "Views/Home/Report.cshtml", reportModel);
Response.Headers.Add("Content-Disposition", "inline");
return new FileContentResult(pdf.BinaryData, "application/pdf");
}
}
using IronPdf;
using IronPdf.Extensions.Mvc.Co/re;
using Microsoft.AspNetCore.Mvc;
public class ReportController : Controller
{
private readonly IRazorViewRenderer _viewRenderService;
// Inject the view renderer via constructor
public ReportController(IRazorViewRenderer viewRenderService)
{
_viewRenderService = viewRenderService;
}
public IActionResult Download()
{
var reportModel = new { Title = "Quarterly Report", Total = 1250.00 };
var renderer = new ChromePdfRenderer();
// Render an MVC View with model data to PDF
PdfDocument pdf = renderer.RenderRazorViewToPdf(
_viewRenderService, "Views/Home/Report.cshtml", reportModel);
Response.Headers.Add("Content-Disposition", "inline");
return new FileContentResult(pdf.BinaryData, "application/pdf");
}
}
Imports IronPdf
Imports IronPdf.Extensions.Mvc.Core
Imports Microsoft.AspNetCore.Mvc
Public Class ReportController
Inherits Controller
Private ReadOnly _viewRenderService As IRazorViewRenderer
' Inject the view renderer via constructor
Public Sub New(viewRenderService As IRazorViewRenderer)
_viewRenderService = viewRenderService
End Sub
Public Function Download() As IActionResult
Dim reportModel = New With {.Title = "Quarterly Report", .Total = 1250.0}
Dim renderer = New ChromePdfRenderer()
' Render an MVC View with model data to PDF
Dim pdf As PdfDocument = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Report.cshtml", reportModel)
Response.Headers.Add("Content-Disposition", "inline")
Return New FileContentResult(pdf.BinaryData, "application/pdf")
End Function
End Class
相關操作指南文章:如何在ASP.NET Core MVC 中將視圖轉換為 PDF
2. 如何配置 HTML 轉 PDF 設定
在處理 PDF 文件方面,IronPDF 透過 ChromePdfRenderer.RenderingOptions 屬性,為渲染後的 PDF 文件提供廣泛的自訂功能。
| 設定 | 描述 | 範例 |
|---|---|---|
PaperSize
|
設定現有PDF文件的頁面尺寸(A4、Letter、Legal等) |
PdfPaperSize.A4。
|
PaperOrientation
|
將現有 PDF 設定為縱向或橫向。 |
PdfPaperOrientation.Landscape。
|
上/下/左/右邊距
|
設定頁面邊距,單位為毫米(預設值:25毫米) | |
CssMediaType
|
用於 HTML 轉 PDF 的螢幕或列印 CSS |
PdfCssMediaType.Print。
|
PrintHtmlBackgrounds
|
包含背景顏色/圖像(預設值:true) | 真實 |
啟用 JavaScript
|
在渲染 HTML 內容之前執行 JavaScript 程式碼 | 真實 |
WaitFor.RenderDelay
|
動態 HTML 內容等待時間(毫秒) | 500 |
請參閱以下程式碼片段,以了解操作 PDF 文件的完整設定範例:
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Apply print-specific CSS rules
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
// Set custom margins in millimeters
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
// Enable background colors and images
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
// Set paper size and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
// Generate PDFs with all settings applied to HTML content
var htmlContent = "<div style='background-color: #f0f0f0; padding: 20px;'><h1>Styled Content</h1></div>";
var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
pdfDocument.SaveAs("styled-output.pdf");
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Apply print-specific CSS rules
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
// Set custom margins in millimeters
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
// Enable background colors and images
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
// Set paper size and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
// Generate PDFs with all settings applied to HTML content
var htmlContent = "<div style='background-color: #f0f0f0; padding: 20px;'><h1>Styled Content</h1></div>";
var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
pdfDocument.SaveAs("styled-output.pdf");
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer As New ChromePdfRenderer()
' Apply print-specific CSS rules
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
' Set custom margins in millimeters
renderer.RenderingOptions.MarginTop = 50
renderer.RenderingOptions.MarginBottom = 50
' Enable background colors and images
renderer.RenderingOptions.PrintHtmlBackgrounds = True
' Set paper size and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
' Generate PDFs with all settings applied to HTML content
Dim htmlContent As String = "<div style='background-color: #f0f0f0; padding: 20px;'><h1>Styled Content</h1></div>"
Dim pdfDocument As PdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
pdfDocument.SaveAs("styled-output.pdf")
相關操作指南文章:
| 客製化 PDF 轉換 | 精緻 PDF 佈局 |
|---|---|
如何設定自訂 HTTP 標頭、Cookie 和登入憑證
在渲染需要驗證或特定請求元資料的 URL 時, IronPDF可讓您將登入憑證、會話 cookie 和 HTTP 標頭包含在請求中。這使得可以直接將內網儀表板、受限報表或 API 產生的頁面渲染為 PDF,而無需單獨取得 HTML。
若需進行基本或 NTLM 驗證,請在渲染器上設定 LoginCredentials 物件。 對於基於憑證或基於會話的存取,請在呼叫 RenderUrlAsPdf 之前,將 Cookie 和標頭透過 RenderingOptions 傳遞。
using IronPdf;
var renderer = new ChromePdfRenderer();
// Network authentication (Basic, Digest, NTLM)
renderer.LoginCredentials = new ChromeHttpLoginCredentials
{
NetworkUsername = "user@domain.com",
NetworkPassword = "securePassword"
};
// Session cookies for authenticated pages
renderer.RenderingOptions.CustomCookies["sessionId"] = "abc123";
// Custom HTTP headers (e.g., Bearer tokens, API keys)
renderer.RenderingOptions.CustomHttpRequestHeaders["Authorization"] = "Bearer eyJhbGciOi...";
var pdf = renderer.RenderUrlAsPdf("https://intranet.com/pany.com/quarterly-report");
pdf.SaveAs("quarterly-report.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Network authentication (Basic, Digest, NTLM)
renderer.LoginCredentials = new ChromeHttpLoginCredentials
{
NetworkUsername = "user@domain.com",
NetworkPassword = "securePassword"
};
// Session cookies for authenticated pages
renderer.RenderingOptions.CustomCookies["sessionId"] = "abc123";
// Custom HTTP headers (e.g., Bearer tokens, API keys)
renderer.RenderingOptions.CustomHttpRequestHeaders["Authorization"] = "Bearer eyJhbGciOi...";
var pdf = renderer.RenderUrlAsPdf("https://intranet.com/pany.com/quarterly-report");
pdf.SaveAs("quarterly-report.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Network authentication (Basic, Digest, NTLM)
renderer.LoginCredentials = New ChromeHttpLoginCredentials With {
.NetworkUsername = "user@domain.com",
.NetworkPassword = "securePassword"
}
' Session cookies for authenticated pages
renderer.RenderingOptions.CustomCookies("sessionId") = "abc123"
' Custom HTTP headers (e.g., Bearer tokens, API keys)
renderer.RenderingOptions.CustomHttpRequestHeaders("Authorization") = "Bearer eyJhbGciOi..."
Dim pdf = renderer.RenderUrlAsPdf("https://intranet.com/pany.com/quarterly-report")
pdf.SaveAs("quarterly-report.pdf")
相關操作指南文章:如何在登入驗證後渲染 PDF | 自訂 HTTP 請求標頭
如何配置PDF渲染的代理
當渲染需透過企業代理伺服器載入外部資源的 HTML 時,請將代理伺服器地址作為 RenderHtmlAsPdf() 的第三個參數傳入。 這是方法參數,而非 ChromePdfRenderOptions 上的屬性 —— 因此它是針對每次渲染呼叫設定的,而非在渲染器實例上設定。
對於需驗證的代理伺服器,請使用 http://user:pass@host:port 格式將憑證直接嵌入 URL 中。 請使用 Uri.EscapeDataString() 對密碼中的特殊字元進行 URL 編碼。
using IronPdf;
var renderer = new ChromePdfRenderer();
// Proxy is the third parameter — not a render option
PdfDocument pdf = renderer.RenderHtmlAsPdf(
"<h1>Report</h1><link rel='stylesheet' href='https://cdn.example.com/styles.css'>",
baseUrlOrPath: null,
proxy: "http://proxy.co/rp.local:8080"
);
pdf.SaveAs("proxied-report.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Proxy is the third parameter — not a render option
PdfDocument pdf = renderer.RenderHtmlAsPdf(
"<h1>Report</h1><link rel='stylesheet' href='https://cdn.example.com/styles.css'>",
baseUrlOrPath: null,
proxy: "http://proxy.co/rp.local:8080"
);
pdf.SaveAs("proxied-report.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Proxy is the third parameter — not a render option
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(
"<h1>Report</h1><link rel='stylesheet' href='https://cdn.example.com/styles.css'>",
baseUrlOrPath:=Nothing,
proxy:="http://proxy.co/rp.local:8080"
)
pdf.SaveAs("proxied-report.pdf")
請注意,RenderUrlAsPdf() 不接受代理參數。 若要透過代理伺服器渲染動態網址,請先使用設定了 WebProxy 的 HttpClient 擷取 HTML,然後將其傳遞給 RenderHtmlAsPdf(),並附上代理參數以載入資源。
相關操作指南文章:如何設定 PDF 渲染的代理伺服器
3. 如何使用進階 PDF 產生和安全功能
利用進階模板、非同步操作和安全功能,解鎖企業級 HTML 轉 PDF 轉換功能。 這些 PDF 處理方法可讓您大規模建立 PDF 文檔,保護敏感的 PDF 文件,並在將 HTML 轉換為專業 PDF 格式時確保文檔的真實性。
如何產生用於批次建立 PDF 的 HTML 模板
基本的批次PDF創建
大量建立 PDF 對於高效產生多個個人化 PDF 文件至關重要。 針對基本情境,C# 中的 String.Format 方法最適合用於簡單的 PDF 處理。
// Simple HTML templating with String.Format
string htmlTemplate = String.Format("<h1>Hello {0}!</h1>", "World");
// Results in HTML content: <h1>Hello World!</h1>
// Simple HTML templating with String.Format
string htmlTemplate = String.Format("<h1>Hello {0}!</h1>", "World");
// Results in HTML content: <h1>Hello World!</h1>
' Simple HTML templating with String.Format
Dim htmlTemplate As String = String.Format("<h1>Hello {0}!</h1>", "World")
' Results in HTML content: <h1>Hello World!</h1>
對於需要產生 PDF 文件的較長模板,請在 HTML 內容中使用佔位符替換:
using IronPdf;
// Define reusable HTML template for PDF files
var htmlTemplate = "<p>Dear [[NAME]],</p><p>Thank you for your order.</p>";
// Customer names for batch PDF conversion processing
var names = new[] { "John", "James", "Jenny" };
// Create personalized PDF documents for each customer
var renderer = new ChromePdfRenderer();
foreach (var name in names)
{
// Replace placeholder with actual data in HTML string
var htmlInstance = htmlTemplate.Replace("[[NAME]]", name);
// Generate personalized PDF document from HTML content
var pdf = renderer.RenderHtmlAsPdf(htmlInstance);
// Save with customer-specific filename as PDF files
pdf.SaveAs($"{name}-invoice.pdf");
}
using IronPdf;
// Define reusable HTML template for PDF files
var htmlTemplate = "<p>Dear [[NAME]],</p><p>Thank you for your order.</p>";
// Customer names for batch PDF conversion processing
var names = new[] { "John", "James", "Jenny" };
// Create personalized PDF documents for each customer
var renderer = new ChromePdfRenderer();
foreach (var name in names)
{
// Replace placeholder with actual data in HTML string
var htmlInstance = htmlTemplate.Replace("[[NAME]]", name);
// Generate personalized PDF document from HTML content
var pdf = renderer.RenderHtmlAsPdf(htmlInstance);
// Save with customer-specific filename as PDF files
pdf.SaveAs($"{name}-invoice.pdf");
}
Imports IronPdf
' Define reusable HTML template for PDF files
Dim htmlTemplate As String = "<p>Dear [[NAME]],</p><p>Thank you for your order.</p>"
' Customer names for batch PDF conversion processing
Dim names As String() = {"John", "James", "Jenny"}
' Create personalized PDF documents for each customer
Dim renderer As New ChromePdfRenderer()
For Each name In names
' Replace placeholder with actual data in HTML string
Dim htmlInstance As String = htmlTemplate.Replace("[[NAME]]", name)
' Generate personalized PDF document from HTML content
Dim pdf = renderer.RenderHtmlAsPdf(htmlInstance)
' Save with customer-specific filename as PDF files
pdf.SaveAs($"{name}-invoice.pdf")
Next
使用 Handlebars.NET 實作 HTML 到 PDF 的模板化
若在將 HTML 轉換為 PDF 時遇到包含迴圈與條件語句的複雜範本,請使用 Handlebars.NET 進行進階範本處理,以產生包含動態 HTML 內容的 PDF 文件。
# First, install Handlebars.NET for HTML to PDF templating
PM > Install-包裹 Handlebars.NET
# First, install Handlebars.NET for HTML to PDF templating
PM > Install-包裹 Handlebars.NET
using HandlebarsDotNet;
using IronPdf;
// Define Handlebars template with placeholders for HTML content
var source =
@"<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>";
// Compile template for reuse in PDF conversion
var template = Handlebars.Com/pile(source);
// Create data object (can be database records) for HTML to PDF directly
var data = new {
title = "Monthly Report",
body = "Sales increased by 15% this month."
};
// Merge template with data to create HTML content
var htmlResult = template(data);
// Convert templated HTML to PDF using the PDF converter
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlResult);
pdf.SaveAs("monthly-report.pdf");
using HandlebarsDotNet;
using IronPdf;
// Define Handlebars template with placeholders for HTML content
var source =
@"<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>";
// Compile template for reuse in PDF conversion
var template = Handlebars.Com/pile(source);
// Create data object (can be database records) for HTML to PDF directly
var data = new {
title = "Monthly Report",
body = "Sales increased by 15% this month."
};
// Merge template with data to create HTML content
var htmlResult = template(data);
// Convert templated HTML to PDF using the PDF converter
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlResult);
pdf.SaveAs("monthly-report.pdf");
Imports HandlebarsDotNet
Imports IronPdf
' Define Handlebars template with placeholders for HTML content
Dim source As String =
"<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>"
' Compile template for reuse in PDF conversion
Dim template = Handlebars.Compile(source)
' Create data object (can be database records) for HTML to PDF directly
Dim data = New With {
.title = "Monthly Report",
.body = "Sales increased by 15% this month."
}
' Merge template with data to create HTML content
Dim htmlResult = template(data)
' Convert templated HTML to PDF using the PDF converter
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlResult)
pdf.SaveAs("monthly-report.pdf")
相關操作文章: 在GitHub上了解更多關於Handlebars.NET
控制PDF分頁符號:
在轉換 HTML 程式碼片段時,管理產生的 PDF 文件中的分頁可確保獲得專業且易於閱讀的版面配置。使用 CSS 控制 PDF 檔案中的頁面分隔位置。<!DOCTYPE html>
<html>
<head>
<style type="text/css" media="print">
.page {
page-break-after: always;
page-break-inside: avoid;
}
</style>
</head>
<body>
<div class="page">
<h1>Page 1 Content</h1>
</div>
<div class="page">
<h1>Page 2 Content</h1>
</div>
<div class="page">
<h1>Page 3 Content</h1>
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<style type="text/css" media="print">
.page {
page-break-after: always;
page-break-inside: avoid;
}
</style>
</head>
<body>
<div class="page">
<h1>Page 1 Content</h1>
</div>
<div class="page">
<h1>Page 2 Content</h1>
</div>
<div class="page">
<h1>Page 3 Content</h1>
</div>
</body>
</html>
如何使用非同步方法產生 PDF
IronPDF 提供企業級效能,全面支援非同步和多線程,滿足您大規模產生 PDF 檔案時對 HTML 到 PDF 轉換的需求。
using IronPdf;
using System.Co/llections.Generic;
using System.Linq;
using System.Threading.Tasks;
public class PdfGenerationService
{
// Async method for non-blocking PDF generation from HTML content
public async Task<byte[]> GeneratePdfAsync(string html)
{
var renderer = new ChromePdfRenderer();
// Async HTML to PDF conversion preserves thread pool
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
// Return PDF files as byte array for web responses
return pdf.BinaryData;
}
// Concurrent batch PDF generation for multiple HTML strings
public async Task GenerateMultiplePdfsAsync(List<string> html範本)
{
var renderer = new ChromePdfRenderer();
// Create parallel conversion tasks to generate PDF documents
var tasks = html範本.Select(html =>
renderer.RenderHtmlAsPdfAsync(html)
);
// Await all PDF conversions simultaneously
var pdfs = await Task.WhenAll(tasks);
// Save generated PDF files from HTML content
for (int i = 0; i < pdfs.Length; i++)
{
pdfs[i].SaveAs($"document-{i}.pdf");
}
}
}
using IronPdf;
using System.Co/llections.Generic;
using System.Linq;
using System.Threading.Tasks;
public class PdfGenerationService
{
// Async method for non-blocking PDF generation from HTML content
public async Task<byte[]> GeneratePdfAsync(string html)
{
var renderer = new ChromePdfRenderer();
// Async HTML to PDF conversion preserves thread pool
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
// Return PDF files as byte array for web responses
return pdf.BinaryData;
}
// Concurrent batch PDF generation for multiple HTML strings
public async Task GenerateMultiplePdfsAsync(List<string> html範本)
{
var renderer = new ChromePdfRenderer();
// Create parallel conversion tasks to generate PDF documents
var tasks = html範本.Select(html =>
renderer.RenderHtmlAsPdfAsync(html)
);
// Await all PDF conversions simultaneously
var pdfs = await Task.WhenAll(tasks);
// Save generated PDF files from HTML content
for (int i = 0; i < pdfs.Length; i++)
{
pdfs[i].SaveAs($"document-{i}.pdf");
}
}
}
Imports IronPdf
Imports System.Collections.Generic
Imports System.Linq
Imports System.Threading.Tasks
Public Class PdfGenerationService
' Async method for non-blocking PDF generation from HTML content
Public Async Function GeneratePdfAsync(html As String) As Task(Of Byte())
Dim renderer As New ChromePdfRenderer()
' Async HTML to PDF conversion preserves thread pool
Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html)
' Return PDF files as byte array for web responses
Return pdf.BinaryData
End Function
' Concurrent batch PDF generation for multiple HTML strings
Public Async Function GenerateMultiplePdfsAsync(html範本 As List(Of String)) As Task
Dim renderer As New ChromePdfRenderer()
' Create parallel conversion tasks to generate PDF documents
Dim tasks = html範本.Select(Function(html) renderer.RenderHtmlAsPdfAsync(html))
' Await all PDF conversions simultaneously
Dim pdfs = Await Task.WhenAll(tasks)
' Save generated PDF files from HTML content
For i As Integer = 0 To pdfs.Length - 1
pdfs(i).SaveAs($"document-{i}.pdf")
Next
End Function
End Class
- 使用 64 位元系統可獲得最佳 PDF 生成效能。
- 產生 PDF 文件時,請確保伺服器資源充足(避免使用效能不足的免費方案)。
- 為 HTML 內容中複雜的 JavaScript 提供足夠的渲染延遲。
- 盡可能重複使用
ChromePdfRenderer的實例。 - 利用 v2025.9.4 的記憶體修復程序對批次/非同步操作進行最佳化,以減少資源使用; 測試重複自訂頁首/頁尾能否減少檔案大小。
相關 HOW-TO 文章: 如何使用 Async 和多執行緒 產生 PDFs
如何新增進階安全功能
如何在 .NET 中為 PDF 檔案新增密碼保護
將 HTML 內容轉換為受保護的 PDF 格式時,請使用密碼和權限保護產生的敏感 PDF 文件。
using IronPdf;
var renderer = new ChromePdfRenderer();
// Convert HTML to PDF with security
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Report</h1>");
// Configure security settings for PDF files
pdf.SecuritySettings.UserPassword = "user123"; // Password to open PDF documents
pdf.SecuritySettings.OwnerPassword = "owner456"; // Password to modify PDF files
// Set granular permissions for PDF format
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserPrinting = PrintPermissions.LowQualityPrint;
// Apply strong encryption to PDF documents
pdf.SecuritySettings.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256;
pdf.SaveAs("secure-document.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Convert HTML to PDF with security
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Report</h1>");
// Configure security settings for PDF files
pdf.SecuritySettings.UserPassword = "user123"; // Password to open PDF documents
pdf.SecuritySettings.OwnerPassword = "owner456"; // Password to modify PDF files
// Set granular permissions for PDF format
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserPrinting = PrintPermissions.LowQualityPrint;
// Apply strong encryption to PDF documents
pdf.SecuritySettings.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256;
pdf.SaveAs("secure-document.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Convert HTML to PDF with security
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Report</h1>")
' Configure security settings for PDF files
pdf.SecuritySettings.UserPassword = "user123" ' Password to open PDF documents
pdf.SecuritySettings.OwnerPassword = "owner456" ' Password to modify PDF files
' Set granular permissions for PDF format
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserAnnotations = False
pdf.SecuritySettings.AllowUserPrinting = PrintPermissions.LowQualityPrint
' Apply strong encryption to PDF documents
pdf.SecuritySettings.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256
pdf.SaveAs("secure-document.pdf")
如何為 PDF 檔案添加數位簽名
從 HTML 內容產生 PDF 檔案時,新增加密簽名以確保 PDF 文件的真實性。
using IronPdf;
using IronPdf.Signing;
var renderer = new ChromePdfRenderer();
// Generate PDF from HTML page
var pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1>");
// Create digital signature with certificate for PDF files
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningContact = "legal@company.com",
SigningLocation = "New York, NY",
SigningReason = "Contract Approval",
SignerName = "Authorized Signer" // New property in v2025.8.8 for enhanced signature details
};
// Apply signature to PDF documents
pdf.Sign(signature);
pdf.SaveAs("signed-contract.pdf");
using IronPdf;
using IronPdf.Signing;
var renderer = new ChromePdfRenderer();
// Generate PDF from HTML page
var pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1>");
// Create digital signature with certificate for PDF files
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningContact = "legal@company.com",
SigningLocation = "New York, NY",
SigningReason = "Contract Approval",
SignerName = "Authorized Signer" // New property in v2025.8.8 for enhanced signature details
};
// Apply signature to PDF documents
pdf.Sign(signature);
pdf.SaveAs("signed-contract.pdf");
Imports IronPdf
Imports IronPdf.Signing
Dim renderer As New ChromePdfRenderer()
' Generate PDF from HTML page
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1>")
' Create digital signature with certificate for PDF files
Dim signature As New PdfSignature("certificate.pfx", "password") With {
.SigningContact = "legal@company.com",
.SigningLocation = "New York, NY",
.SigningReason = "Contract Approval",
.SignerName = "Authorized Signer" ' New property in v2025.8.8 for enhanced signature details
}
' Apply signature to PDF documents
pdf.Sign(signature)
pdf.SaveAs("signed-contract.pdf")
RELATED HOW-TO Article: 使用 C# 數位簽署 PDF 文件
如何將HTML表單轉換為可填寫PDF
若要將標準 HTML 表單元素轉換為可互動且可填寫的 PDF 表單欄位,請啟用 CreatePdfFormsFromHtml 渲染選項。 這樣可以將文字輸入方塊、複選框、單選按鈕和下拉式選單保留為產生的 PDF 文件中的可編輯欄位。
using IronPdf;
var renderer = new ChromePdfRenderer();
// Enable HTML form to PDF form conversion
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
string htmlForm = @"
<h2>Employee Onboarding Form</h2>
<form>
<label>Full Name:</label>
<input type='text' name='fullName' value='' /><br/>
<label>Department:</label>
<select name='department'>
<option value='engineering'>Engineering</option>
<option value='marketing'>Marketing</option>
<option value='sales'>Sales</option>
</select><br/>
<label>Agree to Terms:</label>
<input type='checkbox' name='agreeTerms' />
</form>";
var pdf = renderer.RenderHtmlAsPdf(htmlForm);
pdf.SaveAs("onboarding-form.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Enable HTML form to PDF form conversion
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
string htmlForm = @"
<h2>Employee Onboarding Form</h2>
<form>
<label>Full Name:</label>
<input type='text' name='fullName' value='' /><br/>
<label>Department:</label>
<select name='department'>
<option value='engineering'>Engineering</option>
<option value='marketing'>Marketing</option>
<option value='sales'>Sales</option>
</select><br/>
<label>Agree to Terms:</label>
<input type='checkbox' name='agreeTerms' />
</form>";
var pdf = renderer.RenderHtmlAsPdf(htmlForm);
pdf.SaveAs("onboarding-form.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Enable HTML form to PDF form conversion
renderer.RenderingOptions.CreatePdfFormsFromHtml = True
Dim htmlForm As String = "
<h2>Employee Onboarding Form</h2>
<form>
<label>Full Name:</label>
<input type='text' name='fullName' value='' /><br/>
<label>Department:</label>
<select name='department'>
<option value='engineering'>Engineering</option>
<option value='marketing'>Marketing</option>
<option value='sales'>Sales</option>
</select><br/>
<label>Agree to Terms:</label>
<input type='checkbox' name='agreeTerms' />
</form>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlForm)
pdf.SaveAs("onboarding-form.pdf")
name 屬性。 重複的名稱會導致產生的 PDF 檔案中的欄位值相同,從而導致使用者填寫表單時出現意外情況。
相關教學文章:如何在 C# 中建立可填寫 PDF 表單
如何將特定 HTML 元素轉換為 PDF
要渲染頁面的特定部分而不是整個文檔,請在渲染之前隔離目標元素。 最直接的方法是使用 JavaScript 渲染選項,將文件主體替換為目標元素的內容,並結合 WaitFor.HtmlQuerySelector() 來確保在提取前該元素確實存在。 下方的程式碼片段保留了 document.head,以確保樣式表和字型能完整傳遞 — 若未執行此步驟,依賴祖先選擇器的 CSS 規則將在擷取的 PDF 中遺失。
在可存取原始 HTML 的伺服器端情境中,請使用 AngleSharp 等解析器擷取目標片段,並將其傳遞給 RenderHtmlAsPdf() — 無需執行 JavaScript。
using IronPdf;
// Full page HTML containing the target element
string fullPageHtml = @"
<html>
<body>
<header><h1>Acme Corp Invoice</h1></header>
<div id='invoice-summary'>
<h2>Invoice #12345</h2>
<p>Total: $1,250.00</p>
</div>
<footer>Confidential</footer>
</body>
</html>";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
// Replace the body with only the target element
renderer.RenderingOptions.JavaScript = @"
var el = document.querySelector('#invoice-summary');
if (el) {
var head = document.head.innerHTML;
document.body.innerHTML = el.outerHTML;
document.head.innerHTML = head;
}
";
// Wait for the target element before JS executes
renderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000);
var pdf = renderer.RenderHtmlAsPdf(fullPageHtml);
pdf.SaveAs("invoice-summary.pdf");
using IronPdf;
// Full page HTML containing the target element
string fullPageHtml = @"
<html>
<body>
<header><h1>Acme Corp Invoice</h1></header>
<div id='invoice-summary'>
<h2>Invoice #12345</h2>
<p>Total: $1,250.00</p>
</div>
<footer>Confidential</footer>
</body>
</html>";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
// Replace the body with only the target element
renderer.RenderingOptions.JavaScript = @"
var el = document.querySelector('#invoice-summary');
if (el) {
var head = document.head.innerHTML;
document.body.innerHTML = el.outerHTML;
document.head.innerHTML = head;
}
";
// Wait for the target element before JS executes
renderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000);
var pdf = renderer.RenderHtmlAsPdf(fullPageHtml);
pdf.SaveAs("invoice-summary.pdf");
Imports IronPdf
' Full page HTML containing the target element
Dim fullPageHtml As String = "
<html>
<body>
<header><h1>Acme Corp Invoice</h1></header>
<div id='invoice-summary'>
<h2>Invoice #12345</h2>
<p>Total: $1,250.00</p>
</div>
<footer>Confidential</footer>
</body>
</html>"
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
' Replace the body with only the target element
renderer.RenderingOptions.JavaScript = "
var el = document.querySelector('#invoice-summary');
if (el) {
var head = document.head.innerHTML;
document.body.innerHTML = el.outerHTML;
document.head.innerHTML = head;
}
"
' Wait for the target element before JS executes
renderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000)
Dim pdf = renderer.RenderHtmlAsPdf(fullPageHtml)
pdf.SaveAs("invoice-summary.pdf")
相關教學文章:如何將 HTML 元素和部分頁面轉換為 PDF
如何將已認證頁面渲染為 PDF
有三種機制可以渲染位於驗證之後的頁面:網路登入憑證、自訂 cookie 和 HTTP 請求標頭。 這些涵蓋了將受保護的 Web 內容轉換為 PDF 時最常見的身份驗證場景。
登入憑證
將受保護的 URL 轉換為 PDF 時,請使用 ChromeHttpLoginCredentials 進行基本、摘要或 NTLM 驗證。
using IronPdf;
var renderer = new ChromePdfRenderer();
// Configure network authentication
renderer.LoginCredentials = new ChromeHttpLoginCredentials
{
NetworkUsername = "user@domain.com",
NetworkPassword = "securePassword",
AuthenticationType = ChromeHttpLoginCredentials.AuthType.Basic
};
var pdf = renderer.RenderUrlAsPdf("https://intranet.com/pany.com/reports");
pdf.SaveAs("authenticated-report.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Configure network authentication
renderer.LoginCredentials = new ChromeHttpLoginCredentials
{
NetworkUsername = "user@domain.com",
NetworkPassword = "securePassword",
AuthenticationType = ChromeHttpLoginCredentials.AuthType.Basic
};
var pdf = renderer.RenderUrlAsPdf("https://intranet.com/pany.com/reports");
pdf.SaveAs("authenticated-report.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Configure network authentication
renderer.LoginCredentials = New ChromeHttpLoginCredentials With {
.NetworkUsername = "user@domain.com",
.NetworkPassword = "securePassword",
.AuthenticationType = ChromeHttpLoginCredentials.AuthType.Basic
}
Dim pdf = renderer.RenderUrlAsPdf("https://intranet.com/pany.com/reports")
pdf.SaveAs("authenticated-report.pdf")
Cookie 和 HTTP 標頭
對於基於令牌或基於會話的身份驗證,請將自訂 cookie 和 HTTP 標頭直接附加到渲染請求中。
using IronPdf;
var renderer = new ChromePdfRenderer();
// Add session cookies
renderer.RenderingOptions.CustomCookies["sessionId"] = "abc123token";
renderer.RenderingOptions.CustomCookies["authToken"] = "bearer-xyz";
// Add custom HTTP headers (e.g., API key or Bearer token)
renderer.RenderingOptions.CustomHttpRequestHeaders["Authorization"] = "Bearer eyJhbGciOi...";
var pdf = renderer.RenderUrlAsPdf("https://app.example.com/dashboard");
pdf.SaveAs("dashboard.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Add session cookies
renderer.RenderingOptions.CustomCookies["sessionId"] = "abc123token";
renderer.RenderingOptions.CustomCookies["authToken"] = "bearer-xyz";
// Add custom HTTP headers (e.g., API key or Bearer token)
renderer.RenderingOptions.CustomHttpRequestHeaders["Authorization"] = "Bearer eyJhbGciOi...";
var pdf = renderer.RenderUrlAsPdf("https://app.example.com/dashboard");
pdf.SaveAs("dashboard.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Add session cookies
renderer.RenderingOptions.CustomCookies("sessionId") = "abc123token"
renderer.RenderingOptions.CustomCookies("authToken") = "bearer-xyz"
' Add custom HTTP headers (e.g., API key or Bearer token)
renderer.RenderingOptions.CustomHttpRequestHeaders("Authorization") = "Bearer eyJhbGciOi..."
Dim pdf = renderer.RenderUrlAsPdf("https://app.example.com/dashboard")
pdf.SaveAs("dashboard.pdf")
HttpClient 進行驗證,然後將產生的 Cookie 傳遞給 CustomCookies 字典,以渲染受保護的頁面。相關教學文章:如何將需要登入驗證的 HTML 轉換為 PDF
4. 如何在雲端平台上將 HTML 部署為 PDF
在雲端環境中部署 HTML 到 PDF 的轉換需要對無頭渲染、臨時檔案路徑和資源分配進行特定配置。 本節涵蓋了IronPDF最常見的雲端平台和容器化部署。
| 平台 | 最低資源 | 包裹 | 自動配置 | 溫度路徑 | 關鍵陷阱 |
|---|---|---|---|---|---|
| Azure 應用程式服務 | B1級(基礎) |
IronPdf.Linux
|
true
|
/tmp | 免費/共享套餐失敗-無GPU,記憶體不足 |
| Azure Functions(Windows) | B1級 |
IronPdf
|
true
|
/tmp | 取消選取"從程式包檔案執行" |
| AWS Lambda | 512 MB / 330 秒逾時 |
IronPdf.Linux
|
true
|
/tmp(必填) | 預設檔案系統為唯讀。 |
| Docker(Ubuntu/Debian) | 影像相關 |
IronPdf.Linux
|
false
|
圖片預設 |
設定為false — Dockerfile 處理依賴項
|
如何在 Azure 上部署
部署至 Azure Functions 或 App Service 時,請停用 GPU 加速,並確保您的託管層為基於 Chrome 的渲染提供足夠的記憶體。 在應用程式啟動時,在任何渲染調用之前添加這些設定。
Azure 沙箱以無頭模式運作,無法存取 GPU,且免費/共用層(F1、D1)缺少 Chrome 所需的資源。 目標是達到B1(基礎)等級或更高。
using IronPdf;
// Azure sandboxes block GPU access — always disable
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
// Required on non-GUI Linux systems
IronPdf.Installation.LinuxAndDockerDependencies自動配置 = true;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Azure PDF Report</h1>");
pdf.SaveAs("azure-report.pdf");
using IronPdf;
// Azure sandboxes block GPU access — always disable
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
// Required on non-GUI Linux systems
IronPdf.Installation.LinuxAndDockerDependencies自動配置 = true;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Azure PDF Report</h1>");
pdf.SaveAs("azure-report.pdf");
Imports IronPdf
' Azure sandboxes block GPU access — always disable
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
' Required on non-GUI Linux systems
IronPdf.Installation.LinuxAndDockerDependencies自動配置 = True
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Azure PDF Report</h1>")
pdf.SaveAs("azure-report.pdf")
相關入門指南:如何在 Azure 上部署IronPDF
如何在 AWS Lambda 上部署
AWS Lambda 要求基於 Docker 的部署才能實現基於 Chrome 的 PDF 渲染。 預設的 Lambda 檔案系統為唯讀模式,因此所有暫存檔與部署路徑皆須指向 /tmp。
請在函數處理程序的頂部,在任何渲染呼叫之前配置這些設定。
using Amazon.Lambda.Co/re;
using IronPdf;
public class PdfFunction
{
public string FunctionHandler(string input, ILambdaContext context)
{
// Lambda's only writable directory
var tmpPath = "/tmp/";
IronPdf.Installation.TempFolderPath = tmpPath;
IronPdf.Installation.CustomDeploymentDirectory = tmpPath;
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
// Let IronPDF install Chrome dependencies on first cold start
IronPdf.Installation.LinuxAndDockerDependencies自動配置 = true;
context.Logger.LogLine("Rendering PDF...");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(input);
// Save to /tmp before uploading to S3 or returning
var outputPath = $"{tmpPath}output.pdf";
pdf.SaveAs(outputPath);
return outputPath;
}
}
using Amazon.Lambda.Co/re;
using IronPdf;
public class PdfFunction
{
public string FunctionHandler(string input, ILambdaContext context)
{
// Lambda's only writable directory
var tmpPath = "/tmp/";
IronPdf.Installation.TempFolderPath = tmpPath;
IronPdf.Installation.CustomDeploymentDirectory = tmpPath;
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
// Let IronPDF install Chrome dependencies on first cold start
IronPdf.Installation.LinuxAndDockerDependencies自動配置 = true;
context.Logger.LogLine("Rendering PDF...");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(input);
// Save to /tmp before uploading to S3 or returning
var outputPath = $"{tmpPath}output.pdf";
pdf.SaveAs(outputPath);
return outputPath;
}
}
Imports Amazon.Lambda.Core
Imports IronPdf
Public Class PdfFunction
Public Function FunctionHandler(input As String, context As ILambdaContext) As String
' Lambda's only writable directory
Dim tmpPath As String = "/tmp/"
IronPdf.Installation.TempFolderPath = tmpPath
IronPdf.Installation.CustomDeploymentDirectory = tmpPath
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
' Let IronPDF install Chrome dependencies on first cold start
IronPdf.Installation.LinuxAndDockerDependencies自動配置 = True
context.Logger.LogLine("Rendering PDF...")
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(input)
' Save to /tmp before uploading to S3 or returning
Dim outputPath As String = $"{tmpPath}output.pdf"
pdf.SaveAs(outputPath)
Return outputPath
End Function
End Class
相關入門指南:如何在 AWS Lambda 上部署IronPDF
如何使用 Docker 進行部署
針對 Docker 部署,請使用 IronPdf.Linux NuGet 套件以縮小映像檔大小,並避免執行時下載資產。 該軟體包包含預先打包的、針對容器化環境優化的 Linux 原生二進位。
若您的 Dockerfile 已透過 apt-get 安裝 Chrome 的共享函式庫依賴項,請設定 LinuxAndDockerDependencies自動配置 = false。 在這種情況下,運行時自動安裝是多餘的,並且可能導致權限錯誤或更長的冷啟動時間。
| 平台 | 包裹 | 關鍵配置 |
|---|---|---|
| Ubuntu 22.04 / Debian |
IronPdf.Linux
|
預設設定-開箱即用 |
| Alpine Linux |
IronPdf.Linux
|
在 Dockerfile 中透過 APK 安裝 Chromium |
| Amazon Linux 2 |
IronPdf.Linux
|
使用LinuxAndDockerDependencies自動配置 = true
|
| Windows 容器 |
IronPdf
|
無需額外配置 |
一個基於 Ubuntu/Debian 的映像的最小多階段 Dockerfile:
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /app
COPY . .
RUN dotnet publish -c Release -o /out
FROM mcr.microsoft.com/dotnet/aspnet:8.0
# Install Chrome dependencies for PDF rendering
RUN apt-get update && apt-get install -y \
libglib2.0-0 libnss3 libatk1.0-0 libatk-bridge2.0-0 \
libcups2 libdrm2 libxkbcommon0 libxcomposite1 \
libxdamage1 libxrandr2 libgbm1 libpango-1.0-0 \
libcairo2 libasound2 libxshmfence1 && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=build /out .
ENTRYPOINT ["dotnet", "MyApp.dll"]
using IronPdf;
// Dependencies handled by Dockerfile apt-get — disable runtime install
IronPdf.Installation.LinuxAndDockerDependencies自動配置 = false;
// No GPU in containers
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Dockerized PDF</h1>");
pdf.SaveAs("output.pdf");
using IronPdf;
// Dependencies handled by Dockerfile apt-get — disable runtime install
IronPdf.Installation.LinuxAndDockerDependencies自動配置 = false;
// No GPU in containers
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Dockerized PDF</h1>");
pdf.SaveAs("output.pdf");
Imports IronPdf
' Dependencies handled by Dockerfile apt-get — disable runtime install
IronPdf.Installation.LinuxAndDockerDependencies自動配置 = False
' No GPU in containers
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Dockerized PDF</h1>")
pdf.SaveAs("output.pdf")
相關入門指南:如何將IronPDF與 Docker 結合使用
5. 將IronPDF與其他.NET PDF 庫進行比較
IronPDF 憑藉其強大的 Chromium 驅動的渲染引擎、直覺的 API 和頻繁的產品增強功能,成為許多團隊在 C# PDF 生成方面的首選解決方案。 讓我們將 IronPDF 與其他 PDF 轉換器進行比較,找到最適合您 PDF 產生需求的轉換器。
快速決策矩陣:IronPDF 與其他 .NET PDF 轉換器
| 解決方案 | 何時使用 | 最適合 |
|---|---|---|
| IronPDF。 | 將現代網站/HTML轉換為PDF,並保持精確的視覺保真度。 | 企業應用程式需要可靠的 HTML 渲染引擎、動態內容和專業支援。 |
| wkhtmltopdf譯文 | 在非關鍵應用程式中進行簡單的 HTML 轉換,可以接受過時的渲染效果。 | 使用傳統HTML/CSS產生基本文件。 |
| 融合 | 已投資 Syncfusion 生態系統或有資格獲得免費社區許可。 | 使用多個 Syncfusion 元件的組織。 |
| Aspose.PDF | 當HTML渲染品質要求不高時,就需要進行複雜的PDF操作。 | 除了HTML轉換功能外,還具備豐富的PDF編輯功能。 |
相關比較:
詳細比較:IronPDF 與其他 .NET PDF 轉換器
| 特點 | ★ 推薦 IronPDF | wkhtmltopdf | iText | Aspose.PDF | Syncfusion | Apryse | SelectPdf | Spire.PDF | PDFSharp | QuestPDF |
|---|---|---|---|---|---|---|---|---|---|---|
| 渲染與轉換 | ||||||||||
| 渲染精度 | 像素級完美 | 印刷風格 | 限程序化 | 好的 | 好的 | 好的 | 好的 | 低等級 | 無需渲染 | 程式碼優先佈局 |
| HTML5 支援 | 滿的 | 過時的 | 添加在 | 部分的 | 滿的 | 模組 | 滿的 | 有限的 | 不 | 否(代碼優先) |
| CSS3 支持 | 滿的 | 有限的 | 添加在 | 部分的 | 滿的 | 模組 | 滿的 | 有限的 | 不 | 否(代碼優先) |
| JavaScript 執行 | 完整 最佳 | 不 | 不 | 爭議 | 有限的 | 有限的 | 有限的 | 非常有限 | 不 | 不 |
| HTML→PDF(現代佈局) | 嵌入式鉻最佳 | Qt WebKit(已過時) | 付費外掛 | 部分;JS 有爭議 | 閃爍引擎 | 需要模組 | 完整 HTML→PDF | 基於影像的 | 不 | 不是 HTML 渲染器 |
| PDF→影像渲染 | 是的 | 不 | 是 | 是 | 是的 | 是的 | 不 | 有限的 | 不 | 限自有文檔 |
| 文檔操作 | ||||||||||
| 透過程式設計方式產生 PDF | 是的 | 不 | 是的 | 是的 | 是的 | 是的 | 僅HTML | 是的 | 基本的 | 是的(Fluent API) |
| 合併、拆分和重新排列 | 是的 | 不 | 是的 | 是的 | 是的 | 是的 | 是的 | 是的 | 有限的 | 是的 |
| 頁首/頁尾/頁碼 | HTML/文字/圖像最佳 | 限額 | 是 | 透過活動 | 透過活動 | 是 | 範本 | 手冊 | 限手動 | 頭等艙座位 |
| 水印和印章 | 文字與圖像 | 不 | 是的 | 是的 | 是的 | 是的 | 是的 | 有限的 | 不 | 是的(疊加層) |
| 從 PDF 提取文字 | 是的 | 不 | 是的 | 是的 | 是的 | 是的 | 是的 | 是的 | 基本的 | 不 |
| 掃描PDF的OCR | 透過IronOCR集成 | 不 | 添加在 | 獨立產品 | 添加在 | 添加在 | 不 | 變通方法 | 不 | 不 |
| 安全性與合規性 | ||||||||||
| 數位簽名 | 是的 | 不 | 是的 | 是的 | 是的 | 範例程式碼 | 是的 | 不 | 不 | 未記錄 |
| PDF/A 合規性 | 是的(PDF/A-3B) | 不 | 完整版PDF/A | 驗證並創建 | 需要原生 SDK | PDF合規性 | 不 | 是的 | 有限的 | PDF/A-2x 和 3x |
| 平台與開發者體驗 | ||||||||||
| 跨平台 | Windows · Linux · macOS全部 3 | 取決於二進位文件 | .NET Standard 2.0 | Linux附加設置 | Blink + .NET伺服器 | 原生 SDK | 僅限 Windows 系統 * | Linux 文件有限 | 以 Windows 為中心的 | Windows/Linux/macOS |
| 雲端和 Docker 部署 | Azure · AWS · Docker最佳 | 複雜;遺產 | 多包 | 部分;容器 | 需要額外的 Blink 組件 | 本地部門 | 僅限 Windows | 資訊有限 | 簡單;輕便 | Docker/K8s;本地 |
| 支援與文檔 | ||||||||||
| 文件 | 廣泛 + 複製/貼上最佳 | 部分 CLI 文檔 | 廣泛的;KB | 廣泛; GitHub | 幫助中心 | 跨語言目錄 | 入門指南 | 節目指南 | 社區指南 | 結構化 + 配套應用程式 |
| 開發者支援 | 全天候工程師最佳服務 | 僅限社區成員 | 包含訂閱 | 論壇 + 付費 | 24/5 直達軌道 | 商業的 | 電子郵件 | 論壇 + 電子郵件 | 僅限社區成員 | 社群 + GitHub |
| 授權與定價 | ||||||||||
| 授權模式 | 永久 | 開源 | AGPL / 訂閱 | 永久 | 年度訂閱 | 客製化/消費 | 永久 | 年度訂閱 | 免費(MIT) | 麻省理工學院免費/付費層級 |
| 起價 | $liteLicense 永久授權 · 1 名開發者 | style="color:#16a34a">自由的 | ~,000/年 客製化報價 | ,175+ 每位開發者 | 5/年 訂閱 · 免費 <100萬美元 | ~,000+/年 客製化報價 | 9+ 永久授權 | 9/年 年度訂閱 | style="color:#16a34a">自由的 | style="color:#16a34a">免費 社群版 MIT <0萬 |
| 免费试用 | 30天 · 所有功能無限制 | 不適用(免費) | 30天 | 是的(有浮水印) | Community <$1M Rev | 是 | 社區(5 頁) | 免費(10頁) | 不適用(免費) | N/A (MIT Free <$1M) |
| 定價透明度 | 已發布和清晰最佳 | 開源 | 複合AGPL | 多層 | 聯絡我們以取得報價 | 未公佈價格 | 已發布 | 已發布 | 麻省理工學院;無限制 | 麻省理工學院;基於信任 |
實際 HTML 轉 PDF 轉換比較:渲染 Reddit 首頁
為了評估輸出 PDF 的質量,我們使用 Reddit 的主頁對這些庫進行了測試,該主頁包含動態網頁內容、現代 CSS 和 JavaScript HTML 元素。 此頁面可作為產生輸出 PDF 的理想測試案例。

IronPDF。

IronPDF 能夠提供像素級的完美效果,保留所有動態網頁內容、現代網頁字體樣式和互動元素,使其與 Chrome 中的顯示效果完全一致,而這一切只需幾行程式碼即可實現。
融合

Syncfusion 渲染的 PDF 檔案缺少大部分章節和樣式,尤其是動態內容。 最初被Reddit的安全系統屏蔽。 要獲得更好的結果需要大量的命令列調整,但輸出仍然不完整。
Aspose.PDF譯本

Aspose.PDF 需要先手動下載 HTML 檔案(不支援直接下載 URL)。 轉換後的輸出格式不正確,幾乎缺少所有內容部分,因此不適合具有動態內容的現代網站。
wkhtmltopdf譯文

wkhtmltopdf 完成得很快,但產生的頁面是普通的靜態頁面,缺少即時更新、動態元素和互動部分等關鍵內容。 這說明 wkhtmltopdf 與現代的、基於 JavaScript 的網站不相容。
關於性能和輸出PDF品質的結論
對於需要可靠的 HTML 轉 PDF 轉換器的 .NET 開發人員來說,IronPDF 以最少的程式碼、易於使用的 API 和頻繁的產品增強功能脫穎而出。
在網路內容的實際測試中,它提供了最快、最準確的結果,而 Syncfusion 落後了,Aspose 需要額外的步驟,wkhtmltopdf 缺少現代樣式。 IronPDF 為現今的 HTML 轉 PDF 轉換工作流程提供了速度、準確性和簡易性的最佳平衡。
請注意: Aspose, Syncfusion, 和 wkhtmltopdf 是其各自所有者的商標。 本網站與他們沒有任何關聯,也未獲得他們的認可。 所有名稱、標誌和品牌均屬於其所有者,比較基於撰寫時可公開取得的資訊。
概括
本指南涵蓋了在 .NET 中將 HTML 轉換為 PDF 所需的一切:從基本的字串轉換到非同步處理、數位簽章和批次產生等高級功能。 我們示範了三種轉換方法、基本配置、進階功能和安全性設置,並透過動態文件產生的實際測試,將 IronPDF 與其他庫進行了比較。
當競爭對手仍在為現代網站苦苦掙扎或需要複雜的變通方法時,IronPDF 憑藉最少的程式碼和強大的渲染引擎,提供了完美的效果。
準備好簡化您的 PDF 工作流程,並體驗只需幾行程式碼即可產生的多功能 PDF 了嗎? 透過 NuGet 套件管理器安裝 IronPDF(或在 Visual Studio 中選擇"管理 NuGet 套件"),立即將您的第一個 HTML 檔案轉換為 PDF 檔案。
立即開始您的 30 天免費試用,進行無浮水印的生產測試。 彈性授權方案起價為 $999,並提供透明的團隊定價方案,可依您的需求彈性調整。
6. 故障排除和技術支持
在將 HTML 轉換為 PDF 時遇到以下錯誤? IronPDF 透過https://ironpdf.com/上的聊天視窗提供 24/7 全天候工程師支援。
常見錯誤的快速解決方法
- 首次渲染速度慢? 普通的。 Chrome 初始化需要 2-3 秒,然後速度會加快。
- 雲端問題? 使用至少 Azure B1 或同等級的資源。
- 缺少資產? 設定基本路徑或嵌入為 base64 編碼。
- 缺少元素? 若需執行 JavaScript,請加入
RenderDelay。 - 渲染過程中的記憶體佔用? 更新至 v2025.9.4 以修正 HTML 轉 PDF、圖章和頁首/頁尾中的問題。
- 表單欄位問題(例如,文字區域過長、複選框等)? 已在 v2025.7.17 中修復; 確保複選框名稱唯一。 自訂頁首/頁尾裁切或特殊字元顯示錯誤? 已在 v2025.8.8 解決; 測試自動換行和元資料。
取得 IronPDF 工程師的協助,全天候 24/7 服務
下一步
常見問題
如何在 C# 中將 HTML 轉換為 PDF?
您可以透過 Chrome 渲染函式庫,在 C# 中將 HTML 轉換為 PDF,該函式庫能將 HTML、CSS3 和 JavaScript 轉為像素級精準的 PDF 檔案。像 IronPDF 這樣的工具,讓您能從網址、HTML 字串或檔案進行渲染,同時支援頁首、驗證及列印設定。
哪款是 .NET 平台上最佳的 HTML 轉 PDF 函式庫?
最佳的函式庫應支援精準的 Chrome 渲染、跨平台部署及 Enterprise 功能。IronPDF 涵蓋了所有這些需求——可在 Windows、Linux、macOS 及 Docker 上運行,並支援安全性、簽名、合規性以及可擴展的 .NET 應用程式。
如何使用 C# 將 HTML 字串轉換為 PDF?
若要將 HTML 字串轉換為 PDF,請使用 ChromePdfRenderer 類別及其 RenderHtmlAsPdf 方法。將您的 HTML 字串傳入此方法,然後使用 SaveAs 儲存 PDF 檔案。
在 C# 中,將網頁 URL 轉換為 PDF 文件的步驟有哪些?
您可以透過 RenderUrlAsPdf 方法,將網頁網址直接轉換為 PDF 檔案,此方法可保留樣式、圖片以及表單和超連結等互動元素。
如何在 C# 中將 HTML 檔案轉換為 PDF?
使用 ChromePdfRenderer.RenderHtmlFileAsPdf("path/to/file.html") 將本機 HTML 檔案轉換為 PDF。IronPDF 會自動解析所有相對資源路徑(圖片、CSS、JS)。
如何將 ASP.NET Razor Pages 或 MVC 檢視轉換為 PDF?
IronPDF 提供專用的擴充套件 — 適用於 Razor Pages 的 IronPdf.Extensions.Razor,以及適用於 MVC 檢視的 IronPdf.Extensions.Mvc.Core。請透過依賴性注入使用 RenderRazorToPdf 或 RenderRazorViewToPdf,直接從控制器將檢視轉換為 PDF。參閱 Razor 指南 →
如何確保 JavaScript 內容在 PDF 中正確呈現?
透過設定 RenderingOptions.EnableJavaScript = true 來啟用 JavaScript 渲染,並使用 RenderingOptions.WaitFor.RenderDelay 添加渲染延遲,以確保動態內容在轉換前已完全載入。參閱 WaitFor 指南 →
在 C# 中為 PDF 添加頁首和頁尾的最佳方法是什麼?
若需建立簡單的文字頁首與頁尾,請使用 TextHeaderFooter 類別;若需處理較複雜的 HTML 內容,則請使用 HtmlHeaderFooter 類別。您可加入 {page}、{total-pages} 及 {date} 等動態佔位符,以自動產生內容。參閱頁首與頁尾指南 →
如何在 C# .NET 中管理 PDF 輸出的分頁?
透過在「PRINT 媒體類型」CSS 區塊中使用 page-break-after: always 和 page-break-inside: avoid 等 CSS 屬性,來控制 PDF 中的分頁位置。參閱分頁指南 →
PDF 文件中有哪些設定紙張尺寸與方向的選項?
請使用 RenderingOptions.PaperSize 設定紙張尺寸(選項包含 A4、Letter、Legal 等),並透過 RenderingOptions.PaperOrientation 設定直向或橫向。亦支援以毫米或英吋為單位的自訂尺寸。參閱紙張尺寸指南 →
我可以將需要驗證的網頁轉換為 PDF 嗎?
是的。IronPDF 支援 Cookie、自訂 HTTP 標頭以及表單式驗證。可透過 ChromePdfRenderer.RenderingOptions.CustomCookies 設定 Cookie,或傳遞驗證標頭以進行基於憑證的驗證。亦支援 Windows NTLM 及 Kerberos 驗證。請參閱 Cookie 指南 →
我可以在 C# 中從單一 HTML 範本建立多個 PDF 檔案嗎?
是的,請建立包含佔位符的 HTML 範本,然後使用字串替換或 Handlebars.NET 等範本引擎。在迴圈處理資料時將佔位符替換為實際值,並透過 RenderHtmlAsPdf 產生 PDF 檔案。
是否可以為生成的 PDF 檔案設定密碼保護?
是的,您可以使用 SecuritySettings 屬性來設定使用者和擁有者密碼、配置 PRINT 和複印等權限,並透過 SecuritySettings.EncryptionAlgorithm 套用 AES256 加密。請參閱加密指南 →
我可以從 HTML 產生符合 PDF/A 標準的文件嗎?
是的。IronPDF 支援 PDF/A-1b、PDF/A-2b、PDF/A-3b 及 PDF/UA 標準,以符合歸檔與無障礙規範,這是多數 HTML 轉 PDF 轉換器所不具備的功能。參閱 PDF/A 指南 →
如何優化大量 PDF 檔案的生成效能?
透過使用 RenderHtmlAsPdfAsync 等非阻塞式 async 方法來優化效能。重複使用 ChromePdfRenderer 實例,利用 Task.WhenAll 並行處理多個 PDF 檔案,並確保在 64 位元系統上具備充足的伺服器資源。參閱 async 指南 →
如何合併多個 PDF 檔案,或在文件中加入封面頁?
使用靜態方法 PdfDocument.Merge 來合併多個 PDF 文件。請先獨立生成封面頁,再與主文件合併,以建立完整的 PDF 文件。參閱合併指南 →
我可以在 Azure、AWS 或 Docker 上部署 IronPDF 嗎?
是的。IronPDF 可在 Azure App Service、Azure Functions、AWS Lambda 以及 Linux 上的 Docker 容器中運行。各平台均提供專用的設定指南和 Docker 映像檔。查看 Azure 指南 → · 查看 AWS 指南 → · 查看 Docker 指南 →
.NET 10 相容性:IronPDF 是否立即支援 .NET 10?
是的 — IronPDF 完全相容於 .NET 10。根據 IronPDF 的發行說明,此函式庫在 .NET 10 專案中可立即使用,無需任何額外設定。無論您使用的是網頁、主控台、桌面或微服務應用程式,IronPDF 都能在 .NET 10 環境下「開箱即用」。
IronPDF 是免費使用的嗎?
IronPDF 提供 30 天試用,開發版本具備完整功能且無浮水印。正式部署需購買商業授權,起價為 $749。提供 Lite、Plus、Professional 及 Enterprise 等不同方案。查看定價 →
與 wkhtmltopdf 等其他選項相比,此函式庫的渲染品質如何?
此函式庫採用現代化的 Chrome 渲染引擎,可產生像素級精準的 PDF 檔案,有別於 wkhtmltopdf 過時的 WebKit 引擎。它無需伺服器執行檔、支援完整的 JavaScript/CSS3、定期更新,並提供 Professional 技術支援。
為何在 HTML 轉 PDF 的轉換任務中,我應該選擇這個函式庫而非 PDFsharp?
PDFsharp 缺乏內建的 HTML 轉 PDF 功能,需要透過複雜的變通方法來實現。此函式庫提供直接的 HTML/URL/檔案轉換功能,具備高階 API、支援現代網頁技術,並定期更新且提供 Professional 技術支援。參閱 PdfSharp 比較 →
為何在 HTML 轉換方面,這比 iTextSharp 更為合適?
iTextSharp 的免費版本不支援原生 HTML 轉 PDF 功能,且其低階 API 較為複雜。本函式庫提供無縫的 HTML 轉換功能,具備直覺的 API、完整的 CSS3/JavaScript 支援,且不受 AGPL 授權限制。參閱 iTextSharp 比較 →
此函式庫的渲染品質與 Aspose.PDF 相比如何?
此函式庫可產生像素級精準、媲美 Chrome 品質的 PDF 檔案,而 Aspose.PDF 則常會遺漏樣式與動態內容。Aspose 需要手動下載 HTML 檔案才能進行 URL 轉換,但此函式庫能直接轉換 URL,且精準度更勝一籌。參閱 Aspose 比較 →
為什麼我會選擇這個函式庫而非 Syncfusion PDF?
雖然 Syncfusion 功能強大,但本函式庫的優化版 Chrome 引擎執行速度更快,且能更有效地處理動態內容。它提供更簡潔的 API,並具備 OCR 和 BARCODE 生成等額外功能。參閱 Syncfusion 比較 →

