跳至頁尾內容
使用IRONPDF

.NET PDF建立(使用IronPDF的開發者教程)

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

將動態ASP.NET HTML轉換為PDF文件是現代Web應用程式中的基本要求。 無論您是在生成發票、建立報告,還是製作可下載的PDF文件,將HTML內容轉換為專業PDF文件是提供精緻使用者體驗的關鍵。

IronPDF透過提供可靠的基於Chrome的渲染引擎簡化了這個ASP HTML到PDF的轉換過程,保留了您的HTML格式、CSS樣式和JavaScript功能至生成的PDF文件。 本教程將引導您使用IronPDF程式庫中的Chrome渲染引擎,在ASP.NET Core應用程式中進行HTML到PDF的有效轉換,以達到像素完美的效果。

IronPDF C# PDF Library主頁橫幅顯示關鍵功能,包括HTML到PDF轉換、PDF編輯能力和下載與授權按鈕的部署選項

為什麼開發者需要HTML到PDF的轉換?

ASP.NET Core應用程式經常生成動態HTML內容,供使用者下載、分享或存檔為PDF文件。 將HTML轉換為PDF提供了比僅僅保存網頁或進行截圖更多的關鍵優勢。

PDF文件在所有裝置和平臺上保持一致的格式,確保您的發票無論在Windows、Mac還是移動裝置上查看時都相同。 它們是需要數位簽名、安全限制或專業列印的文件的理想選擇。 伺服器端的PDF轉換消除了使用者需要安裝特定軟體的需求,並更好地控制最終輸出。

常見的使用情況包括從儀表板資料生成財務報告、從訂單資訊建立可下載的發票、使用QR碼生成票和通行證,以及將表單提交轉換為永久記錄。 透過在伺服器上處理ASP HTML到PDF的轉換,您可以確保結果始終一致,無論使用者的浏覽器或裝置支持能力。 IronPDF擅長呈現複雜的佈局,並順暢地處理大量JavaScript內容。 PDF規範支持此過程,由ISO標準機構維護,是跨平臺分發中最具可攜性的文件格式。

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

或使用.NET CLI:

dotnet add package IronPdf

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

安裝後如何配置IronPDF?

安裝後,在您將要進行PDF生成的任何C#文件中新增using IronPdf;指令。 此導入使您能夠使用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。 PdfDocument物件。 對於異步PDF生成,將調用包裝在Task.Run中以避免阻塞請求執行緒。

PDF輸出看起來如何?

PDF查看器截圖,顯示生成於2025年1月11日11:51:30的基本銷售報告標題和時間戳

如何包括CSS樣式和圖像?

IronPDF在轉換HTML為PDF時完全支援CSS樣式並嵌入來自各種來源的圖像。 渲染器處理內聯樣式、外部樣式表、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 URL 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 URL 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");
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和grid佈局。 對於複雜佈局,使用Bootstrap相容性指南或使用CSS page-break-before規則實現自訂頁面斷行

如何將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 viewer showing a rendered invoice #12345 dated 2/11/2025 for Acme Corporation with a single service item totaling $100.00

如何將URL轉換為PDF?

對於現有網頁,IronPDF可以將任何URL直接轉換為PDF文件。此方法支持cookies和自訂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事件觸發後才進行擷取。

URL轉換的結果是什麼?

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轉換時的最佳性能和質量。 對於大規模部署,實施性能優化策略。

首先在浏覽器中測試您的HTML渲染,以驗證樣式和佈局,然後再生成PDF。 對於外部資源,使用基本URLs,因為相對路徑在轉換過程中可能導致解析失敗。 對於大量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部署時。 監控記憶體使用情況,並使用Microsoft的.NET指引中的IDisposable模式實施正確的再生模式。 在處理大HTML文件時,使用串流方法以最小化記憶體開銷。

下表總結了三種主要轉換方法以及在什麼情況下使用每一種方法:

IronPDF ASP.NET轉換方法比較
方法 最適合 關鍵API 驗證支持
HTML字串 在程式碼中建立的動態內容 RenderHtmlAsPdf() 適用範圍不詳
Razor視圖 現有MVC視圖和模板 RenderHtmlAsPdf() 會話上下文
URL 公共或驗證過的網頁 RenderUrlAsPdf() Cookies, headers, credentials

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

在ASP.NET Core應用程式中,藉助IronPDF將ASP HTML轉換為PDF變得簡單。 該程式庫基於Chrome的渲染確保準確的轉換,並提供廣泛的自訂選項以生成專業文件。 探索PDF/A合規性數位簽名表單建立等高級功能。

無論是處理HTML字串、URLs,還是完整的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生成。

為什麼我應該使用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中。

在ASP.NET中將HTML轉換為PDF的常見應用案例有哪些?

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

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

IronPDF通過準確渲染HTML內容,包括字體、圖像、表格和其他元素,維持原始設計的忠實度,以確保高品質的PDF輸出。

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

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

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

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