跳過到頁腳內容
使用IRONPDF

使用 IronPDF 在 .NET Core 中建立 PDF 生成器

什麼因素決定了.NET Core PDF產生器的可靠性?

一款可靠的 .NET Core PDF 生成器應具備基於 Chrome 的渲染功能,以實現精確的 HTML 轉 PDF 轉換;支援無需原生依賴項的跨平台部署;並提供完整的 API,以便在容器化環境中建立、編輯及處理 PDF 文件。

IronPDF 提供一款基於 Chrome 的 .NET Core PDF 函式庫,可在無需任何原生依賴項的情況下將 HTML 轉換為 PDF,讓開發容器化應用的工程師能順暢地進行 Docker 部署,並實現跨平台相容性。

在 .NET Core 應用程式中建立 PDF 文件需要一個能夠處理 HTML 內容、保持格式並支援跨平台部署的 PDF 程式庫。 無論您正在開發 ASP.NET Core Web API 還是主控台應用程式,一款可靠的 .NET Core PDF 產生器都能簡化從各種來源建立文件的流程。

立即開始免費試用,了解開發者為何選擇 IronPDF 來處理生產環境中至關重要的 PDF 生成任務

IronPDF 作為一套完整的 .NET Core PDF 函式庫,在眾多產品中脫穎而出。 它採用 Chrome 渲染引擎,能以像素級精準度生成 PDF 文件。 這種方法意味著您可以利用現有的 HTML 和 CSS 技能來生成 PDF 檔案,無需學習複雜的 PDF 版面配置 API。該函式庫詳盡的文件程式碼範例,讓實作過程變得直觀簡便。

為何基於 Chrome 的渲染對 PDF 生成至關重要?

基於 Chrome 的渲染機制,確保每條 CSS 規則、字型及版面配置指令,皆能以現代瀏覽器相同的方式進行解析。 這意味著 Flexbox 網格、媒體查詢和網頁字型在輸出 PDF 中皆能呈現可預期的行為——不會因舊式渲染引擎誤讀現代 CSS 而產生意外結果。

支援哪些跨平台部署選項?

IronPDF 可在 WindowsLinuxAzureAWSDocker 上運行,無需修改任何應用程式程式碼。 NuGet 套件已整合所有必要的原生二進位檔,因此您無需安裝系統套件或管理特定平台的路徑。

大多數替代方案可分為兩大類:一類是低階的 PDF 繪圖 API,需要您手動定位每個元素;另一類則是將內容鎖定在僵化模板中的報表設計工具。 IronPDF 則介於這兩種極端之間——它接受標準的 HTML 和 CSS,透過完整的瀏覽器引擎進行渲染,並將結果儲存為符合標準的 PDF 檔案。

IronPDF 與常見的 .NET PDF 替代方案比較
特點 IronPDF PdfSharp iTextSharp SelectPdf
HTML + CSS 渲染 Chrome 引擎 有限 (iText 7) WebKit
JavaScript 執行 部分
Linux / Docker 支援 限額
授權模式 商業的 AGPL / 商業用途 商業的
互動式 PDF 表單

IronPDF 如何簡化 PDF 文件的產生 .NET Core 中?

IronPDF 將傳統上複雜的 PDF 生成任務,轉化為任何 .NET 開發者都能輕鬆實作的簡單程式碼。 本函式庫使用 ChromePdfRenderer 類別將HTML 字串、檔案或 URL 直接轉換為 PDF 格式。 這種流暢的 API 設計不僅提供廣泛的自訂選項,同時在不同平台上都能維持卓越的效能。

IronPDF真正的強大之處在於它如何處理將HTML內容轉換為專業的PDF文件。 您無需手動定位或繪製元素,只需撰寫帶有 CSS 樣式的標準 HTML,該函式庫便會負責進行轉換。 生成的 PDF 檔案是功能完整的文件,使用者可以選取和搜尋文字——而不僅僅是頁面的影像。

除了基本的 PDF 生成功能外,IronPDF 的進階編輯工具還讓您能夠合併文件、添加浮水印、插入註解等。

主要模式是:建立一個 ChromePdfRenderer,配置其 RenderingOptions,呼叫三個渲染方法之一(RenderHtmlAsPdfRenderHtmlFileAsPdf,或 @@--CODE-26243--@@),並儲存結果。 這三種方法皆會傳回相同的物件類型,因此無論來源為何,後處理程式碼皆可重複使用。

為何選擇 HTML 轉 PDF 而非傳統的 PDF API?

傳統的 PDF API 迫使您以座標系思考——例如"將這段文字放置於 x=72, y=144"。 HTML 讓您能以內容與結構為思考核心。 當需求變更時(例如新增欄位、調整字型大小或更換公司標誌),您只需更新 HTML 範本,無需重新計算數十個座標值。

您如何處理複雜的文件版面配置與樣式?

將完整的 HTML 文件(包括 <style> 區塊或外部樣式表引用)傳遞給 RenderHtmlAsPdf。 IronPDF 的 Chrome 引擎會在將頁面光柵化之前套用所有 CSS 規則。 您可以不受限制地使用響應式 CSS、Google Fonts、SVG 圖形及 CSS Grid。

如何透過 NuGet 套件管理員安裝 IronPDF?

要在 Visual Studio 中開始使用 IronPDF,只需安裝一個 NuGet 套件即可。 開啟 NuGet 套件管理員控制台並執行:

Install-Package IronPdf
Install-Package IronPdf
SHELL

或者,使用 .NET CLI:

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

此單一套件提供了在 .NET Core 應用程式中建立、編輯及產生 PDF 檔案所需的所有功能。 安裝後會自動在 Windows、Linux 及 Docker 環境中配置專案以進行 PDF 生成。 支援的執行環境包括 .NET Framework 4.6.2 以上、.NET Core 3.1 以上、.NET 5 至 .NET 10,以及 .NET Standard 2.0 以上。

IronPDF 的系統需求為何?

在 Windows 系統上,此套件為獨立安裝包。 在 Linux 系統上,Chrome 渲染引擎需要若干共享函式庫(libgdiplus、libc6 以及幾個字型套件),Linux 安裝指南中已完整列出這些項目。 Docker 部署應以官方 IronPDF 基礎映像檔為起點,以避免遺漏依賴項。

若要驗證安裝是否成功,請將 using IronPdf; 新增至類別檔案。如果專案建置無誤,且 IntelliSense 解析出 ChromePdfRenderer,表示該軟體包已正確安裝。 作為初步測試,請渲染一行 HTML 字串,並確認已將非零位元的 PDF 檔案寫入磁碟。

可能需要哪些額外的依賴項?

在容器化環境中,請在 Dockerfile 中包含 libgdipluslibx11-dev 套件。對容量限制嚴格的雲函數可以切換到IronPdf.Slim ,它將渲染引擎分離到一個獨立容器中。 IronPdfNuGet 套件頁面列出了所有可用版本及發行說明。

如何從 HTML 建立您的第一個 PDF 文件?

以下範例展示如何從 HTML 字串建立動態發票文件——此模式可直接套用至任何結合固定範本與執行時資料的文件類型:

using IronPdf;
using System.Text;

// Configure the Chrome renderer
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;

// Build HTML content with embedded CSS and dynamic data
var htmlBuilder = new StringBuilder();
htmlBuilder.Append(@"
    <html>
    <head>
        <style>
            body { font-family: Arial, sans-serif; font-size: 14px; }
            .invoice-header { background: #f0f0f0; padding: 20px; }
            table { width: 100%; border-collapse: collapse; }
            th, td { padding: 10px; text-align: left; border-bottom: 1px solid #ddd; }
        </style>
    </head>
    <body>
        <div class='invoice-header'>
            <h1>Invoice #INV-2024-001</h1>
            <p>Date: " + DateTime.無w.ToString("MM/dd/yyyy") + @"</p>
        </div>
        <table>
            <tr><th>Item</th><th>Quantity</th><th>Price</th></tr>");

for (int i = 0; i < 3; i++)
{
    htmlBuilder.Append($"<tr><td>Product #{i + 1}</td><td>{i + 1}</td><td>$25.00</td></tr>");
}

htmlBuilder.Append(@"
        </table>
        <p><strong>Total: $75.00</strong></p>
    </body>
    </html>");

// Convert HTML string to a PDF document and save
PdfDocument pdfDoc = renderer.RenderHtmlAsPdf(htmlBuilder.ToString());
pdfDoc.SaveAs("invoice.pdf");
using IronPdf;
using System.Text;

// Configure the Chrome renderer
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;

// Build HTML content with embedded CSS and dynamic data
var htmlBuilder = new StringBuilder();
htmlBuilder.Append(@"
    <html>
    <head>
        <style>
            body { font-family: Arial, sans-serif; font-size: 14px; }
            .invoice-header { background: #f0f0f0; padding: 20px; }
            table { width: 100%; border-collapse: collapse; }
            th, td { padding: 10px; text-align: left; border-bottom: 1px solid #ddd; }
        </style>
    </head>
    <body>
        <div class='invoice-header'>
            <h1>Invoice #INV-2024-001</h1>
            <p>Date: " + DateTime.無w.ToString("MM/dd/yyyy") + @"</p>
        </div>
        <table>
            <tr><th>Item</th><th>Quantity</th><th>Price</th></tr>");

for (int i = 0; i < 3; i++)
{
    htmlBuilder.Append($"<tr><td>Product #{i + 1}</td><td>{i + 1}</td><td>$25.00</td></tr>");
}

htmlBuilder.Append(@"
        </table>
        <p><strong>Total: $75.00</strong></p>
    </body>
    </html>");

// Convert HTML string to a PDF document and save
PdfDocument pdfDoc = renderer.RenderHtmlAsPdf(htmlBuilder.ToString());
pdfDoc.SaveAs("invoice.pdf");
Imports IronPdf
Imports System.Text

' Configure the Chrome renderer
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.MarginTop = 25
renderer.RenderingOptions.MarginBottom = 25
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4

' Build HTML content with embedded CSS and dynamic data
Dim htmlBuilder As New StringBuilder()
htmlBuilder.Append("
    <html>
    <head>
        <style>
            body { font-family: Arial, sans-serif; font-size: 14px; }
            .invoice-header { background: #f0f0f0; padding: 20px; }
            table { width: 100%; border-collapse: collapse; }
            th, td { padding: 10px; text-align: left; border-bottom: 1px solid #ddd; }
        </style>
    </head>
    <body>
        <div class='invoice-header'>
            <h1>Invoice #INV-2024-001</h1>
            <p>Date: " & DateTime.Now.ToString("MM/dd/yyyy") & "</p>
        </div>
        <table>
            <tr><th>Item</th><th>Quantity</th><th>Price</th></tr>")

For i As Integer = 0 To 2
    htmlBuilder.Append($"<tr><td>Product #{i + 1}</td><td>{i + 1}</td><td>$25.00</td></tr>")
Next

htmlBuilder.Append("
        </table>
        <p><strong>Total: $75.00</strong></p>
    </body>
    </html>")

' Convert HTML string to a PDF document and save
Dim pdfDoc As PdfDocument = renderer.RenderHtmlAsPdf(htmlBuilder.ToString())
pdfDoc.SaveAs("invoice.pdf")
$vbLabelText   $csharpLabel

請注意 CSS 位於 <style> 區塊內,並在渲染期間自動套用。 RenderHtmlAsPdf 方法傳回一個 PdfDocument 對象,因此可以完全控制產生的檔案。對於更進階的應用場景,可以探索自訂邊距紙張尺寸。 這兩種選項皆可讓您根據確切的 PRINT 規格或品牌指南調整輸出內容,而無需變更底層的 HTML 範本。

生成的 PDF 是什麼樣子?

下方的螢幕截圖顯示了完美渲染為 PDF 文件的發票範例。

專業PDF發票,發票編號INV-2024-001,日期2025年10月15日,採用淺灰色標題欄,包含清晰的產品表格,列出三種商品及其數量和25美元的單價,包含公司品牌元素,底部附有摘要段落。

您如何處理動態資料和範本?

對於資料驅動的文件,請先將資料庫或 API 中的值填入 HTML 範本字串中,再將其傳遞給渲染器。 像 Scriban 或 Handlebars.Net 這樣的函式庫,提供了模板語法,能讓 HTML 保持簡潔,並避免在生產環境的程式碼中使用脆弱的字串拼接。

您應該設定哪些常見的渲染選項?

最具影響力的選項是 PaperSizeMarginTop/MarginBottom/MarginLeft/MarginRight、@@--CODE-26259--@@ 和 @@--CODE-26260--@@。 將 CssMediaType 設為 Print 可套用您的 @media print CSS 規則,這對於打算列印或儲存為 PDF 檔案的文件來說是正確的選擇。

在除錯 HTML 渲染問題時,請先在瀏覽器中渲染相同的 HTML 內容。若在瀏覽器中顯示正確,IronPDF 將能忠實地重現該效果。 對於佈局漂移,請檢查是否有任何元素使用視口相對單位(vw, vh)而沒有回退——當沒有可滾動視口時,這些單位的行為有所不同。

如何從網址和網頁生成 PDF 檔案?

IronPDF 擅長將現有網頁轉換為 PDF 檔案。 此功能在從報表儀表板或網頁表單生成 PDF 文件時尤為實用:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;

// Wait for all assets to finish loading before capturing
renderer.RenderingOptions.WaitFor.RenderDelay(1000);

PdfDocument pdfDocument = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page");

string filePath = Path.Combine(Directory.GetCurrentDirectory(), "webpage.pdf");
pdfDocument.SaveAs(filePath);
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;

// Wait for all assets to finish loading before capturing
renderer.RenderingOptions.WaitFor.RenderDelay(1000);

PdfDocument pdfDocument = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page");

string filePath = Path.Combine(Directory.GetCurrentDirectory(), "webpage.pdf");
pdfDocument.SaveAs(filePath);
Imports IronPdf
Imports System.IO

Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4
renderer.RenderingOptions.PrintHtmlBackgrounds = True
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print

' Wait for all assets to finish loading before capturing
renderer.RenderingOptions.WaitFor.RenderDelay(1000)

Dim pdfDocument As PdfDocument = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page")

Dim filePath As String = Path.Combine(Directory.GetCurrentDirectory(), "webpage.pdf")
pdfDocument.SaveAs(filePath)
$vbLabelText   $csharpLabel

此函式庫負責處理 JavaScript 執行、載入外部圖片與樣式表,並在轉換過程中維持響應式版面配置。 請參閱《URL 轉 PDF 指南》,進一步了解如何將 URL 轉換為 PDF。 您亦可設定 HTTP 請求標頭以進行身份驗證,並處理 Cookie 以處理基於會話的內容。

維基百科首頁已轉換為 PDF 格式,完整保留了其佈局,包括 Jozo Tomasevich 的傳記條目、包含時事新聞的版塊以及 10 月 15 日的歷史"歷史上的今天"內容,充分展現了 IronPDF 維護複雜多欄佈局、圖像以及維基百科特有設計元素的能力。

您如何處理受保護網址的驗證?

在呼叫 RenderUrlAsPdf 之前,將自訂 HTTP 標頭或 cookie 傳遞給渲染器。 對於受 OAuth 保護的儀表板,請在應用程式程式碼中擷取 bearer token,並將其新增為 Authorization 標頭。 IronPDF 會將這些標頭原封不動地傳送至 Chrome 引擎,其傳送方式與瀏覽器完全相同。

您應該考慮哪些 JavaScript 渲染選項?

啟用 EnableJavaScript,並在頁面載入後透過 JavaScript 填入圖表或表格時新增 WaitFor.RenderDelay。 對於單頁應用程序,WaitFor.NetworkIdle() 比固定延遲更可靠,因為它會等待所有待處理的網路請求完成。

何時該使用 URL 轉換,何時該使用 HTML 字串轉換?

當頁面已存在且可從運行 IronPDF 的伺服器存取時,請使用 URL 轉換功能——報告、儀表板和管理介面皆為適合的候選對象。 在執行時從範本建立文件時,請使用 HTML 字串轉換,因為此方法可避免網路往返傳輸,並將所有資料保留在伺服器端。

針對複雜的報表,有哪些進階 PDF 功能可用?

Professional PDF 文件通常需要包含頁首、頁尾以及互動式表單欄位,而不僅是基本內容。 IronPDF 提供用於添加頁首、頁尾及浮水印的方法。 頁首與頁尾 API 提供對文件呈現方式的完全控制:

var renderer = new ChromePdfRenderer();

// Company header on every page
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    MaxHeight = 25,
    HtmlFragment = "<div style='text-align:center;font-weight:bold;'>Company Report</div>"
};

// Automatic page numbering in footer
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    MaxHeight = 25,
    HtmlFragment = "<div style='text-align:right;'>Page {page} of {total-pages}</div>"
};

// Render an HTML form as a fillable PDF form
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

string formHtml = @"
    <form>
        <label>Name:</label>
        <input type='text' name='name' placeholder='Enter your name'/>
        <label>Email:</label>
        <input type='email' name='email' placeholder='email@example.com'/>
        <button type='submit'>Submit</button>
    </form>";

PdfDocument formDocument = renderer.RenderHtmlAsPdf(formHtml);
formDocument.SaveAs("form.pdf");
var renderer = new ChromePdfRenderer();

// Company header on every page
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    MaxHeight = 25,
    HtmlFragment = "<div style='text-align:center;font-weight:bold;'>Company Report</div>"
};

// Automatic page numbering in footer
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    MaxHeight = 25,
    HtmlFragment = "<div style='text-align:right;'>Page {page} of {total-pages}</div>"
};

// Render an HTML form as a fillable PDF form
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

string formHtml = @"
    <form>
        <label>Name:</label>
        <input type='text' name='name' placeholder='Enter your name'/>
        <label>Email:</label>
        <input type='email' name='email' placeholder='email@example.com'/>
        <button type='submit'>Submit</button>
    </form>";

PdfDocument formDocument = renderer.RenderHtmlAsPdf(formHtml);
formDocument.SaveAs("form.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

' Company header on every page
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
    .MaxHeight = 25,
    .HtmlFragment = "<div style='text-align:center;font-weight:bold;'>Company Report</div>"
}

' Automatic page numbering in footer
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
    .MaxHeight = 25,
    .HtmlFragment = "<div style='text-align:right;'>Page {page} of {total-pages}</div>"
}

' Render an HTML form as a fillable PDF form
renderer.RenderingOptions.CreatePdfFormsFromHtml = True

Dim formHtml As String = "
    <form>
        <label>Name:</label>
        <input type='text' name='name' placeholder='Enter your name'/>
        <label>Email:</label>
        <input type='email' name='email' placeholder='email@example.com'/>
        <button type='submit'>Submit</button>
    </form>"

Dim formDocument As PdfDocument = renderer.RenderHtmlAsPdf(formHtml)
formDocument.SaveAs("form.pdf")
$vbLabelText   $csharpLabel

此範例展示如何在所有頁面中套用一致的頁首,並在 PDF 文件內建立互動式表單欄位。 引擎會自動處理頁碼編排與表單欄位呈現。 針對複雜的報告文件,請實作目錄書籤自訂分頁功能

是一個互動式 PDF 表單,包含"公司報告"標題、專業設計的姓名和電子郵件輸入框(帶有可見邊框和占位符文字)以及帶有懸停狀態的提交按鈕,充分展示了 IronPDF 將 HTML 表單轉換為可填寫 PDF 文件並保留樣式和功能的能力。

如何建立具有一致頁首的多頁報表?

在呼叫任何渲染方法之前,請在渲染器上配置 HtmlHeaderHtmlFooter。 頁首與頁尾的 HTML 會與正文分開渲染,並自動套用至每一頁。 在頁尾片段的任何位置使用 {page}{total-pages} 標記來新增動態編號。

PDF 檔案中可以加入哪些互動元素?

啟用 CreatePdfFormsFromHtml 後,標準 HTML 表單控制項(文字輸入方塊、複選框、單選按鈕、下拉式清單和按鈕)將變成互動式 PDF 表單欄位。 收件者可使用 Adobe Acrobat Reader 或任何符合標準的 PDF 檢視器填寫這些文件,無需安裝特殊軟體。

如何實作分頁與章節管理?

在應該從新頁面開始的 HTML 部分之間插入 <div style='page-break-after: always;'></div>。 IronPDF 遵循 CSS page-break-afterpage-break-beforepage-break-inside 屬性,提供與列印樣式表相同的控制。

如何透過 ASP.NET Core 的非同步操作來提升效能?

對於處理多項 PDF 生成請求的網路應用程式,非同步操作能在 Chrome 引擎進行渲染時釋放執行緒資源,從而提升系統響應速度:

using IronPdf;
using Microsoft.AspNetCore.Mvc;

// Reusable async PDF generation helper
async Task<byte[]> GeneratePdfAsync(string htmlContent)
{
    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
    PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync(htmlContent);
    return pdf.BinaryData;
}

// ASP.NET Core minimal API endpoint
app.MapPost("/invoices", async ([FromBody] InvoiceData data) =>
{
    string html = BuildInvoiceHtml(data);
    byte[] pdfBytes = await GeneratePdfAsync(html);
    return Results.File(pdfBytes, "application/pdf", "invoice.pdf");
});
using IronPdf;
using Microsoft.AspNetCore.Mvc;

// Reusable async PDF generation helper
async Task<byte[]> GeneratePdfAsync(string htmlContent)
{
    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
    PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync(htmlContent);
    return pdf.BinaryData;
}

// ASP.NET Core minimal API endpoint
app.MapPost("/invoices", async ([FromBody] InvoiceData data) =>
{
    string html = BuildInvoiceHtml(data);
    byte[] pdfBytes = await GeneratePdfAsync(html);
    return Results.File(pdfBytes, "application/pdf", "invoice.pdf");
});
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc

' Reusable async PDF generation helper
Async Function GeneratePdfAsync(htmlContent As String) As Task(Of Byte())
    Dim renderer As New ChromePdfRenderer()
    renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
    Dim pdf As PdfDocument = Await renderer.RenderHtmlAsPdfAsync(htmlContent)
    Return pdf.BinaryData
End Function

' ASP.NET Core minimal API endpoint
app.MapPost("/invoices", Async Function(<FromBody> data As InvoiceData) As Task(Of IResult)
    Dim html As String = BuildInvoiceHtml(data)
    Dim pdfBytes As Byte() = Await GeneratePdfAsync(html)
    Return Results.File(pdfBytes, "application/pdf", "invoice.pdf")
End Function)
$vbLabelText   $csharpLabel

此模式可讓 ASP.NET Core 應用程式在不阻塞執行緒池的情況下產生 PDF 檔案。 此位元組陣列輸出適用於會直接將檔案傳回給客戶端的 API 端點。 針對批次作業,建議採用並行處理以同時渲染多份文件,並使用記憶體串流來降低磁碟讀寫的開銷。

Results.File() 方法設定正確的 application/pdf 內容類型,以便瀏覽器提示下載或直接顯示檔案。有關 ASP.NET Core 中非同步模式的更多信息,請參閱Microsoft 官方文件

處理並行 PDF 生成時有哪些最佳實踐?

每個 ChromePdfRenderer 實例都不是執行緒安全的,因此每個請求都應該建立一個新實例,而不是在執行緒之間共用一個實例。 在高吞吐量情境下,請建立實例池或使用專用的 IronPDF Engine 側車容器,將渲染作業從主應用程式進程中卸載。

如何在非同步操作中實作適當的錯誤處理?

請將渲染呼叫包裹在 try/catch 區塊中。 IronPDF 會拋出 IronPdfNativeException 以處理引擎層級的錯誤(缺少字型、無效的 HTML、逾時),並拋出標準的 .NET 例外以處理檔案讀取/寫入問題。 請記錄例外情況的詳細資訊,並傳回適當的 HTTP 錯誤回應,而非讓例外情況傳播至客戶端。

當 PDF 立即被使用時,直接將 PdfDocument.BinaryData 返回 HTTP 回應。 只有在需要將 PDF 檔案持久化時(例如,儲存到物件儲存桶或檔案共用中),才使用 SaveAs 寫入檔案路徑。 避免不必要的磁碟寫入操作,可降低高頻率 PDF 端點的延遲。

部署時有哪些關鍵考量因素?

IronPDF支援在各種環境中部署。 針對 Docker 容器,請依照 Docker 部署指南所述,在 Dockerfile 中包含必要的依賴項。此函式庫可在 Windows Server各種 Linux 發行版,以及 AzureAWS 等雲端平台上運作。 每個環境可能需要對字體和渲染進行特定配置,但核心 API 保持一致。

針對容器化部署,建議考慮使用 IronPDF 作為遠端容器,將 PDF 生成功能與主應用程式分離。 此方法可提升可擴展性,並能實現更佳的資源管理。 Microsoft 關於 .NET Core 部署的文件涵蓋了生產環境的更多最佳實踐。

如何為 Docker 部署設定 IronPDF?

請從官方 IronPDF Linux 基礎映像開始,或將所需的 apt 套件新增至現有的 Debian 或 Ubuntu 映像中。 在應用程式啟動程式碼中設定 Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuMode.Disabled,以避免在無頭伺服器環境中出現 GPU 初始化錯誤。

您應該包含哪些 Linux 專屬的依賴項?

最小集合為 libgdipluslibc6libx11-6libxext6libxcomposite1。 若要支援 CJK(中文、日文、韓文)字體,請新增 fonts-noto-cjkLinux 安裝指南提供了針對 Debian、Ubuntu、CentOS 及 Alpine 各發行版的專屬套件清單。

對於生產可觀測性,使用秒錶計時包裝 RenderHtmlAsPdfAsync 調用,並將指標發送到 Application Insights、Prometheus 或任何 OpenTelemetry 相容的後端。 請將 p50/p95/p99 延遲百分位數與錯誤率與應用程式其餘部分分開追蹤,以便及早識別渲染瓶頸。

PDF 生成服務應考量哪些安全因素?

在渲染 URL 或使用者提供的 HTML 時,請對內容進行清理,以防止伺服器端請求偽造(SSRF)。 使用允許清單限制 RenderUrlAsPdf 可以存取的主機,並在沙盒進程或隔離容器中執行渲染引擎。 對於包含敏感資料的文件,請套用 PDF 加密數位簽章以符合合規要求。

您準備好開始建置您的 .NET Core PDF 產生器了嗎?

IronPDF 將 .NET Core 中的 PDF 產生從複雜的挑戰轉變為簡單的實作。 憑藉對 HTML 內容的支援、豐富的功能集以及一致的跨平台行為,它非常適合需要可靠生成 PDF 文件的開發人員。 該函式庫的安全功能(包括加密與數位簽章)可確保文件符合合規要求。

立即開始免費試用,無限制地探索所有功能。 本文件提供詳盡的範例與指南,協助您建立符合精確要求的 Professional PDF 檔案。 無論是建置發票系統、生成報表,還是轉換現有網頁內容,IronPDF 都能提供工具,助您呈現像素級精準的成果。

針對生產環境部署,請探索符合專案規模的授權方案。 優質的 PDF 函式庫能帶來顯著效益,不僅可縮短開發時間,更能確保所有 .NET 應用程式產出的結果一致且專業。 IronPDF 的支援團隊與疑難排解指南,確保您在實作 PDF 功能時絕不會卡關。

常見問題解答

IronPDF 在 .NET Core 的主要功能是什麼?

IronPDF 主要用於在 .NET Core 應用程式中將 HTML 轉換為 PDF,使開發人員能夠建立具有像素級完美渲染效果的發票、報告和其他文件。

IronPDF 如何確保像素級完美渲染?

IronPDF 使用先進的渲染技術,將 HTML、CSS 和 JavaScript 精確地轉換為高品質的 PDF 文檔,從而確保像素級的完美渲染。

IronPDF 能否用於在 .NET Core 中產生報表?

是的,IronPDF 能夠透過將基於 HTML 的報告範本轉換為專業級的 PDF 文檔,在 .NET Core 中產生詳細的報告。

是否可以使用 IronPDF 將網頁轉換為 PDF?

當然,IronPDF 可以將整個網頁轉換為 PDF,同時保留原始 HTML 和 CSS 中指定的佈局和樣式。

IronPDF有哪些常見的使用案例?

IronPDF 的常見用途包括產生發票、建立業務報告、將 HTML 表單轉換為 PDF 以及存檔 Web 內容。

IronPDF支持.NET Core應用程序嗎?

是的,IronPDF 完全支援 .NET Core 應用程序,使其成為跨不同 .NET 平台工作的開發人員的多功能選擇。

IronPDF在HTML轉PDF過程中如何處理CSS和JavaScript?

IronPDF 在轉換過程中處理 CSS 和 JavaScript,以確保 HTML 的視覺佈局和動態內容在 PDF 中準確呈現。

IronPDF 能否根據 HTML 字串產生 PDF 檔案?

是的,IronPDF 可以從 HTML 字串產生 PDF,允許開發人員從其應用程式中產生的 HTML 內容動態建立 PDF 文件。

是否可以使用 IronPDF 自訂 PDF 的外觀?

IronPDF 提供豐富的自訂選項,讓開發人員可以使用 HTML 和 CSS 指定自訂頁首、頁尾和樣式來控制 PDF 的外觀。

與其他 .NET PDF 函式庫相比,IronPDF 有哪些優勢?

IronPDF 具有多項優勢,包括易於與 .NET Core 整合、高品質渲染、支援複雜的文件佈局以及對 HTML、CSS 和 JavaScript 的強大處理能力。

Curtis Chau
技術作家

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

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

鋼鐵支援團隊

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