跳過到頁腳內容
使用IRONPDF

ASP.NET HTML到PDF轉換使用IronPDF

IronPDF 使用基於 Chrome 的渲染引擎將 ASP.NET HTML 轉換為 PDF,同時保留 CSS 樣式和 JavaScript 功能。 本教學課程示範了在 ASP.NET Core 應用程式中將 HTML 字串、視圖和 網址 轉換為專業 PDF 文件的有效方法。

將動態 ASP.NET HTML 轉換為 PDF 文件是現代 Web 應用程式的基本要求。 無論您是產生發票、建立報告或產生可下載的 PDF 文件,將 HTML 內容轉換為專業的 PDF 文件對於提供完善的使用者體驗至關重要。

IronPDF 透過提供可靠的基於 Chrome 的渲染引擎,簡化了 ASP HTML 到 PDF 的轉換過程,該引擎可在生成的 PDF 文件中保留 HTML 格式、CSS 樣式和 JavaScript 功能。 本教學將引導您了解使用IronPDF 庫在 ASP.NET Core 應用程式中將 HTML 轉換為 PDF 的有效方法,包括其 Chrome 渲染引擎,以實現像素級完美的效果。

IronPDF C# PDF 庫主頁橫幅展示了主要功能,包括 HTML 轉 PDF、PDF 編輯功能以及帶有下載和許可按鈕的部署選項。

為什麼開發人員需要將 HTML 轉換為 PDF?

ASP.NET Core 應用程式經常產生動態 HTML 內容,使用者需要下載、分享或將其存檔為 PDF 檔案。 將 HTML 轉換為 PDF 相比簡單地保存網頁或截圖具有幾個關鍵優勢。

PDF 文件在所有裝置和平台上保持一致的格式,確保您的發票無論是在 Windows、Mac 還是行動裝置上查看,看起來都完全一樣。 它們非常適合需要數位簽名、安全限製或專業列印的文件。 伺服器端 PDF 轉換無需使用者安裝特定軟體,並能更好地控制最終輸出。

常見用例包括從儀表板資料產生財務報告、從訂單資訊建立可下載的發票、產生帶有二維碼的門票和通行證,以及將表單提交內容轉換為永久記錄。 透過在伺服器端處理 ASP HTML 到 PDF 的轉換,您可以確保無論使用者的瀏覽器或裝置功能為何,都能獲得一致的結果。 IronPDF 擅長渲染複雜的佈局,並且能夠流暢地處理包含大量 JavaScript 的內容。 支撐此流程的PDF 規範ISO 標準組織維護,這使得 PDF 成為最便於跨平台分發的文件格式。

IronPDF 功能概述,主要分為四大類:建立 PDF、轉換 PDF、編輯 PDF 以及簽名和保護 PDF,每個部分下方都有詳細的功能清單。

如何在 ASP.NET 專案中安裝 IronPDF?

在 ASP.NET Core 專案中使用 IronPDF 非常簡單。 該程式庫支援 .NET 6、8 和 10,因此與所有現代 ASP.NET Core 應用程式相容。 有關特定平台需求,請查看Windows 相容性指南Linux 安裝說明

將 IronPDF 新增至專案中最快的方法是透過 NuGet 套件管理器。 在解決方案資源管理器中右鍵單擊您的項目,選擇"管理 NuGet 套件",然後搜尋 IronPdf。 點選安裝最新版本。 有關詳細說明,請參閱IronPDF 安裝指南

使用軟體套件管理器控制台進行安裝:

Install-Package IronPdf
Install-Package IronPdf
SHELL

或使用 .NET CLI:

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

套件管理器控制台顯示 IronPDF NuGet 套件的安裝過程,其中包含多個相依性的下載

安裝 IronPDF 後該如何進行設定?

安裝完成後,將 using IronPdf; 指令新增至任何需要處理 PDF 產生的 C# 檔案。 匯入此檔案後,您可以存取 ChromePdfRenderer 類別和所有渲染配置選項。

對於大多數 ASP.NET Core 應用程序,IronPDF 安裝後即可立即執行。 但是,您可以在 Program.cs 檔案中設定全域選項,以針對您的特定託管環境(Windows、Linux、Docker 或雲端)微調行為:

using IronPdf;

// Optional global configuration (place in Program.cs)
Installation.TempFolderPath = @"C:\Temp\IronPdf\";
Installation.LinuxAndDockerDependenciesAutoConfig = true;

// Enable logging for debugging PDF rendering issues
Installation.LoggingMode = IronPdf.Logging.LoggingMode.All;
Installation.LogFilePath = "IronPdfLog.log";

// Required for Azure App Service deployments
Installation.AzureQuickDeployment = true;
using IronPdf;

// Optional global configuration (place in Program.cs)
Installation.TempFolderPath = @"C:\Temp\IronPdf\";
Installation.LinuxAndDockerDependenciesAutoConfig = true;

// Enable logging for debugging PDF rendering issues
Installation.LoggingMode = IronPdf.Logging.LoggingMode.All;
Installation.LogFilePath = "IronPdfLog.log";

// Required for Azure App Service deployments
Installation.AzureQuickDeployment = true;
Imports IronPdf

' Optional global configuration
Installation.TempFolderPath = "C:\Temp\IronPdf\"
Installation.LinuxAndDockerDependenciesAutoConfig = True

' Enable logging for debugging PDF rendering issues
Installation.LoggingMode = IronPdf.Logging.LoggingMode.All
Installation.LogFilePath = "IronPdfLog.log"

' Required for Azure App Service deployments
Installation.AzureQuickDeployment = True
$vbLabelText   $csharpLabel

對於Azure 部署,啟用 AzureQuickDeployment 可獲得最佳效能。 對於生產環境,應實施自訂日誌記錄,以監控 PDF 產生操作並及早發現渲染失敗。

IronPDF 跨平台支援圖,展示了其與 .NET 版本、作業系統、雲端平台和開發環境的兼容性

如何將 HTML 字串轉換為 PDF?

IronPDF 最基本的操作是將 HTML 字串直接轉換為 PDF 文件。 當您在 ASP.NET 應用程式中動態建立 HTML 內容或使用 HTML 範本時,這種方法非常理想。 RenderHtmlAsPdf 方法提供了從變數、字串產生器或範本引擎轉換 HTML 的靈活性。

// Create a PDF renderer instance
var renderer = new ChromePdfRenderer();

// Configure rendering options for print-quality output
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.RenderDelay = 500; // milliseconds to wait before capture

// Convert an HTML string to a PDF document
var pdf = renderer.RenderHtmlAsPdf("<h1>Sales Report</h1><p>Generated on: " + DateTime.Now + "</p>");

// Save the PDF to disk
pdf.SaveAs("report.pdf");

// Or get binary data to return as a file download
var pdfBytes = pdf.BinaryData;
// Create a PDF renderer instance
var renderer = new ChromePdfRenderer();

// Configure rendering options for print-quality output
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.RenderDelay = 500; // milliseconds to wait before capture

// Convert an HTML string to a PDF document
var pdf = renderer.RenderHtmlAsPdf("<h1>Sales Report</h1><p>Generated on: " + DateTime.Now + "</p>");

// Save the PDF to disk
pdf.SaveAs("report.pdf");

// Or get binary data to return as a file download
var pdfBytes = pdf.BinaryData;
' Create a PDF renderer instance
Dim renderer = New ChromePdfRenderer()

' Configure rendering options for print-quality output
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
renderer.RenderingOptions.RenderDelay = 500 ' milliseconds to wait before capture

' Convert an HTML string to a PDF document
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Sales Report</h1><p>Generated on: " & DateTime.Now & "</p>")

' Save the PDF to disk
pdf.SaveAs("report.pdf")

' Or get binary data to return as a file download
Dim pdfBytes = pdf.BinaryData
$vbLabelText   $csharpLabel

這段程式碼創建了一個 ChromePdfRenderer 實例,該實例使用 Chromium 引擎來渲染你的 HTML。 RenderHtmlAsPdf 方法接受任何有效的 HTML 字串,並傳回一個 PdfDocument 對象,您可以將其儲存到磁碟或串流傳輸到瀏覽器。 對於非同步 PDF 生成,請將呼叫包裝在 Task.Run 中,以避免阻塞請求執行緒。

PDF輸出檔是什麼樣的?

截圖顯示的是PDF檢視器中的一個基本銷售報告,標題和時間戳記生成於2025年1月11日晚上11:51:30

如何將 CSS 樣式和圖片融合在一起?

IronPDF 完全支援 CSS 樣式,並且在將 HTML 轉換為 PDF 時可以嵌入來自各種來源的圖片。 渲染器可以處理內嵌樣式、外部樣式表、Web字體、SVG圖形和base64編碼的圖像:

var html = @"
    <style>
        body { font-family: Arial, sans-serif; margin: 40px; }
        h1 { color: #2c3e50; border-bottom: 2px solid #3498db; }
        .highlight { background-color: #f1c40f; padding: 5px; }
        .data-table { width: 100%; border-collapse: collapse; }
        .data-table td { border: 1px solid #ddd; padding: 8px; }
    </style>
    <h1>Monthly Report</h1>
    <p>This document includes <span class='highlight'>highlighted text</span> and table data.</p>
    <table class='data-table'>
        <tr><td>Product</td><td>Sales</td></tr>
        <tr><td>Widget A</td><td>$1,234</td></tr>
    </table>";

var renderer = new ChromePdfRenderer();

// Set base 網址 so relative resource paths resolve correctly
renderer.RenderingOptions.BaseUrl = new Uri("https://yourdomain.com/");
renderer.RenderingOptions.EnableJavaScript = true;

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("styled-report.pdf");
var html = @"
    <style>
        body { font-family: Arial, sans-serif; margin: 40px; }
        h1 { color: #2c3e50; border-bottom: 2px solid #3498db; }
        .highlight { background-color: #f1c40f; padding: 5px; }
        .data-table { width: 100%; border-collapse: collapse; }
        .data-table td { border: 1px solid #ddd; padding: 8px; }
    </style>
    <h1>Monthly Report</h1>
    <p>This document includes <span class='highlight'>highlighted text</span> and table data.</p>
    <table class='data-table'>
        <tr><td>Product</td><td>Sales</td></tr>
        <tr><td>Widget A</td><td>$1,234</td></tr>
    </table>";

var renderer = new ChromePdfRenderer();

// Set base 網址 so relative resource paths resolve correctly
renderer.RenderingOptions.BaseUrl = new Uri("https://yourdomain.com/");
renderer.RenderingOptions.EnableJavaScript = true;

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("styled-report.pdf");
Imports System
Imports IronPdf

Dim html As String = "
    <style>
        body { font-family: Arial, sans-serif; margin: 40px; }
        h1 { color: #2c3e50; border-bottom: 2px solid #3498db; }
        .highlight { background-color: #f1c40f; padding: 5px; }
        .data-table { width: 100%; border-collapse: collapse; }
        .data-table td { border: 1px solid #ddd; padding: 8px; }
    </style>
    <h1>Monthly Report</h1>
    <p>This document includes <span class='highlight'>highlighted text</span> and table data.</p>
    <table class='data-table'>
        <tr><td>Product</td><td>Sales</td></tr>
        <tr><td>Widget A</td><td>$1,234</td></tr>
    </table>"

Dim renderer As New ChromePdfRenderer()

' Set base URL so relative resource paths resolve correctly
renderer.RenderingOptions.BaseUrl = New Uri("https://yourdomain.com/")
renderer.RenderingOptions.EnableJavaScript = True

Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("styled-report.pdf")
$vbLabelText   $csharpLabel

渲染器能夠完全保真地處理 CSS3 特性,包括 flexbox 和網格佈局。 對於複雜的佈局,請使用Bootstrap 相容性指南或使用 CSS 規則實作自訂分頁符號。

如何將 ASP.NET Core 視圖轉換為 PDF?

將整個 ASP.NET Core 視圖轉換為 PDF 是基於現有範本產生報表的常見需求。 IronPDF 支援Razor 視圖ASPX 頁面,甚至是Blazor 元件

如何轉換控制器視圖?

在控制器中將視圖渲染為 HTML 字串,然後將其傳遞給 IronPDF。 這種方法適用於 MVC Core 和 MVC Framework 應用程式:

[HttpGet]
public async Task<IActionResult> DownloadPdf()
{
    var invoiceModel = new InvoiceModel
    {
        InvoiceNumber = 12345,
        Date = DateTime.Now,
        CustomerName = "Acme Corporation",
        Items = new List<InvoiceItem>
        {
            new InvoiceItem { Description = "Service", Quantity = 1, Price = 100.0 },
            new InvoiceItem { Description = "Support", Quantity = 2, Price = 50.0 }
        },
        Total = 200.0
    };

    // Render the Razor view to an HTML string first
    var htmlContent = await RenderViewToString("Invoice", invoiceModel);

    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
    renderer.RenderingOptions.PrintHtmlBackgrounds = true;

    // Add a text header with the invoice number
    renderer.RenderingOptions.TextHeader.CenterText = "Invoice #" + invoiceModel.InvoiceNumber;
    renderer.RenderingOptions.TextHeader.DrawDividerLine = true;

    var pdf = renderer.RenderHtmlAsPdf(htmlContent);

    // Restrict copying while allowing printing
    pdf.SecuritySettings.AllowUserPrinting = true;
    pdf.SecuritySettings.AllowUserCopyPasteContent = false;

    var fileName = $"invoice_{invoiceModel.InvoiceNumber}_{DateTime.Now:yyyyMMdd}.pdf";
    return File(pdf.BinaryData, "application/pdf", fileName);
}
[HttpGet]
public async Task<IActionResult> DownloadPdf()
{
    var invoiceModel = new InvoiceModel
    {
        InvoiceNumber = 12345,
        Date = DateTime.Now,
        CustomerName = "Acme Corporation",
        Items = new List<InvoiceItem>
        {
            new InvoiceItem { Description = "Service", Quantity = 1, Price = 100.0 },
            new InvoiceItem { Description = "Support", Quantity = 2, Price = 50.0 }
        },
        Total = 200.0
    };

    // Render the Razor view to an HTML string first
    var htmlContent = await RenderViewToString("Invoice", invoiceModel);

    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
    renderer.RenderingOptions.PrintHtmlBackgrounds = true;

    // Add a text header with the invoice number
    renderer.RenderingOptions.TextHeader.CenterText = "Invoice #" + invoiceModel.InvoiceNumber;
    renderer.RenderingOptions.TextHeader.DrawDividerLine = true;

    var pdf = renderer.RenderHtmlAsPdf(htmlContent);

    // Restrict copying while allowing printing
    pdf.SecuritySettings.AllowUserPrinting = true;
    pdf.SecuritySettings.AllowUserCopyPasteContent = false;

    var fileName = $"invoice_{invoiceModel.InvoiceNumber}_{DateTime.Now:yyyyMMdd}.pdf";
    return File(pdf.BinaryData, "application/pdf", fileName);
}
Imports System
Imports System.Collections.Generic
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc

<HttpGet>
Public Async Function DownloadPdf() As Task(Of IActionResult)
    Dim invoiceModel = New InvoiceModel With {
        .InvoiceNumber = 12345,
        .Date = DateTime.Now,
        .CustomerName = "Acme Corporation",
        .Items = New List(Of InvoiceItem) From {
            New InvoiceItem With {.Description = "Service", .Quantity = 1, .Price = 100.0},
            New InvoiceItem With {.Description = "Support", .Quantity = 2, .Price = 50.0}
        },
        .Total = 200.0
    }

    ' Render the Razor view to an HTML string first
    Dim htmlContent = Await RenderViewToString("Invoice", invoiceModel)

    Dim renderer = New ChromePdfRenderer()
    renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter
    renderer.RenderingOptions.PrintHtmlBackgrounds = True

    ' Add a text header with the invoice number
    renderer.RenderingOptions.TextHeader.CenterText = "Invoice #" & invoiceModel.InvoiceNumber
    renderer.RenderingOptions.TextHeader.DrawDividerLine = True

    Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)

    ' Restrict copying while allowing printing
    pdf.SecuritySettings.AllowUserPrinting = True
    pdf.SecuritySettings.AllowUserCopyPasteContent = False

    Dim fileName = $"invoice_{invoiceModel.InvoiceNumber}_{DateTime.Now:yyyyMMdd}.pdf"
    Return File(pdf.BinaryData, "application/pdf", fileName)
End Function
$vbLabelText   $csharpLabel

這種方法首先將 Razor 視圖渲染為 HTML,然後將其轉換為 PDF 並將檔案傳回瀏覽器。 對於沒有完整 ASP.NET 管道的無頭轉換場景,請考慮使用 Razor.Templating.Core。

生成的 PDF 是什麼樣子?

! PDF 檢視器顯示了 Acme 公司 2025 年 2 月 11 日開立的編號為 12345 的已渲染發票,其中包含一項服務項目,總額為 100.00 美元。

如何將網址轉換為PDF?

對於現有網頁,IronPDF 可以直接將任何 網址 轉換為 PDF 檔案。此方法支援cookie和自訂 HTTP 標頭,用於已認證的請求:

[HttpGet]
public IActionResult GeneratePdfFromUrl()
{
    var renderer = new ChromePdfRenderer();

    // Allow time for dynamic content to load before capture
    renderer.RenderingOptions.WaitFor.RenderDelay = 2000;
    renderer.RenderingOptions.ViewportWidth = 1920;

    // Pass authorization headers if the page requires authentication
    renderer.RenderingOptions.HttpHeaders.Add("Authorization", "Bearer your-token");

    var pdf = renderer.RenderUrlAsPdf("https://yourwebsite.com/report");

    // Compress embedded images to reduce file size
    pdf.CompressImages(90);

    return File(pdf.BinaryData, "application/pdf", "webpage.pdf");
}
[HttpGet]
public IActionResult GeneratePdfFromUrl()
{
    var renderer = new ChromePdfRenderer();

    // Allow time for dynamic content to load before capture
    renderer.RenderingOptions.WaitFor.RenderDelay = 2000;
    renderer.RenderingOptions.ViewportWidth = 1920;

    // Pass authorization headers if the page requires authentication
    renderer.RenderingOptions.HttpHeaders.Add("Authorization", "Bearer your-token");

    var pdf = renderer.RenderUrlAsPdf("https://yourwebsite.com/report");

    // Compress embedded images to reduce file size
    pdf.CompressImages(90);

    return File(pdf.BinaryData, "application/pdf", "webpage.pdf");
}
Imports Microsoft.AspNetCore.Mvc

<HttpGet>
Public Function GeneratePdfFromUrl() As IActionResult
    Dim renderer = New ChromePdfRenderer()

    ' Allow time for dynamic content to load before capture
    renderer.RenderingOptions.WaitFor.RenderDelay = 2000
    renderer.RenderingOptions.ViewportWidth = 1920

    ' Pass authorization headers if the page requires authentication
    renderer.RenderingOptions.HttpHeaders.Add("Authorization", "Bearer your-token")

    Dim pdf = renderer.RenderUrlAsPdf("https://yourwebsite.com/report")

    ' Compress embedded images to reduce file size
    pdf.CompressImages(90)

    Return File(pdf.BinaryData, "application/pdf", "webpage.pdf")
End Function
$vbLabelText   $csharpLabel

此方法處理所有外部資源,包括樣式表、腳本和映像。 對於大量使用 JavaScript 的網站,請調整渲染延遲或使用WaitFor 條件,以便在特定 DOM 事件觸發後才觸發擷取。

網址轉換結果是什麼?

IronPDF 庫主頁展示了 C# PDF 轉換的功能,包括 HTML 轉 PDF 功能、定價選項以及 .NET 開發人員的程式碼範例。

如何自訂 PDF 輸出?

IronPDF 提供豐富的自訂選項,可控制如何從 HTML 產生 PDF 文件。 這些設定可協助您建立符合特定頁面佈局和格式要求的專業文件。 探索所有可用的渲染選項

如何設定頁面大小和邊距?

精確控制紙張尺寸邊距,實現專業文件佈局:

var renderer = new ChromePdfRenderer();

// Set standard paper size and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;

// Set page margins in millimeters
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;

// Define a custom paper size in inches when needed
renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11);

// Use print CSS media type for print-optimized output
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
var renderer = new ChromePdfRenderer();

// Set standard paper size and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;

// Set page margins in millimeters
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;

// Define a custom paper size in inches when needed
renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11);

// Use print CSS media type for print-optimized output
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
Dim renderer = New ChromePdfRenderer()

' Set standard paper size and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait

' Set page margins in millimeters
renderer.RenderingOptions.MarginTop = 25
renderer.RenderingOptions.MarginBottom = 25
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20

' Define a custom paper size in inches when needed
renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11)

' Use print CSS media type for print-optimized output
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
renderer.RenderingOptions.PrintHtmlBackgrounds = True
$vbLabelText   $csharpLabel

您可以選擇標準紙張尺寸或自訂尺寸,設定縱向或橫向方向,並調整頁邊距以滿足您的設計要求。 如需調整頁面方向,請探索頁面旋轉選項

如何新增頁首和頁尾?

新增統一的頁首和頁尾可以提升 PDF 文件的專業外觀。 IronPDF 同時支援純文字標題和包含嵌入式圖片和 CSS 的完整 HTML 標題:

// Simple text header and footer with dynamic placeholders
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
    CenterText = "Company Report",
    LeftText = "{date}",
    RightText = "Confidential",
    FontSize = 12,
    FontFamily = "Arial",
    DrawDividerLine = true
};

renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
    CenterText = "Page {page} of {total-pages}",
    LeftText = "© 2025 Company Name",
    DrawDividerLine = true
};

// For complex branded headers, use an HTML fragment instead
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = @"
        <div style='display: flex; justify-content: space-between; align-items: center;'>
            <img src='logo.png' height='30' />
            <h2>Monthly Report</h2>
            <span>{date}</span>
        </div>",
    MaxHeight = 50,
    DrawDividerLine = true
};
// Simple text header and footer with dynamic placeholders
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
    CenterText = "Company Report",
    LeftText = "{date}",
    RightText = "Confidential",
    FontSize = 12,
    FontFamily = "Arial",
    DrawDividerLine = true
};

renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
    CenterText = "Page {page} of {total-pages}",
    LeftText = "© 2025 Company Name",
    DrawDividerLine = true
};

// For complex branded headers, use an HTML fragment instead
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = @"
        <div style='display: flex; justify-content: space-between; align-items: center;'>
            <img src='logo.png' height='30' />
            <h2>Monthly Report</h2>
            <span>{date}</span>
        </div>",
    MaxHeight = 50,
    DrawDividerLine = true
};
' Simple text header and footer with dynamic placeholders
renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
    .CenterText = "Company Report",
    .LeftText = "{date}",
    .RightText = "Confidential",
    .FontSize = 12,
    .FontFamily = "Arial",
    .DrawDividerLine = True
}

renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With {
    .CenterText = "Page {page} of {total-pages}",
    .LeftText = "© 2025 Company Name",
    .DrawDividerLine = True
}

' For complex branded headers, use an HTML fragment instead
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
    .HtmlFragment = "
        <div style='display: flex; justify-content: space-between; align-items: center;'>
            <img src='logo.png' height='30' />
            <h2>Monthly Report</h2>
            <span>{date}</span>
        </div>",
    .MaxHeight = 50,
    .DrawDividerLine = True
}
$vbLabelText   $csharpLabel

頁首和頁尾支援頁碼、日期和動態內容的特殊佔位符。 您也可以為特定頁面套用不同的頁眉,以實現更精細的控制。

ASP.NET PDF 轉換的最佳實務是什麼?

為確保將 HTML 轉換為 PDF 時能達到最佳效能與品質,請遵循以下經實證有效的做法。 針對大規模部署實施效能最佳化策略。

在生成 PDF 之前,請務必先在瀏覽器中測試 HTML 渲染效果,以確認樣式與版面配置。 對於外部資源,請使用基本 網址,因為相對路徑在轉換過程中可能會導致解析失敗。 對於 JavaScript 程式碼較多的頁面,請新增渲染延遲以確保在擷取之前頁面完全載入。

以下範例展示了一個可重複使用的 PDF 服務,該服務集中管理配置並處理非同步產生:

public class PdfService
{
    private readonly ChromePdfRenderer _renderer;

    public PdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.RenderDelay = 100;
        _renderer.RenderingOptions.Timeout = 60000;
        _renderer.RenderingOptions.EnableJavaScript = true;
        _renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
    }

    public async Task<byte[]> GeneratePdfAsync(string html, bool compressImages = false)
    {
        var pdf = await Task.Run(() => _renderer.RenderHtmlAsPdf(html));

        if (compressImages)
        {
            pdf.CompressImages(90);
        }

        return pdf.BinaryData;
    }
}
public class PdfService
{
    private readonly ChromePdfRenderer _renderer;

    public PdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.RenderDelay = 100;
        _renderer.RenderingOptions.Timeout = 60000;
        _renderer.RenderingOptions.EnableJavaScript = true;
        _renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
    }

    public async Task<byte[]> GeneratePdfAsync(string html, bool compressImages = false)
    {
        var pdf = await Task.Run(() => _renderer.RenderHtmlAsPdf(html));

        if (compressImages)
        {
            pdf.CompressImages(90);
        }

        return pdf.BinaryData;
    }
}
Public Class PdfService
    Private ReadOnly _renderer As ChromePdfRenderer

    Public Sub New()
        _renderer = New ChromePdfRenderer()
        _renderer.RenderingOptions.RenderDelay = 100
        _renderer.RenderingOptions.Timeout = 60000
        _renderer.RenderingOptions.EnableJavaScript = True
        _renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
    End Sub

    Public Async Function GeneratePdfAsync(html As String, Optional compressImages As Boolean = False) As Task(Of Byte())
        Dim pdf = Await Task.Run(Function() _renderer.RenderHtmlAsPdf(html))

        If compressImages Then
            pdf.CompressImages(90)
        End If

        Return pdf.BinaryData
    End Function
End Class
$vbLabelText   $csharpLabel

建議針對經常產生的文件實施快取機制,以減輕伺服器負載。 在Web應用程式中使用非同步方法可以提高可擴充性。 對於高容量場景,請考慮並行處理或將IronPDF 部署為微服務

部署到生產環境時,請設定適當的臨時資料夾路徑,並確保您的託管環境已安裝必要的依賴項,特別是對於Linux 部署。 監控記憶體使用情況,並根據微軟 .NET 指南中的IDisposable 模式實現適當的記憶體釋放模式。 處理大型 HTML 文件時,使用串流處理方法來最大限度地減少記憶體開銷。

下表總結了三種主要的轉換方法以及每種方法的適用場景:

IronPDF ASP.NET 轉換法比較
方法 最適合 關鍵 API 身份驗證支持
HTML字串 內建動態內容程式碼 RenderHtmlAsPdf() 不適用
Razor 視圖 現有的 MVC 視圖和模板 RenderHtmlAsPdf() 會話上下文
網址 公用或經過認證的網頁 RenderUrlAsPdf() Cookie、標頭、憑證

PDF生成流程的下一步是什麼?

使用 IronPDF,在 ASP.NET Core 應用程式中將 ASP HTML 轉換為 PDF 變得非常簡單。 此函式庫基於 Chrome 的渲染技術可確保準確轉換,同時提供豐富的自訂選項,用於產生專業文件。 探索進階功能,例如PDF/A 合規性數位簽章表單建立

無論是處理 HTML 字串、網址 或完整的 Razor 視圖,IronPDF 都能保留精確的格式、CSS 樣式和 JavaScript 行為。 考慮探索PDF 壓縮浮水印元資料管理,以實現完整的文件控制。

立即開始您的 30 天免費試用,在您的 ASP.NET Core 應用程式中實現專業的 PDF 生成功能。 需要幫忙挑選嗎? 查看許可證選項或預約團隊演示。

IronPDF 的許可頁面顯示了四個定價等級(Lite、Plus、Professional 和 Unlimited),每個等級對開發者、地點和專案數量都有不同的限制

常見問題解答

在ASP.NET Core中將HTML轉換為PDF的最佳方法是什麼?

在ASP.NET Core中將HTML轉換為PDF的最佳方式是使用IronPDF。它提供了將HTML內容轉換為PDF的無縫解決方案,確保高質量的PDF生成。

為什麼我應該使用IronPDF將HTML轉換為PDF?

IronPDF提供了強大的功能,比如精確的渲染、對CSS和JavaScript的支持以及處理複雜HTML文檔的能力。這使得它非常適合從ASP.NET應用程式生成專業級的PDF。

IronPDF能否處理ASP.NET應用程式中的動態內容?

是的,IronPDF可以有效處理ASP.NET應用程式中的動態內容。它處理並轉換動態HTML內容為PDF,非常適合創建發票、報告和其他文件。

能否在使用IronPDF生成的PDF中包含CSS樣式?

當然,IronPDF支持CSS樣式。您可以應用現有的CSS樣式表,以確保PDF輸出與HTML內容的設計和佈局一致。

IronPDF是如何支持HTML到PDF轉換中的JavaScript的?

IronPDF完全支持JavaScript,允許您將動態元素和互動內容包含在HTML中,而這些元素和內容會在生成的PDF中得到準確渲染。

將HTML轉換為PDF在ASP.NET中的一些常見使用案例是什麼?

常見的使用案例包括生成發票、創建詳細報告、生成證書,以及直接從ASP.NET應用程式提供可下載內容,如電子書和小冊子。

IronPDF如何確保PDF輸出的質量?

IronPDF通過精確渲染HTML內容(包括字體、圖片、表格和其他元素)來確保高質量的PDF輸出,保持原始設計的忠實度。

我可以用IronPDF自動化HTML到PDF的轉換過程嗎?

是的,IronPDF可以整合到ASP.NET應用程式的自動化工作流中,允許您作為應用程式過程的一部分自動化HTML到PDF的轉換。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我