如何在 .NET Core 中產生 PDF 檔案

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

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

直接從 HTML 生成高保真 PDF 是現代 .NET 應用程式的常規需求——報告、發票和票據皆需與網頁使用者介面完全一致的像素級精準輸出。 IronPDF 透過提供單一 C# API,將 HTML、Razor 視圖及完整網站渲染為符合標準的 PDF 文件,從而簡化此工作流程。 閱讀完本指南後,開發人員將能夠在 .NET Core 專案中轉換 URL、原始 HTML 或 MVC 檢視,並將相同的程式碼部署至 Windows、Linux、Docker 或無伺服器環境。

提示針對版面配置問題,IronPDF 隨附一個無頭 Chrome 除錯器,有助於在 PDF 渲染前診斷 CSS、JavaScript 及媒體查詢的異常行為。 (請參閱專門的"像素級精準 HTML 轉 PDF"指南,以了解深入的技術技巧。

快速入門:在 .NET Core 中將 HTML 轉為 PDF using IronPDF 函式庫,在 .NET Core 中輕鬆將 HTML 轉換為 PDF。 本指南提供一個簡單的範例,讓您能透過極少的程式碼,將 HTML 內容渲染成高品質的 PDF,快速上手。 非常適合希望輕鬆將 PDF 建立功能整合至應用程式的開發人員。

  1. using NuGet 套件管理員安裝 https://www.nuget.org/packages/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

本教學指南涵蓋的內容

  • URL、HTML 字串及 Razor 檢視轉換
  • 紙張、邊距及媒體類型的設定
  • 跨平台部署(Windows、Linux、Docker)
  • 後處理:合併、添加浮水印、設定密碼保護及對 PDF 進行數位簽章
  • 端到端範例:票務預訂 MVC 應用程式

如何在 .NET Core 中安裝 PDF 函式庫?

在任何 .NET 8 專案中,安裝此函式庫只需一行程式碼,且與 .NET 9 預覽版以及即將推出的 .NET 10 版本皆具向前相容性。 使用 NuGet 的套件管理主控台,套件管理器將自動為 Windows、Linux、Docker 及無伺服器目標解析所有依賴項。

PM> Install-Package IronPdf             # .NET 8 LTS and higher
PM> Install-Package IronPdf             # .NET 8 LTS and higher
SHELL

請注意需要命令列介面 (CLI) 嗎?在您的專案資料夾中執行 dotnet add package IronPdf 即可使用相同的指令。

安裝完成後,請透過轉換任何公開網址來確認所有設定是否已正確連接:

// Program.cs — .NET 8 LTS
using IronPdf;

var renderer = new ChromePdfRenderer();

// Render a live website to PDF
using PdfDocument pdf = renderer.RenderUrlAsPdf("https://example.com");

// Persist to disk
pdf.SaveAs("website-snapshot.pdf");
// Program.cs — .NET 8 LTS
using IronPdf;

var renderer = new ChromePdfRenderer();

// Render a live website to PDF
using PdfDocument pdf = renderer.RenderUrlAsPdf("https://example.com");

// Persist to disk
pdf.SaveAs("website-snapshot.pdf");
' Program.cs — .NET 8 LTS
Imports IronPdf

Private renderer = New ChromePdfRenderer()

' Render a live website to PDF
Private PdfDocument As using

' Persist to disk
pdf.SaveAs("website-snapshot.pdf")
$vbLabelText   $csharpLabel

運作方式

  • ChromePdfRenderer 會在後台啟動一個沙盒化的 Chromium 實例——無需額外安裝 Chrome。
  • RenderUrlAsPdf 擷取完整渲染後的 DOM,包含由 JavaScript 驅動的內容、CSS 媒體查詢及字型。
  • 生成的 PdfDocument 提供了用於合併、密碼保護或對輸出進行數位簽名的輔助方法——這些功能將在本教學後續部分中詳細說明。

有關部署細節(Azure App Service、AWS Lambda、本地端 Linux)的更多資訊,請參閱專用的安裝指南以及進階 NuGet 設定頁面。 關於 Docker 和 K8s 叢集的內部 CI/CD 技巧,請參閱 Docker 部署最佳實務


.NET Core 服務如何將活躍網站的 URL 轉換為 PDF?

只需單次呼叫 RenderUrlAsPdf 即可:傳入任何公開可用的 URL,IronPDF 便會回傳一份完全渲染且符合標準的 PDF 檔案。 以下程式碼針對 .NET 8 LTS 設計,在 .NET 9 預覽版以及預計於 2025 年推出的 .NET 10 版本中,均可直接編譯執行。

逐步範例

// Program.cs — .NET 8 LTS-compatible
using IronPdf;

// 1. Activate a license (or trial key)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

// 2. Create a reusable renderer instance
var renderer = new ChromePdfRenderer
{
    RenderingOptions =
    {
        // Force A4 portrait output and apply @media print styles
        PaperSize    = PdfPaperSize.A4,
        CssMediaType = PdfCssMediaType.Print
    }
};

// 3. Convert Microsoft Docs home page to PDF
using PdfDocument pdf = renderer.RenderUrlAsPdf("https://learn.microsoft.com/");

// 4. Save the PDF or stream it from a Web API
pdf.SaveAs("docs-offline-copy.pdf");
// Program.cs — .NET 8 LTS-compatible
using IronPdf;

// 1. Activate a license (or trial key)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

// 2. Create a reusable renderer instance
var renderer = new ChromePdfRenderer
{
    RenderingOptions =
    {
        // Force A4 portrait output and apply @media print styles
        PaperSize    = PdfPaperSize.A4,
        CssMediaType = PdfCssMediaType.Print
    }
};

// 3. Convert Microsoft Docs home page to PDF
using PdfDocument pdf = renderer.RenderUrlAsPdf("https://learn.microsoft.com/");

// 4. Save the PDF or stream it from a Web API
pdf.SaveAs("docs-offline-copy.pdf");
' Program.cs — .NET 8 LTS-compatible
Imports IronPdf

' 1. Activate a license (or trial key)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"

' 2. Create a reusable renderer instance
Dim renderer = New ChromePdfRenderer With {
	.RenderingOptions = {
		PaperSize = PdfPaperSize.A4,
		CssMediaType = PdfCssMediaType.Print
	}
}

' 3. Convert Microsoft Docs home page to PDF
Using pdf As PdfDocument = renderer.RenderUrlAsPdf("https://learn.microsoft.com/")
	
	' 4. Save the PDF or stream it from a Web API
	pdf.SaveAs("docs-offline-copy.pdf")
End Using
$vbLabelText   $csharpLabel

為何有效

  • ChromePdfRenderer 會啟動一個沙箱化的 Chromium 實例——無需依賴系統版 Chrome,從而保持 Docker 映像檔的精簡。
  • RenderUrlAsPdf 會在等待 DOM 和 JavaScript 處理完畢後才進行快照,因此單頁應用程式能正確渲染。
  • CssMediaType 設定為 PRINT,會指示引擎使用列印專用的規則,其效果等同於瀏覽器的 PRINT → Save as PDF 輸出。
  • 生成的 PdfDocument 可進行加密、數位簽章、合併或光柵化——相關功能將於後文詳述。

提示像素級精準除錯:啟用 renderer.LoggingOptions.DebugMode = true 並遵循無頭 Chrome 除錯指南,以在渲染過程中檢視即時開發者工具。

相關資源


如何在 .NET Core 中將原始 HTML 轉換為 PDF?

將 HTML 字串(或 Razor 視圖的渲染標記)傳遞給 ChromePdfRenderer.RenderHtmlAsPdf,即可立即產生符合標準的 PDF 檔案。 此方法會啟動 IronPDF 內建的 Chromium 引擎,因此無需安裝外部瀏覽器或依賴 WebView。 下方的相同程式碼目前可在 .NET 8 LTS 上編譯,並與 .NET 9 以及預定於 2025 年 11 月發佈的 .NET 10 保持向前相容。

範例 — 從 HTML 片段產生 PDF

// Program.cs — compatible with .NET 8 and newer
using IronPdf;

// Sample HTML fragment (could also be read from a file, Razor view, or CMS)
const string html = """
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Quarterly Report</title>
  <style>
     body { font-family:'Segoe UI', sans-serif; margin:1.2rem; }
     header { margin-bottom:2rem; }
     h1 { color:#3056d3; }
     table { width:100%; border-collapse:collapse; margin-top:1rem; }
     th,td { border:1px solid #ddd; padding:0.5rem; text-align:right; }
     tr:nth-child(even){ background-color:#f8f9fa; }
  </style>
</head>
<body>
  <header><h1>Q2 Revenue Summary</h1></header>
  <table>
    <thead><tr><th>Product</th><th>Revenue ($)</th></tr></thead>
    <tbody>
      <tr><td>IronPDF for .NET</td><td>1,200,000</td></tr>
      <tr><td>IronOCR for .NET</td><td>890,000</td></tr>
      <tr><td>IronXL for .NET</td><td>610,000</td></tr>
    </tbody>
  </table>
</body>
</html>
""";

// 1. Create a renderer once and reuse it across conversions
var renderer = new ChromePdfRenderer
{
    RenderingOptions =
    {
        PaperSize    = PdfPaperSize.A4,                  // ISO-standard paper size
        PaperOrientation = PdfPaperOrientation.Portrait,
        CssMediaType = PdfCssMediaType.Screen,           // Respect on-screen CSS
        RenderDelay  = 100,                              // Wait 100 ms for JS/animations
        FallbackEncoding = "utf-8"                       // Handle non-ASCII correctly
    }
};

// 2. Render the HTML fragment
using PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

// 3. Persist to disk or return via ASP.NET Core FileStreamResult
pdf.SaveAs("q2-report.pdf");
// Program.cs — compatible with .NET 8 and newer
using IronPdf;

// Sample HTML fragment (could also be read from a file, Razor view, or CMS)
const string html = """
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Quarterly Report</title>
  <style>
     body { font-family:'Segoe UI', sans-serif; margin:1.2rem; }
     header { margin-bottom:2rem; }
     h1 { color:#3056d3; }
     table { width:100%; border-collapse:collapse; margin-top:1rem; }
     th,td { border:1px solid #ddd; padding:0.5rem; text-align:right; }
     tr:nth-child(even){ background-color:#f8f9fa; }
  </style>
</head>
<body>
  <header><h1>Q2 Revenue Summary</h1></header>
  <table>
    <thead><tr><th>Product</th><th>Revenue ($)</th></tr></thead>
    <tbody>
      <tr><td>IronPDF for .NET</td><td>1,200,000</td></tr>
      <tr><td>IronOCR for .NET</td><td>890,000</td></tr>
      <tr><td>IronXL for .NET</td><td>610,000</td></tr>
    </tbody>
  </table>
</body>
</html>
""";

// 1. Create a renderer once and reuse it across conversions
var renderer = new ChromePdfRenderer
{
    RenderingOptions =
    {
        PaperSize    = PdfPaperSize.A4,                  // ISO-standard paper size
        PaperOrientation = PdfPaperOrientation.Portrait,
        CssMediaType = PdfCssMediaType.Screen,           // Respect on-screen CSS
        RenderDelay  = 100,                              // Wait 100 ms for JS/animations
        FallbackEncoding = "utf-8"                       // Handle non-ASCII correctly
    }
};

// 2. Render the HTML fragment
using PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

// 3. Persist to disk or return via ASP.NET Core FileStreamResult
pdf.SaveAs("q2-report.pdf");
' Program.cs — compatible with .NET 8 and newer
Imports IronPdf

' Sample HTML fragment (could also be read from a file, Razor view, or CMS)
Private Const html As String = "<!DOCTYPE html>
<html lang=""en"">
<head>
  <meta charset=""utf-8"">
  <title>Quarterly Report</title>
  <style>
     body { font-family:'Segoe UI', sans-serif; margin:1.2rem; }
     header { margin-bottom:2rem; }
     h1 { color:#3056d3; }
     table { width:100%; border-collapse:collapse; margin-top:1rem; }
     th,td { border:1px solid #ddd; padding:0.5rem; text-align:right; }
     tr:nth-child(even){ background-color:#f8f9fa; }
  </style>
</head>
<body>
  <header><h1>Q2 Revenue Summary</h1></header>
  <table>
    <thead><tr><th>Product</th><th>Revenue ($)</th></tr></thead>
    <tbody>
      <tr><td>IronPDF for .NET</td><td>1,200,000</td></tr>
      <tr><td>IronOCR for .NET</td><td>890,000</td></tr>
      <tr><td>IronXL for .NET</td><td>610,000</td></tr>
    </tbody>
  </table>
</body>
</html>"

' 1. Create a renderer once and reuse it across conversions
Private renderer = New ChromePdfRenderer With {
	.RenderingOptions = {
		PaperSize = PdfPaperSize.A4,
		PaperOrientation = PdfPaperOrientation.Portrait,
		CssMediaType = PdfCssMediaType.Screen,
		RenderDelay = 100,
		FallbackEncoding = "utf-8"
	}
}

' 2. Render the HTML fragment
Private PdfDocument As using

' 3. Persist to disk or return via ASP.NET Core FileStreamResult
pdf.SaveAs("q2-report.pdf")
$vbLabelText   $csharpLabel

程式碼的示範內容

  • 內建 Chromium — IronPDF 整合了 Chromium 引擎,確保 HTML5、CSS3 及 JavaScript 的相容性與現代瀏覽器一致
  • 單一依賴項透過輕量級 NuGet 安裝即可支援 Windows、Linux、Docker 以及 Azure/AWS,無需額外系統函式庫。
  • 渲染選項CssMediaTypeRenderDelay 會模擬瀏覽器的 PRINT 設定,使 PDF 文件與螢幕上的版面配置相符。
  • 未來兼容性 — .NET 8、.NET 9 STS 以及即將推出的 .NET 10 皆採用相同的 API 介面,因此長期維護工作量極低
  • 後處理掛鉤PdfDocument 提供了用於合併、密碼保護及數位簽名的輔助函式,相關內容將於本指南後文詳述。

延伸閱讀:請參閱"HTML 字串轉 PDF"分步教學,以及完整的 ChromePdfRenderer API 文件


如何將 ASP .NET Core MVC 檢視匯出為 PDF?

IronPDF 會像瀏覽器一樣渲染經過完整處理的 Razor 視圖( .cshtml ),並將結果串流輸出為 PdfDocument。 以下工作流程能保持控制器邏輯的簡潔性,無需瀏覽器外掛程式,並相容於 .NET 8 LTS、.NET 9 預覽版,以及預定於 2025 年 11 月發佈的 .NET 10 版本。

端到端控制器範例

// TicketsController.cs — .NET 8 LTS / MVC
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using YourApp.Models;           // TicketViewModel

public class TicketsController : Controller
{
    private readonly ChromePdfRenderer _renderer;

    public TicketsController()
    {
        _renderer = new ChromePdfRenderer
        {
            RenderingOptions =
            {
                PaperSize        = PdfPaperSize.A5,            // Compact ticket size
                PaperOrientation = PdfPdfOrientation.Portrait,
                FitToPaperWidth  = true,
                CssMediaType     = PdfCssMediaType.Print,
                Margins = new PdfMargins(5, 10, 5, 10)         // mm
            }
        };
    }

    // GET /Tickets/Print/42
    public async Task<IActionResult> Print(int id)
    {
        TicketViewModel vm = await _service.GetTicketAsync(id);

        // 1. Render the Razor view to an HTML string
        string html  = await RazorTemplateEngine.RenderViewAsync(
                           HttpContext, "~/Views/Tickets/Print.cshtml", vm);

        // 2. Convert HTML → PDF
        using PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);

        // 3. Stream back as a file
        return File(pdf.BinaryData, "application/pdf",
                    $"ticket-{id}.pdf");
    }
}
// TicketsController.cs — .NET 8 LTS / MVC
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using YourApp.Models;           // TicketViewModel

public class TicketsController : Controller
{
    private readonly ChromePdfRenderer _renderer;

    public TicketsController()
    {
        _renderer = new ChromePdfRenderer
        {
            RenderingOptions =
            {
                PaperSize        = PdfPaperSize.A5,            // Compact ticket size
                PaperOrientation = PdfPdfOrientation.Portrait,
                FitToPaperWidth  = true,
                CssMediaType     = PdfCssMediaType.Print,
                Margins = new PdfMargins(5, 10, 5, 10)         // mm
            }
        };
    }

    // GET /Tickets/Print/42
    public async Task<IActionResult> Print(int id)
    {
        TicketViewModel vm = await _service.GetTicketAsync(id);

        // 1. Render the Razor view to an HTML string
        string html  = await RazorTemplateEngine.RenderViewAsync(
                           HttpContext, "~/Views/Tickets/Print.cshtml", vm);

        // 2. Convert HTML → PDF
        using PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);

        // 3. Stream back as a file
        return File(pdf.BinaryData, "application/pdf",
                    $"ticket-{id}.pdf");
    }
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc
Imports YourApp.Models ' TicketViewModel

Public Class TicketsController
    Inherits Controller

    Private ReadOnly _renderer As ChromePdfRenderer

    Public Sub New()
        _renderer = New ChromePdfRenderer With {
            .RenderingOptions = New PdfRenderingOptions With {
                .PaperSize = PdfPaperSize.A5, ' Compact ticket size
                .PaperOrientation = PdfPdfOrientation.Portrait,
                .FitToPaperWidth = True,
                .CssMediaType = PdfCssMediaType.Print,
                .Margins = New PdfMargins(5, 10, 5, 10) ' mm
            }
        }
    End Sub

    ' GET /Tickets/Print/42
    Public Async Function Print(id As Integer) As Task(Of IActionResult)
        Dim vm As TicketViewModel = Await _service.GetTicketAsync(id)

        ' 1. Render the Razor view to an HTML string
        Dim html As String = Await RazorTemplateEngine.RenderViewAsync(
            HttpContext, "~/Views/Tickets/Print.cshtml", vm)

        ' 2. Convert HTML → PDF
        Using pdf As PdfDocument = _renderer.RenderHtmlAsPdf(html)
            ' 3. Stream back as a file
            Return File(pdf.BinaryData, "application/pdf", $"ticket-{id}.pdf")
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

此程式碼的說明

  • 無需臨時檔案 — Razor 檢視表在記憶體中渲染後,會直接傳遞至 RenderHtmlAsPdf,從而避免磁碟 I/O 及臨時資料夾的競態條件
  • 票券尺寸的輸出PaperSize = A5 格式與窄邊距設計,讓居家列印的票券保持緊湊。
  • 一致的 PRINT 樣式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");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

' Configure everything in one place
renderer.RenderingOptions = New ChromePdfRenderOptions With {
    ' 1. Page layout
    .PaperSize = PdfPaperSize.A4, ' ISO size
    .PaperOrientation = PdfPdfOrientation.Portrait,
    .Margins = New PdfMargins With {.Top = 20, .Bottom = 25, .Left = 15, .Right = 15}, ' mm

    ' 2. Timing & media
    .CssMediaType = PdfCssMediaType.Print, ' Respect @media print
    .EnableJavaScript = True,
    .RenderDelay = 200, ' Wait 200 ms for animations

    ' 3. Headers & footers (HTML gives full design freedom)
    .HtmlHeader = "<header style='font:14px Segoe UI'>Invoice — {{date}}</header>",
    .HtmlFooter = "<footer style='text-align:right;font-size:10px'>Page {{page}} / {{total-pages}}</footer>",

    ' 4. Watermark
    .Watermark = New HtmlStamp With {
        .HtmlTemplate = "<div style='font-size:50px;color:#cccccc;opacity:0.3;'>CONFIDENTIAL</div>",
        .VerticalAlignment = VerticalAlignment.Center,
        .HorizontalAlignment = HorizontalAlignment.Center
    },

    ' 5. Security
    .SecurityOptions = New PdfSecurityOptions With {
        .OwnerPassword = "StrongOwnerPwd!",
        .UserPassword = "ReadOnly",
        .AllowUserPrinting = False,
        .AllowUserCopyPasteContent = False
    }
}

' Render any HTML
Using pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Advanced Options Demo</h1>")
    ' Digitally sign with a PFX certificate (optional)
    pdf.SignAndStamp("./certs/company.pfx", "Iron Software", "Bangkok", "Approval")

    ' Save
    pdf.SaveAs("advanced-options-demo.pdf")
End Using
$vbLabelText   $csharpLabel

為何這些選項至關重要

  • MarginsCssMediaType 模擬瀏覽器的列印對話方塊,因此螢幕版面配置與 PDF 檔案在 Windows、Linux 及 Docker 環境中皆保持一致。
  • HTML 頁首與頁尾支援 Razor 標記、CSS 及 JavaScript,非常適合用於動態頁碼或品牌標識。
  • HtmlStamp 讓您僅需一行程式碼,即可建立具備完整 HTML + CSS 控制權的品牌浮水印
  • 安全性選項可啟用 128 位元加密、擁有者/使用者密碼,以及無需第三方工具即可設定的細粒度權限。
  • 數位簽章會在程式碼中直接添加加密印章,以確保法律上的真實性並提供防篡改證明。
  • 諸如 ExtractAllTextExtractAllImages 等提取輔助工具,可在需要進行分析時逆向執行該流程。

快速參考 — 常用設定

##

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 所需的兩個原生函式庫(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 以下。

提示疑難排解提示:若容器日誌顯示"libnss3.so 未找到"錯誤,請確認 libnss3libatk1.0-0 皆已存在。 (支援 Alpine 映像檔,因為 musl C 函式庫缺少必要的符號。

內部資源


如何在 .NET Core 中開啟、合併、添加浮水印以及從現有 PDF 檔案中擷取內容?

IronPDF 將所有 PDF 檔案(無論是由 IronPDF、Adobe® Acrobat 或第三方工具產生)視為一級 PdfDocument 物件,可無損品質地開啟、編輯、設定安全性及重新儲存。 相同的 API 介面目前可在 .NET 8 LTS 上運作,並能在 .NET 9 預覽版及即將推出的 .NET 10 版本中無需修改即可編譯。

統一範例 — 開啟 → 合併 → 浮水印 → 擷取

// ManipulateExistingPdf.cs — .NET 8 LTS compatible
using IronPdf;
using System.Linq;

// Step 1: Open two existing files (password-protected PDFs are supported)
PdfDocument invoice  = PdfDocument.FromFile("invoice.pdf", "ReadOnly");   // open with user pwd
PdfDocument tAndCs   = PdfDocument.FromFile("terms.pdf");                 // no pwd required

// Step 2: Merge them (invoice pages first, then T&Cs)
PdfDocument mergedPdf = PdfDocument.Merge(invoice, tAndCs);               // 1-liner merge

// Step 3: Apply a diagonal CONFIDENTIAL watermark to every page
mergedPdf.ApplyStamp(
    "<div style='font-size:60px;color:#d9534f;opacity:0.2;transform:rotate(-45deg);"
  + "width:100%;text-align:center;'>CONFIDENTIAL</div>",
    verticalAlignment   : VerticalAlignment.Center,
    horizontalAlignment : HorizontalAlignment.Center);

// Step 4: Extract all text and the first image for audit purposes
string fullText = mergedPdf.ExtractAllText();
var    image    = mergedPdf.ExtractAllImages().FirstOrDefault();

// Step 5: Save or stream
mergedPdf.SaveAs("invoice-with-terms.pdf");
// ManipulateExistingPdf.cs — .NET 8 LTS compatible
using IronPdf;
using System.Linq;

// Step 1: Open two existing files (password-protected PDFs are supported)
PdfDocument invoice  = PdfDocument.FromFile("invoice.pdf", "ReadOnly");   // open with user pwd
PdfDocument tAndCs   = PdfDocument.FromFile("terms.pdf");                 // no pwd required

// Step 2: Merge them (invoice pages first, then T&Cs)
PdfDocument mergedPdf = PdfDocument.Merge(invoice, tAndCs);               // 1-liner merge

// Step 3: Apply a diagonal CONFIDENTIAL watermark to every page
mergedPdf.ApplyStamp(
    "<div style='font-size:60px;color:#d9534f;opacity:0.2;transform:rotate(-45deg);"
  + "width:100%;text-align:center;'>CONFIDENTIAL</div>",
    verticalAlignment   : VerticalAlignment.Center,
    horizontalAlignment : HorizontalAlignment.Center);

// Step 4: Extract all text and the first image for audit purposes
string fullText = mergedPdf.ExtractAllText();
var    image    = mergedPdf.ExtractAllImages().FirstOrDefault();

// Step 5: Save or stream
mergedPdf.SaveAs("invoice-with-terms.pdf");
' ManipulateExistingPdf.cs — .NET 8 LTS compatible
Imports IronPdf
Imports System.Linq

' Step 1: Open two existing files (password-protected PDFs are supported)
Private invoice As PdfDocument = PdfDocument.FromFile("invoice.pdf", "ReadOnly") ' open with user pwd
Private tAndCs As PdfDocument = PdfDocument.FromFile("terms.pdf") ' no pwd required

' Step 2: Merge them (invoice pages first, then T&Cs)
Private mergedPdf As PdfDocument = PdfDocument.Merge(invoice, tAndCs) ' 1-liner merge

' Step 3: Apply a diagonal CONFIDENTIAL watermark to every page
mergedPdf.ApplyStamp("<div style='font-size:60px;color:#d9534f;opacity:0.2;transform:rotate(-45deg);" & "width:100%;text-align:center;'>CONFIDENTIAL</div>", verticalAlignment := VerticalAlignment.Center, horizontalAlignment := HorizontalAlignment.Center)

' Step 4: Extract all text and the first image for audit purposes
Dim fullText As String = mergedPdf.ExtractAllText()
Dim image = mergedPdf.ExtractAllImages().FirstOrDefault()

' Step 5: Save or stream
mergedPdf.SaveAs("invoice-with-terms.pdf")
$vbLabelText   $csharpLabel

為何這很重要

  • 開啟與合併PdfDocument.FromFile 可載入任何符合標準的 PDF 檔案(包括加密檔案),而 PdfDocument.Merge 則能在單次呼叫中將任意數量的文件進行串接。
  • WatermarkApplyStamp(別名 HtmlStamp)可在選定的頁面中嵌入完全格式化的 HTML/CSS 疊加層——例如標誌、QR 碼或對角線文字——且無需進行光柵化處理。
  • 內容擷取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 加密、鎖定 PRINT 權限,並添加可見簽名

// SecureAndSign.cs — .NET 8 LTS compatible
using IronPdf;

// Step 1: Load an existing PDF (or produce one with RenderHtmlAsPdf)
PdfDocument pdf = PdfDocument.FromFile("financial-report.pdf");

// Step 2: Configure AES-256 encryption & permissions
pdf.SecuritySettings = new PdfSecuritySettings
{
    EncryptionAlgorithm   = PdfEncryptionAlgorithm.AES256Bit,
    OwnerPassword         = "IronAdmin!2025",
    UserPassword          = "ReadOnly",
    AllowUserPrinting     = PdfPrintSecurity.Disabled,
    AllowUserCopyPasteContent = false,
    AllowUserAnnotations  = false
};

// Step 3: Digitally sign with a PFX certificate
pdf.SignAndStamp(
    certificatePath : "./certs/ironsoftware.pfx",
    authority       : "Iron Software Ltd.",
    location        : "Chicago, IL",
    reason          : "Final approval"
);

// Step 4: Persist or stream
pdf.SaveAs("financial-report-secured-signed.pdf");
// SecureAndSign.cs — .NET 8 LTS compatible
using IronPdf;

// Step 1: Load an existing PDF (or produce one with RenderHtmlAsPdf)
PdfDocument pdf = PdfDocument.FromFile("financial-report.pdf");

// Step 2: Configure AES-256 encryption & permissions
pdf.SecuritySettings = new PdfSecuritySettings
{
    EncryptionAlgorithm   = PdfEncryptionAlgorithm.AES256Bit,
    OwnerPassword         = "IronAdmin!2025",
    UserPassword          = "ReadOnly",
    AllowUserPrinting     = PdfPrintSecurity.Disabled,
    AllowUserCopyPasteContent = false,
    AllowUserAnnotations  = false
};

// Step 3: Digitally sign with a PFX certificate
pdf.SignAndStamp(
    certificatePath : "./certs/ironsoftware.pfx",
    authority       : "Iron Software Ltd.",
    location        : "Chicago, IL",
    reason          : "Final approval"
);

// Step 4: Persist or stream
pdf.SaveAs("financial-report-secured-signed.pdf");
' SecureAndSign.cs — .NET 8 LTS compatible
Imports IronPdf

' Step 1: Load an existing PDF (or produce one with RenderHtmlAsPdf)
Private pdf As PdfDocument = PdfDocument.FromFile("financial-report.pdf")

' Step 2: Configure AES-256 encryption & permissions
pdf.SecuritySettings = New PdfSecuritySettings With {
	.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256Bit,
	.OwnerPassword = "IronAdmin!2025",
	.UserPassword = "ReadOnly",
	.AllowUserPrinting = PdfPrintSecurity.Disabled,
	.AllowUserCopyPasteContent = False,
	.AllowUserAnnotations = False
}

' Step 3: Digitally sign with a PFX certificate
pdf.SignAndStamp(certificatePath := "./certs/ironsoftware.pfx", authority := "Iron Software Ltd.", location := "Chicago, IL", reason := "Final approval")

' Step 4: Persist or stream
pdf.SaveAs("financial-report-secured-signed.pdf")
$vbLabelText   $csharpLabel

幕後花絮

  • AES-256 加密 — IronPDF 會使用 NIST 認證的 AES 金鑰對資料包進行封裝,防止未經授權的開啟、列印或複製貼上。
  • 權限細粒度 — 諸如 AllowUserPrintingAllowUserFormData 等屬性可切換"按動作"的權限; 任何限制措施生效前,皆需輸入擁有者密碼。
  • 數位簽章SignAndStamp 會嵌入 RFC 3161 時間戳記與憑證鏈,產生可被 Adobe® Acrobat 及其他 ISO 32000-2 檢視器識別的防篡改雜湊值。
  • 一站式 API —— 加密與簽名皆修改同一個 PdfDocument 實例,避免多次檔案傳遞,並保留內部字型、圖層及元資料。

提示疑難排解提示:若 Adobe Reader 顯示"簽名無效",請確認 PFX 檔案包含受信任的根憑證,且 location 字串不含 ASCII 問題。

核心安全性設定

##

`PdfSecuritySettings` → `OwnerPassword`, `UserPassword`, `EncryptionAlgorithm`, `AllowUserPrinting`

##

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

深入了解的內部資源


如何在 .NET Core 中優化並擴展 HTML 轉 PDF 的效能?

IronPDF 的 Chromium 引擎在現代硬體上渲染多數頁面已不到 1 秒,但透過批次渲染、啟用多執行緒以及削減 Headless Chrome 的開銷,可將處理量倍增。 以下提示同樣適用於所有 .NET 版本。

1. 在背景執行緒池中進行批次渲染

// BatchRender.cs — Thread-safe on .NET 8+
using IronPdf;
using System.Threading.Tasks;

var htmlSources = Directory.GetFiles("./html", "*.html");
var renderer    = new ChromePdfRenderer();                 // reuse 1 instance

Parallel.ForEach(htmlSources, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, file =>
{
    string html = File.ReadAllText(file);
    using PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(Path.ChangeExtension(file, ".pdf"));
});
// BatchRender.cs — Thread-safe on .NET 8+
using IronPdf;
using System.Threading.Tasks;

var htmlSources = Directory.GetFiles("./html", "*.html");
var renderer    = new ChromePdfRenderer();                 // reuse 1 instance

Parallel.ForEach(htmlSources, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, file =>
{
    string html = File.ReadAllText(file);
    using PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(Path.ChangeExtension(file, ".pdf"));
});
' BatchRender.cs — Thread-safe on .NET 8+
Imports IronPdf
Imports System.Threading.Tasks

Private htmlSources = Directory.GetFiles("./html", "*.html")
Private renderer = New ChromePdfRenderer() ' reuse 1 instance

Parallel.ForEach(htmlSources, New ParallelOptions With {.MaxDegreeOfParallelism = Environment.ProcessorCount}, Sub(file)
	Dim html As String = File.ReadAllText(file)
	Using pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)
		pdf.SaveAs(Path.ChangeExtension(file, ".pdf"))
	End Using
End Sub)
$vbLabelText   $csharpLabel

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

IronPDF 內建其專屬的 Chromium 版本,但每次渲染都會產生微量的啟動延遲。 資源池化有助於提升效能,且 Linux 容器必須包含兩個原生函式庫:

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

若缺少任一函式庫,將在 Docker 日誌中顯示 libnss3.so not found 錯誤。

建議的 Chrome 旗標(由 IronPDF 自動套用)包含 --disable-gpu--no-sandbox,用以減少容器環境中的記憶體消耗及 root 使用者相關問題。

3. 等待帶有 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')";
renderer.RenderingOptions.RenderDelay = 200 ' ms
' OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
$vbLabelText   $csharpLabel

請參閱專門的 WaitFor 教學,了解自訂 Promise 和 DOM 輪詢。

4. 為單一請求啟用除錯記錄

renderer.LoggingOptions.DebugMode        = true;
renderer.LoggingOptions.LogsToConsole    = true;
renderer.LoggingOptions.LogFilePath      = "./logs/ironpdf-debug.log";
renderer.LoggingOptions.DebugMode        = true;
renderer.LoggingOptions.LogsToConsole    = true;
renderer.LoggingOptions.LogFilePath      = "./logs/ironpdf-debug.log";
renderer.LoggingOptions.DebugMode = True
renderer.LoggingOptions.LogsToConsole = True
renderer.LoggingOptions.LogFilePath = "./logs/ironpdf-debug.log"
$vbLabelText   $csharpLabel

Live DevTools 即時追蹤功能可在無需重新編譯程式碼的情況下,偵測缺失的字型、404 錯誤圖片及時間事件。

5. 重複使用範本 PDF 檔案,而非重新渲染

針對發票批次處理,請建立包含 [[name]]佔位符的 PDF 範本,並透過文字替換功能處理,而非重新建構複雜的 HTML 結構。 速度提升 10 倍,且記憶體佔用更少。

快速校對清單

##

`Parallel.ForEach`, `async/await`, 重複使用單一 `ChromePdfRenderer`

##

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

##

`RenderDelay`, `WaitFor()`, 記錄 DevTools 時間軸以追蹤單頁應用程式(SPA)的緩慢初始化

延伸閱讀


我該去哪裡下載免費試用版、選擇授權方案,以及尋求專家支援? {#anchor-10-resources}

透過 開始免費試用 表單,系統將立即發放 30 天試用金鑰,解鎖所有功能——包括 HTML 轉 PDF、數位簽章及加密功能——且不帶水印。

評估該函式庫後,請選擇永久開發者部署Enterprise授權; 每個方案均包含免費的小幅更新、開發/測試/生產環境的使用權限,以及 30 天退款保證。 套用金鑰僅需一行程式碼 (IronPdf.License.LicenseKey = "YOUR-KEY";),並可於 CI/CD 建置流程中自動化執行。

完整的文件資源——包括快速入門指南API 參考教學影片——皆存放於文件入口網站,並會隨著每次 .NET 版本發布而更新。

工程相關問題將由位於芝加哥的支援團隊透過即時聊天電子郵件或電話,於一個工作天內回覆。

效能調校與部署的常見問題已彙整於"效能支援中心"。

快速連結

資源 URL 為何這很重要
取得 30 天試用金鑰 https://ironpdf.com/demos/ 解鎖所有功能,無浮水印
授權與定價 https://ironpdf.com/licensing/ 永久授權或訂閱方案; Iron Suite 整合了 10 個函式庫
API 參考 https://ironpdf.com/object-reference/api/ 完整的類別文件,例如 ChromePdfRenderer
文件入口網站 https://ironpdf.com/docs/ 指南、教學、範例專案
效能支援 https://ironpdf.com/troubleshooting/ironpdf-performance-assistance/ 優化與擴展技巧
聯絡支援團隊 https://ironsoftware.com/contact-us/ 即時聊天、電子郵件支援、電話支援

後續步驟

  1. 複製此範例儲存庫,其中展示了從 MVC 視圖渲染到 AES-256 加密等所有主要功能。
  2. 將試用金鑰套用至現有解決方案,並執行單元測試以驗證跨平台相容性。
  3. 預約與工程團隊進行現場演示,以獲取針對您專案的具體建議。

借助這些資源,任何 .NET 團隊都能在單一衝刺週期內,將像素級精準的 PDF 文件部署至生產環境——無論是本地部署、Docker 環境或無伺服器架構。

常見問題

如何在 .NET Core 中將 HTML 轉換為 PDF?

您可以在 .NET Core 中使用 IronPDF 函式庫將 HTML 轉換為 PDF。首先,安裝 IronPDF NuGet 套件,然後建立一個 ChromePdfRenderer 實例。使用 RenderHtmlAsPdf 方法將 HTML 字串轉換為 PDF。

如何將網站網址轉換為 PDF 文件?

若要將網站網址轉換為 PDF 文件,請安裝 IronPDF NuGet 套件,建立一個 ChromePdfRenderer 實例,並使用 RenderUrlAsPdf 方法將網址渲染為 PDF。可透過 SaveAs 方法儲存。

將 Razor 視圖轉換為 PDF 的最佳方法是什麼?

將 Razor 檢視轉換為 PDF 的最佳方式是使用 IronPDF。首先,將 Razor 檢視渲染為 HTML 字串,然後將此字串傳遞給 RenderHtmlAsPdf 方法以建立 PDF 文件。

如何提升 PDF 文件的安全性?

透過 IronPDF 應用 AES-256 加密、設定密碼及控制使用者權限,以強化 PDF 安全性。可透過 SecuritySettings 屬性進行設定,以限制PRINT和編輯等操作。

有哪些可用選項可自訂 PDF 渲染?

IronPDF 透過 ChromePdfRenderOptions 類別提供多種渲染選項,包括設定紙張尺寸、方向、邊距,以及套用 CSS 媒體類型。您亦可新增頁首、頁尾及浮水印,以客製化文件輸出。

如何在 Docker 容器中部署 PDF 生成應用程式?

若要在 Docker 容器中部署 PDF 生成應用程式,請在 Dockerfile 中設定 Linux 依賴項並設定使用者權限。使用 IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig 進行自動依賴項管理。

如何使用 C# 在 PDF 中加入浮水印?

您可以透過 IronPDF 並利用 Watermark 屬性並搭配 HtmlStamp 物件。若需進階選項, HtmlStamper 類別可實現自訂定位與透明度效果。

我可以為 PDF 文件添加數位簽名嗎?

是的,您可以使用 IronPdf 的 PdfSignature 類別。請使用 Sign 方法並 PdfDocument 並提供憑證檔案,以確保文件的完整性與真實性。

如何在 .NET Core 中優化 PDF 生成效能?

透過重複使用一個執行緒安全的 ChromePdfRenderer 實例、啟用多執行緒,以及移除不必要的無介面 Chrome 啟動參數,來優化 PDF 產生效能。這些做法有助於提升應用程式的效率。

本教學中的 .NET Core HTML 轉 PDF 範例是否也適用於 .NET 10?

是的。IronPDF 完全相容於 .NET 10,因此您可以在 .NET 10 專案中直接使用本教學中的 ChromePdfRenderer HTML 轉 PDF 範例,無需修改核心程式碼。主要差異在於建立專案時需指定 .NET 10 為目標平台,然後從 NuGet 安裝最新的 IronPdf 套件,即可從 HTML、Razor 檢視或 URL 產生像素級精準的 PDF 檔案。

雅各·梅勒(Jacob Mellor),Team Iron 首席技術長
技術長

雅各·梅勒(Jacob Mellor)是 Iron Software 的首席技術官,也是一位開創 C# PDF 技術的遠見卓識工程師。作為 Iron Software 核心程式碼庫的原始開發者,他自公司成立以來便塑造了產品架構,並與執行長卡梅隆·里明頓(Cameron Rimington)共同將公司發展為擁有 50 多名員工的企業,服務對象包括 NASA、特斯拉(Tesla)及全球政府機構。

雅各布於曼徹斯特大學(1998–2001)取得土木工程一等榮譽工程學士學位(BEng)。他在 1999 年於倫敦創立首家軟體公司,並於 2005 年開發出首批 .NET 元件,此後專注於解決微軟生態系統中的複雜問題。

其旗艦產品 IronPDF 與 Iron Suite .NET 函式庫在全球已累積超過 3,000 萬次 NuGet 安裝,其基礎程式碼持續驅動著全球廣泛使用的開發者工具。憑藉 25 年商業經驗與 41 年程式設計專業,雅各持續致力於推動企業級 C#、Java 及 Python PDF 技術的創新,同時指導新一代技術領導者。

審閱者:
Jeff Fritz
Jeffrey T. Fritz
首席程式經理 - .NET 社群團隊
Jeff 同時也是 .NET 與 Visual Studio 團隊的首席程式經理。他是 .NET Conf 虛擬會議系列的執行製作人,並主持每週播出兩次的開發者直播節目《Fritz and Friends》,在節目中他會與觀眾一起探討技術話題並共同編寫程式碼。Jeff 負責撰寫工作坊內容、準備簡報,並為 Microsoft Build、Microsoft Ignite、.NET Conf 以及 Microsoft MVP Summit 等微軟最大規模的開發者活動規劃內容。
準備開始了嗎?
Nuget 下載 19,014,616 | 版本: 2026.5 just released
Still Scrolling Icon

還在往下捲動嗎?

想要快速確認成果嗎? PM > Install-Package IronPdf
執行範例 觀看您的 HTML 轉為 PDF。