使用 IronPDF 在 .NET Core 中使用 C# 將 HTML 轉換為 PDF
在現代 .NET 應用程式中,直接從 HTML 產生高保真 PDF 是一項常規要求——報告、發票和工單都需要像素級完美的輸出,以匹配 Web UI。 IronPDF 透過公開一個 C# API 來簡化此工作流程,該 API 可將 HTML、Razor 視圖和完整的網站渲染成符合標準的 PDF 文件。 看完本指南後,開發人員將能夠轉換 ASP.NET Core 專案中的 URL、原始 HTML 或 MVC 視圖,並將相同的程式碼部署到 Windows、Linux、Docker 或無伺服器環境中。
快速入門:在 .NET Core 中從 HTML 建立 PDF
使用 IronPDF 庫,在 .NET Core 中輕鬆將 HTML 轉換為 PDF。 本指南提供了一個簡單的範例,幫助您快速入門,只需編寫最少的程式碼即可將 HTML 內容渲染成高品質的 PDF。 非常適合希望輕鬆將 PDF 創建功能整合到應用程式中的開發人員。
立即開始使用 NuGet 建立 PDF 檔案:
使用 NuGet 套件管理器安裝 IronPDF
複製並運行這段程式碼。
var pdf = new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf("<h1>Hello World</h1>");部署到您的生產環境進行測試
最簡工作流程(5個步驟)
- 安裝
IronPdfNuGet 套件 - 使用
RenderUrlAsPdf轉換網站 URL - 透過
RenderHtmlAsPdf渲染原始 HTML - 將 MVC 視圖匯出為 PDF
- 調整紙張尺寸、頁邊距、頁首和頁尾
快速入門清單
1.安裝– Install-Package IronPdf
2.渲染 URL – ChromePdfRenderer.RenderUrlAsPdf()
3.渲染原始 HTML – ChromePdfRenderer.RenderHtmlAsPdf()
4.導出 Razor 視圖– ChromePdfRenderer.RenderHtmlAsPdfAsync()
5.微調輸出-利用ChromePdfRenderer.RenderingOptions
本教學涵蓋的內容
- 網址、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 higherPM> Install-Package IronPdf # .NET 8 LTS and higher[{i:(需要命令列介面?同樣的指令也可以在專案資料夾內使用dotnet add package IronPdf 。
安裝完成後,透過轉換任意公用 URL 來確認所有連線均已正確配置:
// 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");工作原理
ChromePdfRenderer在底層啟動了一個沙盒化的 Chromium 實例——無需單獨安裝 Chrome。RenderUrlAsPdf捕捉完全渲染的 DOM,包括 JavaScript 驅動的內容、CSS 媒體查詢和字體。- 產生的
PdfDocument提供了用於合併、密碼保護或對輸出進行數位簽章的輔助方法——這些功能將在本教學的後面部分介紹。
有關部署細節(Azure 應用程式服務、AWS Lambda、本地 Linux)的更多詳細信息,請參閱專用安裝指南和高級 NuGet 設定頁面。 Docker 部署最佳實務中涵蓋了 Docker 和 K8s 叢集的內部 CI/CD 技巧。
.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");為什麼有效
ChromePdfRenderer啟動一個沙盒化的 Chromium 實例——沒有系統 Chrome 依賴,使 Docker 映像保持精簡。RenderUrlAsPdf會等待 DOM 和 JavaScript 完成再進行快照,因此單頁應用程式可以正確渲染。- 將
CssMediaType設定為Print會告訴引擎使用特定於列印的規則,以符合瀏覽器的 Print → Save as PDF 輸出。 - 產生的
PdfDocument可以進行加密、數位簽章、合併或柵格化-這些功能將在後面的章節中介紹。
{t:(像素級精準調試:啟用renderer.LoggingOptions.DebugMode = true並按照 [headless-Chrome 調試指南] 的說明,在渲染期間檢查實時 DevTools。@@--括號關閉--@@
相關資源
- 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");這段程式碼示範了什麼
-內建 Chromium -- IronPDF 捆綁了Chromium 引擎,保證了HTML5、CSS3 和 JavaScript 與現代瀏覽器的一致性。
-單一依賴項--輕量級的 NuGet 安裝涵蓋 Windows、Linux、Docker 和 Azure/AWS,無需額外的系統程式庫。
-渲染選項-- PaperSize 、 CssMediaType和RenderDelay鏡像瀏覽器列印設置,以便 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");
}
}這段程式碼說明了什麼
-沒有臨時檔案-- Razor 視圖在記憶體中渲染,然後直接傳遞給RenderHtmlAsPdf ,避免磁碟 I/O 和臨時資料夾競爭條件。
-票據大小的輸出-- PaperSize = A5和窄邊距使在家中列印的票據保持緊湊。
-一致的列印樣式-- CssMediaType = Print應用與瀏覽器相同的@media print CSS 規則。
-二進位串流-- 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");這些選項為何重要
PaperSize、Margins和CssMediaType與瀏覽器的列印對話方塊一致,因此在 Windows、Linux 和 Docker 上,螢幕佈局和 PDF 保持相同。- HTML 頁首和頁尾支援 Razor 令牌、CSS 和 JavaScript-方便實現動態頁碼或品牌識別。
HtmlStamp允許使用一行程式碼建立具有完整 HTML + CSS 控制的品牌浮水印。
-安全選項支援 128 位元加密、擁有者/使用者密碼和細粒度權限,無需第三方工具。
-數位簽名直接在代碼中添加加密印章,以保持法律真實性和防篡改性。ExtractAllText和ExtractAllImages等擷取輔助程式會在需要分析時逆轉該過程。
快速參考 — 常用設定
PaperSize 、 PaperOrientation 、 Margins 、 CssMediaType 、 RenderDelay
HtmlHeader 、 HtmlFooter 、動態 Razor 佔位符、頁碼標記
Watermark 、 HtmlStamp 、不透明度、對齊方式
SecurityOptions 、 SignAndStamp 、所有者/用戶密碼、證書密封
後續任務:合併多個 PDF 文件,提取文字和映像,並部署到 Docker 或無伺服器平台。 請繼續執行部署部分,以確保跨平台一致性。
如何在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"]Windows 容器?請將第二階段替換為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.comdocker 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 以下。
[{t:(故障排除提示:如果容器日誌顯示"找不到 libnss3.so"錯誤,請確認libnss3和libatk1.0-0都存在。 由於 musl C 庫缺少必要的符號,因此不支援 Alpine 鏡像。
內部資源
- 教學 –在 Docker 容器中部署 IronPDF
- 操作指南 –在 Azure 應用程式服務 Linux 上執行 IronPDF
- API 參考 –
ChromePdfRenderer類
如何在 .NET Core 中開啟、合併、新增浮水印和提取現有 PDF 的內容?
IronPDF 將每個 PDF 文件(無論是 IronPDF、Adobe® Acrobat 或第三方工具產生的 PDF 文件)視為一流的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");為什麼這很重要
-開啟和合併– PdfDocument.FromFile載入任何符合標準的 PDF,包括加密文件,而PdfDocument.Merge在一次呼叫中連接任意數量的文件。
-水印– ApplyStamp (別名HtmlStamp )在選定的頁面上嵌入完全樣式化的 HTML/CSS 疊加層(徽標、二維碼或對角線文字),而無需柵格化。
-內容擷取– 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 加密,鎖定列印權限,並新增可見簽名
// 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");幕後花絮
- AES-256 加密-- IronPDF 使用 NIST 核准的AES 金鑰對有效載荷進行封裝,阻止未經授權的開啟、列印或複製貼上。
-權限粒度--AllowUserPrinting和AllowUserFormData等屬性可以切換每個操作的權限; 任何限制措施都需要所有者密碼才能生效。
-數位簽章--SignAndStamp嵌入 RFC 3161 時間戳記和憑證鏈,建立 Adobe® Acrobat 和其他 ISO 32000-2 檢視器可辨識的防篡改雜湊值。
-一站式 API -- 加密和簽章都修改同一個PdfDocument實例,避免多次文件傳遞,並保留內部字體、圖層和元資料。
故障排除提示:如果 Adobe Reader 報告"簽名無效",請確保 PFX 檔案包含受信任的根證書,並且reason / location字串符合 ASCII 編碼規範。
核心安全設定
PdfSecuritySettings → OwnerPassword 、 UserPassword 、 EncryptionAlgorithm 、 AllowUserPrinting
PdfDocument.SignAndStamp — PFX 路徑、權限、位置、原因、時間戳
用於深入研究的內部資源
教學課程-如何為PDF檔案設定密碼保護
-範例–對 PDF 檔案進行數位簽名
- API 參考–
PdfSecuritySettings
如何在 .NET Core 中最佳化和擴充 HTML 到 PDF 的效能?
IronPDF 的 Chromium 引擎在現代硬體上已經可以在不到 1 秒的時間內渲染大多數頁面,但透過大量渲染、啟用多執行緒和減少無頭 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"));
});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-0Missing either library manifests as a libnss3.so not found error in Docker logs.
Recommended Chrome flags (automatically applied by IronPDF) include --disable-gpu and --no-sandbox to reduce memory and root-user issues in containers.
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')";有關自訂 Promise 和 DOM 輪詢的專門WaitFor 教程,請參閱相關文件。
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";即時 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、數位簽章和加密),且不含浮水印。
評估庫之後,選擇永久開發者許可證、部署許可證或企業許可證; 每個套餐都包含免費的小版本更新、開發/測試/生產環境使用權以及 30 天退款保證。 應用密鑰只需一行程式碼( IronPdf.License.LicenseKey = "YOUR-KEY"; ),並且可以在 CI/CD 管道中自動化。
全面的文件——快速入門指南、 API 參考和教學影片——位於文件門戶,並會隨著每個 .NET 版本的發布而更新。
工程方面的問題可以透過線上聊天、電子郵件或電話在一個工作天內得到芝加哥支援團隊的回應。
效能調優和部署常見問題匯總在效能幫助中心。
快速連結
| 資源 | URL | 為什麼這很重要 |
|---|---|---|
| 取得 30 天試用金鑰 | https://ironpdf.com/demos/ | 解鎖所有功能,無浮水印 |
| 授權和定價 | https://ironpdf.com/licensing/ | 永久或訂閱計劃; Iron Suite 捆綁了 10 個庫 |
| API 參考 | https://ironpdf.com/object-reference/api/ | 完整的類文檔,例如ChromePdfRenderer |
| 文件入口網站 | https://ironpdf.com/docs/ | 指南、教學、範例項目 |
| 績效輔助 | https://ironpdf.com/troubleshooting/ironpdf-performance-assistance/ | 優化和擴展技巧 |
| 聯絡客服 | https://ironsoftware.com/contact-us/ | 線上聊天、電子郵件、電話支持 |
下一步
有了這些資源,任何 .NET 團隊都可以在一個迭代周期內將像素級完美的 PDF 交付到生產環境——無論是在本地、Docker 還是無伺服器環境中。
常見問題解答
如何在.NET Core中將HTML轉換為PDF?
在 .NET Core 中,您可以使用 IronPDF 庫將 HTML 轉換為 PDF。首先,安裝 IronPDF NuGet 套件,然後建立一個ChromePdfRenderer實例。使用RenderHtmlAsPdf方法將 HTML 字串轉換為 PDF。
如何將網站URL轉換為PDF文件?
若要將網站 URL 轉換為 PDF 文檔,請安裝 IronPDF NuGet 套件,建立ChromePdfRenderer實例,然後使用RenderUrlAsPdf方法將 URL 渲染為 PDF。可以使用SaveAs方法儲存結果。
將 Razor 視圖轉換為 PDF 的最佳方法是什麼?
將 Razor 視圖轉換為 PDF 的最佳方法是使用 IronPDF。首先,將 Razor 視圖渲染成 HTML 字串,然後將此字串傳遞給RenderHtmlAsPdf方法以建立 PDF 文件。
如何提升PDF文件的安全性?
使用 IronPDF 增強 PDF 安全性,方法包括套用 AES-256 加密、設定密碼和控制使用者權限。透過SecuritySettings屬性配置這些設置,以限制列印和編輯等操作。
有哪些選項可以自訂 PDF 渲染效果?
IronPDF 透過ChromePdfRenderOptions類別提供多種渲染選項,包括設定紙張大小、方向、邊距和套用 CSS 媒體類型。您還可以新增頁首、頁尾和浮水印,以實現自訂文件輸出。
如何在 Docker 容器中部署 PDF 生成應用程式?
若要在 Docker 容器中部署 PDF 產生應用程序,請在 Dockerfile 中配置 Linux 依賴項並設定使用者權限。使用IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig可實現自動相依性管理。
如何使用 C# 為 PDF 新增浮水印?
您可以使用 IronPDF 透過HtmlStamp物件的Watermark屬性為 PDF 新增浮水印。對於進階選項, HtmlStamper類別允許自訂定位和透明度效果。
我可以在PDF文件中新增數位簽名嗎?
是的,您可以使用 IronPDF 的PdfSignature類別為 PDF 新增數位簽章。對PdfDocument物件使用Sign方法,並提供憑證文件以確保文件的完整性和真實性。
如何最佳化.NET Core中的PDF生成效能?
透過重複使用線程安全的ChromePdfRenderer實例、啟用多線程以及移除不必要的無頭 Chrome 啟動標誌,優化 PDF 生成效能。這些做法有助於提高應用程式的效率。
本教學中的 .NET Core HTML 轉 PDF 範例是否也適用於 .NET 10?
是的。 IronPDF 完全相容於 .NET 10,因此您可以在 .NET 10 專案中使用本教學中的 ChromePdfRenderer HTML 轉 PDF 範例,而無需更改核心程式碼。主要差異在於,您需要在建立專案時指定目標框架為 .NET 10,然後從 NuGet 安裝最新的 IronPDF 包,即可從 HTML、Razor 視圖或 URL 產生像素級精確的 PDF 檔案。







