如何在 .NET Core 中產生 PDF 文件

使用 IronPDF 在 .NET Core 中使用 C# 將 HTML 轉換為 PDF

This article was translated from English: Does it need improvement?
Translated
View the article in English

在現代 .NET 應用程式中,直接從 HTML 產生高保真 PDF 是一項常規要求——報告、發票和工單都需要像素級完美的輸出,以匹配 Web UI。 IronPDF 透過公開一個 C# API 來簡化此工作流程,該 API 可將 HTML、Razor 視圖和完整的網站渲染成符合標準的 PDF 文件。 看完本指南後,開發人員將能夠轉換 ASP.NET Core 專案中的 URL、原始 HTML 或 MVC 視圖,並將相同的程式碼部署到 Windows、Linux、Docker 或無伺服器環境中。

尖端對於佈局問題,IronPDF 提供了一個無頭 Chrome 偵錯器,可以在 PDF 渲染之前幫助診斷 CSS、JavaScript 和媒體查詢的怪異之處。 請查看專門製作的像素級精準 HTML 轉 PDF 指南,以了解深入的技巧。

快速入門:在 .NET Core 中從 HTML 建立 PDF

使用 IronPDF 庫,在 .NET Core 中輕鬆將 HTML 轉換為 PDF。 本指南提供了一個簡單的範例,幫助您快速入門,只需編寫最少的程式碼即可將 HTML 內容渲染成高品質的 PDF。 非常適合希望輕鬆將 PDF 創建功能整合到應用程式中的開發人員。

Nuget Icon立即開始使用 NuGet 建立 PDF 檔案:

  1. 使用 NuGet 套件管理器安裝 IronPDF

    PM > Install-Package IronPdf

  2. 複製並運行這段程式碼。

    var pdf = new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf("<h1>Hello World</h1>");
  3. 部署到您的生產環境進行測試

    立即開始在您的專案中使用 IronPDF,免費試用!
    arrow pointer

快速入門清單

1.安裝Install-Package IronPdf
2.渲染 URLChromePdfRenderer.RenderUrlAsPdf()
3.渲染原始 HTMLChromePdfRenderer.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 higher
PM> Install-Package IronPdf             # .NET 8 LTS and higher
SHELL

[{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");
$vbLabelText   $csharpLabel

工作原理

  • 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");
$vbLabelText   $csharpLabel

為什麼有效

  • ChromePdfRenderer啟動一個沙盒化的 Chromium 實例——沒有系統 Chrome 依賴,使 Docker 映像保持精簡。
  • RenderUrlAsPdf會等待 DOM 和 JavaScript 完成再進行快照,因此單頁應用程式可以正確渲染。
  • CssMediaType設定為Print會告訴引擎使用特定於列印的規則,以符合瀏覽器的 Print → Save as PDF 輸出。
  • 產生的PdfDocument可以進行加密、數位簽章、合併或柵格化-這些功能將在後面的章節中介紹。

{t:(像素級精準調試:啟用renderer.LoggingOptions.DebugMode = true並按照 [headless-Chrome 調試指南] 的說明,在渲染期間檢查實時 DevTools。@@--括號關閉--@@

相關資源


如何在.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");
$vbLabelText   $csharpLabel

這段程式碼示範了什麼

-內建 Chromium -- IronPDF 捆綁了Chromium 引擎,保證了HTML5、CSS3 和 JavaScript 與現代瀏覽器的一致性
-單一依賴項--輕量級的 NuGet 安裝涵蓋 Windows、Linux、Docker 和 Azure/AWS,無需額外的系統程式庫。
-渲染選項-- PaperSizeCssMediaTypeRenderDelay鏡像瀏覽器列印設置,以便 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");
    }
}
$vbLabelText   $csharpLabel

這段程式碼說明了什麼

-沒有臨時檔案-- Razor 視圖在記憶體中渲染,然後直接傳遞給RenderHtmlAsPdf ,避免磁碟 I/O 和臨時資料夾競爭條件
-票據大小的輸出-- PaperSize = A5和窄邊距使在家中列印的票據保持緊湊。
-一致的列印樣式-- CssMediaType = Print應用與瀏覽器相同的@media print CSS 規則。
-二進位串流-- pdf.BinaryData以串流傳輸文檔,而無需存取文件系統; 非常適合 API 端點和 Lambda 函數。
-可重複使用的渲染器-- ChromePdfRenderer每個控制器實例化一次,然後重複使用,從而最大限度地減少進程產生開銷。

PaperSizePaperOrientationFitToPaperWidth

MarginsHeaderFooterWatermark

下一步:新增加密、數位簽章或將多個票據合併到一個文件中。請參閱合併範例和數位簽章操作指南


如何在渲染前微調紙張尺寸、頁邊距、頁首、浮水印和安全設定?

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");
$vbLabelText   $csharpLabel

這些選項為何重要

  • PaperSizeMarginsCssMediaType與瀏覽器的列印對話方塊一致,因此在 Windows、Linux 和 Docker 上,螢幕佈局和 PDF 保持相同。
  • HTML 頁首和頁尾支援 Razor 令牌、CSS 和 JavaScript-方便實現動態頁碼或品牌識別。
  • HtmlStamp允許使用一行程式碼建立具有完整 HTML + CSS 控制的品牌浮水印
    -安全選項支援 128 位元加密、擁有者/使用者密碼和細粒度權限,無需第三方工具。
    -數位簽名直接在代碼中添加加密印章,以保持法律真實性和防篡改性。
  • ExtractAllTextExtractAllImages等擷取輔助程式會在需要分析時逆轉該過程。

快速參考 — 常用設定

PaperSizePaperOrientationMarginsCssMediaTypeRenderDelay

HtmlHeaderHtmlFooter 、動態 Razor 佔位符、頁碼標記

WatermarkHtmlStamp 、不透明度、對齊方式

SecurityOptionsSignAndStamp 、所有者/用戶密碼、證書密封

後續任務:合併多個 PDF 文件,提取文字和映像,並部署到 Docker 或無伺服器平台。 請繼續執行部署部分,以確保跨平台一致性。


如何在Linux和Windows系統上將PDF產生程式碼部署到Docker容器中?

IronPDF 以單一自包含的 NuGet 套件的形式提供,因此在Windows 和 Linux上容器化 ASP.NET Core(或控制台)應用程式非常簡單。 關鍵是將已發布的二進位檔案複製到精簡的執行時間映像中,並且在 Linux 上,新增 IronPDF 所需的兩個本機程式庫( libnss3libatk1.0-0 )。

多階段 Dockerfile(Ubuntu 22.04)

請注意為什麼需要多階段? SDK 鏡像(第一階段)編譯專案; 最終運行時鏡像(第二階段)保持精簡——小於 120 MB——因為建置工具已被棄用。

####### ---------- 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.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
SHELL
  • API 操作內部呼叫ChromePdfRenderer.RenderUrlAsPdf ,就像第 2 節一樣。
    IronPDF 在容器內啟動其沙盒化的 Chromium 進程——由於它是無頭渲染的,因此不需要 X 伺服器。
  • 即使在進行大型渲染時,記憶體佔用也保持在 200 MB 以下。

[{t:(故障排除提示:如果容器日誌顯示"找不到 libnss3.so"錯誤,請確認libnss3libatk1.0-0都存在。 由於 musl C 庫缺少必要的符號,因此支援 Alpine 鏡像。

內部資源


如何在 .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");
$vbLabelText   $csharpLabel

為什麼這很重要

-開啟和合併PdfDocument.FromFile載入任何符合標準的 PDF,包括加密文件,而PdfDocument.Merge在一次呼叫中連接任意數量的文件。
-水印ApplyStamp (別名HtmlStamp )在選定的頁面上嵌入完全樣式化的 HTML/CSS 疊加層(徽標、二維碼或對角線文字),而無需柵格化。
-內容擷取ExtractAllTextExtractAllImages擷取原始 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");
$vbLabelText   $csharpLabel

幕後花絮

  • AES-256 加密-- IronPDF 使用 NIST 核准的AES 金鑰對有效載荷進行封裝,阻止未經授權的開啟、列印或複製貼上。
    -權限粒度-- AllowUserPrintingAllowUserFormData等屬性可以切換每個操作的權限; 任何限制措施都需要所有者密碼才能生效。
    -數位簽章-- SignAndStamp嵌入 RFC 3161 時間戳記和憑證鏈,建立 Adobe® Acrobat 和其他 ISO 32000-2 檢視器可辨識的防篡改雜湊值。
    -一站式 API -- 加密和簽章都修改同一個PdfDocument實例,避免多次文件傳遞,並保留內部字體、圖層和元資料。

故障排除提示:如果 Adobe Reader 報告"簽名無效",請確保 PFX 檔案包含受信任的根證書,並且reason / location字串符合 ASCII 編碼規範。

核心安全設定

PdfSecuritySettingsOwnerPasswordUserPasswordEncryptionAlgorithmAllowUserPrinting

PdfDocument.SignAndStamp — PFX 路徑、權限、位置、原因、時間戳

用於深入研究的內部資源

教學課程-如何為PDF檔案設定密碼保護
-範例對 PDF 檔案進行數位簽名


如何在 .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"));
});
$vbLabelText   $csharpLabel

2. 降低無頭Chrome的啟動成本

IronPDF 內建 Chromium 版本,但每次渲染都會產生少量啟動費用。 使用連線池會有所幫助, Linux 容器必須包含兩個本機程式庫:

RUN apt-get update && \
    apt-get install -y --no-install-recommends libnss3 libatk1.0-0

Missing 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. 使用RenderDelayWaitFor等待延遲載入的 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')";
$vbLabelText   $csharpLabel

有關自訂 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";
$vbLabelText   $csharpLabel

即時 DevTools 追蹤可以顯示缺少的字體、404 圖像和計時事件,而無需重新編譯程式碼。

5. 重複使用範本PDF,而不是重新渲染

對於發票運行,建立一個帶有佔位符(如[[name]]模板 PDF ,並執行文字替換,而不是重新建立複雜的 HTML。 速度提升 10 倍,而且佔用記憶體更少。

快速調校檢查清單

Parallel.ForEachasync/await 、重用單一ChromePdfRenderer

使用aspnet:8.0-jammy ;安裝libnss3 + libatk1.0-0 ;標誌--no-sandbox--disable-gpu

RenderDelayWaitFor() 、記錄 DevTools 時間軸以了解 SPA 的緩慢水合情況

延伸閱讀


我可以在哪裡下載免費試用版、選擇授權並獲得專家支援? {#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/線上聊天、電子郵件、電話支持

下一步

  1. 克隆範例儲存庫,其中演示了所有主要功能——從 MVC 視圖渲染到 AES-256 加密。
    2.將試用金鑰插入現有解決方案並執行單元測試以驗證跨平台相容性。
  2. 與工程團隊預約現場演示,以獲取特定項目的建議。

有了這些資源,任何 .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 檔案。

Jacob Mellor,Team Iron 首席技術官
首席技術長

Jacob Mellor 是 Iron Software 的首席技術官,也是一位富有遠見的工程師,率先開發了 C# PDF 技術。作為 Iron Software 核心程式碼庫的最初開發者,他自公司成立之初便參與塑造了其產品架構,並與執行長 Cameron Rimington 一起將其發展成為一家擁有 50 多名員工、服務於 NASA、特斯拉和全球政府機構的公司。

Jacob 於 1998 年至 2001 年在曼徹斯特大學獲得土木工程一級榮譽學士學位。 1999 年,他在倫敦創辦了自己的第一家軟體公司;2005 年,他創建了自己的第一個 .NET 元件。此後,他專注於解決微軟生態系統中的複雜問題。

他的旗艦產品 IronPDF 和 IronSuite .NET 庫在全球 NuGet 上的安裝量已超過 3000 萬次,其基礎程式碼持續為全球開發者工具提供支援。憑藉 25 年的商業經驗和 41 年的程式設計專長,Jacob 始終致力於推動企業級 C#、Java 和 Python PDF 技術的創新,同時指導下一代技術領導者。

經審核
傑夫·弗里茨
傑弗裡·T·弗里茨
.NET 社群團隊首席專案經理
Jeff 同時也是 .NET 和 Visual Studio 團隊的首席專案經理。他是 .NET Conf 虛擬會議系列的執行製片人,並主持每週兩次的開發者直播節目“Fritz and Friends”,在節目中他會與觀眾一起探討技術並編寫程式碼。 Jeff 也為包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP Summit 在內的微軟大型開發者活動撰寫研討會、簡報並策劃內容。
準備好開始了嗎?
Nuget 下載 17,012,929 | 版本: 2025.12 剛剛發布