跳過到頁腳內容
使用IRONPDF

如何在 C# 中動態生成 PDF

現代Web應用程式需要的不僅僅是建立靜態文件。 無論是產生個人化發票、建立資料驅動的 PDF 報告,還是產生自訂表單字段,開發人員都需要強大的工具來在運行時產生 PDF 文件。 IronPDF 憑藉其強大的基於 Chrome 的渲染功能脫穎而出,成為領先的解決方案,能夠創建 PDF 文檔並與 C# 無縫集成,從而在 C# 和 .NET Framework 環境中實現動態 PDF 生成。

如何在 C# 中動態產生 PDF:圖 1 - 跨平台

C#中的動態PDF生成是什麼?

C# 中的動態 PDF 產生功能可在執行時使用來自多個資料來源(包括資料庫、API 或使用者輸入)的可變資料建立 PDF 文件。 與靜態 PDF 檔案不同,執行時間產生能夠實現個人化內容、條件部分和資料驅動佈局,這些對於發票、PDF 報告、憑證和能夠適應不斷變化的需求的表單至關重要。 這種以程式設計方式建立 PDF 的方法對於現代.NET Framework和 .NET Core 應用程式來說至關重要。

如何在 C# 中動態產生 PDF:圖 2 - 跨平台

開始使用 IronPdf

首先透過 Visual Studio 中的套件管理器控制台安裝 IronPDF NuGet 套件:

Install-Package IronPdf

如何在 C# 中動態產生 PDF:圖 3 - 安裝

或使用 NuGet 套件管理器介面下載並安裝。 初始化ChromePdfRenderer以產生像素級精確的 PDF 檔案:

using IronPdf;
// Create Chrome renderer instance
var renderer = new ChromePdfRenderer();
// Configure rendering options for PDF format
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
using IronPdf;
// Create Chrome renderer instance
var renderer = new ChromePdfRenderer();
// Configure rendering options for PDF format
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

ChromePdfRenderer 類別為運行時產生 PDF 提供了基礎。設定邊距可確保頁首和頁尾的空間,而 PrintHtmlBackgrounds 則可保留設計元素。 此配置有助於根據 HTML 內容精確建立 PDF 文件。 了解更多渲染選項,以自訂您的 PDF 文件。

如何使用模板動態建立 PDF 文檔

建立具有佔位符的可重複使用 HTML 模板,用於動態資料注入:

// Define HTML string template with placeholders
string invoiceTemplate = @"
<html>
<body>
    <h1>Invoice #[[INVOICE_NUMBER]]</h1>
    <p>Date: [[DATE]]</p>
    <p>Customer: [[CUSTOMER_NAME]]</p>
    <table>
        <tr><th>Item</th><th>Price</th></tr>
        [[ITEMS]]
    </table>
    <p><strong>Total: $[[TOTAL]]</strong></p>
</body>
</html>";
// Replace placeholders with dynamic data
var invoiceData = new {
    InvoiceNumber = "INV-2025-001",
    Date = DateTime.Now.ToString("yyyy-MM-dd"),
    CustomerName = "John Doe",
    Total = 1250.00m
};
string finalHtml = invoiceTemplate
    .Replace("[[INVOICE_NUMBER]]", invoiceData.InvoiceNumber)
    .Replace("[[DATE]]", invoiceData.Date)
    .Replace("[[CUSTOMER_NAME]]", invoiceData.CustomerName)
    .Replace("[[TOTAL]]", invoiceData.Total.ToString());
// Generate PDF from populated HTML content
var pdf = renderer.RenderHtmlAsPdf(finalHtml);
pdf.SaveAs("invoice.pdf");
// Define HTML string template with placeholders
string invoiceTemplate = @"
<html>
<body>
    <h1>Invoice #[[INVOICE_NUMBER]]</h1>
    <p>Date: [[DATE]]</p>
    <p>Customer: [[CUSTOMER_NAME]]</p>
    <table>
        <tr><th>Item</th><th>Price</th></tr>
        [[ITEMS]]
    </table>
    <p><strong>Total: $[[TOTAL]]</strong></p>
</body>
</html>";
// Replace placeholders with dynamic data
var invoiceData = new {
    InvoiceNumber = "INV-2025-001",
    Date = DateTime.Now.ToString("yyyy-MM-dd"),
    CustomerName = "John Doe",
    Total = 1250.00m
};
string finalHtml = invoiceTemplate
    .Replace("[[INVOICE_NUMBER]]", invoiceData.InvoiceNumber)
    .Replace("[[DATE]]", invoiceData.Date)
    .Replace("[[CUSTOMER_NAME]]", invoiceData.CustomerName)
    .Replace("[[TOTAL]]", invoiceData.Total.ToString());
// Generate PDF from populated HTML content
var pdf = renderer.RenderHtmlAsPdf(finalHtml);
pdf.SaveAs("invoice.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

這種模板方法將展示與資料分離,使設計人員能夠修改複雜的佈局,而開發人員則專注於資料整合。 Replace 方法會將範本 ID 佔位符替換為執行時間值,從而建立個人化的 PDF 文件。 對於包含重複部分的 HTML 內容轉換,請在進行 PDF 轉換之前使用循環動態建立 HTML。 探索更多HTML 轉 PDF 範例,了解進階範本製作技巧。

輸出

如何在 C# 中動態產生 PDF:圖 4 - PDF 輸出

使用非同步處理進行進階資料綁定

使用非同步方法擴展 PDF 生成能力,以應對大批量處理:

// Async batch generation for multiple PDF documents
public async Task GenerateMonthlyReportsAsync(List<Customer> customers)
{
    var renderer = new ChromePdfRenderer();
    var tasks = new List<Task>();
    foreach (var customer in customers)
    {
        tasks.Add(Task.Run(async () =>
        {
            // Create HTML content with dynamic data
            string html = $@"
                <h2>Monthly Report - {customer.Name}</h2>
                <p>Account Balance: ${customer.Balance:F2}</p>
                <p>Transactions: {customer.TransactionCount}</p>
                <div style='page-break-after: always;'></div>";
            // Convert HTML to PDF format
            var document = await renderer.RenderHtmlAsPdfAsync(html);
            await document.SaveAs($"reports/{customer.Id}_report.pdf");
        }));
    }
    await Task.WhenAll(tasks);
}
// Async batch generation for multiple PDF documents
public async Task GenerateMonthlyReportsAsync(List<Customer> customers)
{
    var renderer = new ChromePdfRenderer();
    var tasks = new List<Task>();
    foreach (var customer in customers)
    {
        tasks.Add(Task.Run(async () =>
        {
            // Create HTML content with dynamic data
            string html = $@"
                <h2>Monthly Report - {customer.Name}</h2>
                <p>Account Balance: ${customer.Balance:F2}</p>
                <p>Transactions: {customer.TransactionCount}</p>
                <div style='page-break-after: always;'></div>";
            // Convert HTML to PDF format
            var document = await renderer.RenderHtmlAsPdfAsync(html);
            await document.SaveAs($"reports/{customer.Id}_report.pdf");
        }));
    }
    await Task.WhenAll(tasks);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

非同步模式支援並發生成 PDF,在大量產生 PDF 文件時可顯著提高吞吐量。 Task.WhenAll 確保所有 PDF 檔案都已完成才繼續執行。 上述程式碼使用 CSS 分頁屬性來控制分頁,確保每位客戶的報告都從新的一頁開始。 查閱企業級Web應用程式的非同步PDF產生文件。

動態建立互動式 PDF 表單

透過程式設計方式將包含 HTML 表單的網頁轉換為可填寫的 PDF 檔案:

// Enable form fields creation in rendering options
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
// Define HTML string with form elements
string formHtml = @"
<form>
    <h2>Customer Survey</h2>
    <label>Name: 
    <label>Email: 
    <label>Satisfaction:
        <select name='satisfaction'>
            <option>Excellent</option>
            <option>Good</option>
            <option>Fair</option>
        </select>
    </label><br>
    <label>Comments: <textarea name='comments'></textarea></label>
</form>";
// Create a PDF with interactive form fields
var pdfDocument = renderer.RenderHtmlAsPdf(formHtml);
pdfDocument.SaveAs("survey_form.pdf");
// Enable form fields creation in rendering options
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
// Define HTML string with form elements
string formHtml = @"
<form>
    <h2>Customer Survey</h2>
    <label>Name: 
    <label>Email: 
    <label>Satisfaction:
        <select name='satisfaction'>
            <option>Excellent</option>
            <option>Good</option>
            <option>Fair</option>
        </select>
    </label><br>
    <label>Comments: <textarea name='comments'></textarea></label>
</form>";
// Create a PDF with interactive form fields
var pdfDocument = renderer.RenderHtmlAsPdf(formHtml);
pdfDocument.SaveAs("survey_form.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

設定 CreatePdfFormsFromHtml 會將 HTML 表單元素轉換為互動式 PDF 表單欄位。 使用者可以電子方式填寫、儲存和提交這些PDF文件。 此功能透過消除紙本表格來簡化工作流程,同時保持熟悉的 HTML 開發模式。 PDFDocument 物件提供了以程式設計方式操作表單欄位的功能。 了解 PDF 表單操作的高級應用,包括數位簽章。

輸出

如何在 C# 中動態產生 PDF:圖 5 - 互動式 PDF 表單輸出

為什麼選擇 IronPDF 而不是其他方法

IronPDF 的 Chrome 渲染引擎可確保在建立 PDF 時達到像素級的精確度,消除了舊版 WebKit 渲染引擎解決方案的妥協。 與需要外部可執行檔或無頭瀏覽器設定的開源庫替代方案不同,IronPDF 可以無縫集成,無需任何依賴項。 流暢的 API 和進階 API 設計使其優於內建類別或複雜的 Crystal Reports 實作。

如何在 C# 中動態產生 PDF:圖 6 - 功能

C# 中動態 PDF 產生的主要優勢

  • 完全執行 JavaScript,與其他方法不同
  • Web應用程式的執行緒安全操作
  • 提供全面的非同步支持,並附有以下範例模式
  • 透過簡單的 API 端點設定控制頁碼和字體大小
  • HTML 轉 PDF 轉換與 Chrome 完全一致

如何在 C# 中動態產生 PDF:圖 7 - 動態 PDF 產生 - IronPDF

授權許可起價為$799適用於單一開發者),另有團隊和企業選項可供選擇。 每個軟體包都有其自身的優勢,並且透過節省開發時間,投資可以收回成本。 購買後即可立即取得您的 API 金鑰。 查看授權選項,找到適合您專案的 NuGet 套件。

如何在 C# 中動態產生 PDF:圖 8 - 許可

結論

C# 中的動態 PDF 生成功能徹底改變了應用程式在運行時交付個人化文件的方式。 IronPDF 提供了一系列必要的工具,可以從 HTML 內容、網頁和資料來源產生 PDF 檔案。 其基於 Chrome 的渲染功能可確保您的 C# PDF 與設計規格完全匹配,而非同步支援則可實現企業級處理。

以下命令開始您的旅程:Install-Package IronPdf。 使用 IronPDF,您可以轉換 HTML 字串,建立包含圖像和表格的複雜 PDF,添加頁碼,控製字體大小,並從任何資料來源產生 PDF 報告。 每個新文件都能受益於像素級完美渲染,無論是創建簡單的 var 頁面還是具有多個 var 文件實例的複雜佈局。

首先,您可以免費試用 IronPDF 的 30 天試用方案。

常見問題解答

什麼是 C# 動態 PDF 生成?

C# 中的動態 PDF 生成是指在運行時創建 PDF 文件的過程,通常使用資料驅動的內容或個性化模板。IronPDF 通過提供與 C# 和 .NET Framework 無縫整合的強大工具,為此提供了便利。

為何要使用 IronPDF 生成 PDF?

IronPDF 是動態生成 PDF 的領先解決方案,因為它具有強大的基於 Chrome 的渲染引擎,可確保高品質的輸出。它與 C# 和 .NET Framework 無縫整合,是現代網路應用程式的理想選擇。

IronPDF 如何支援 C# 開發人員?

IronPDF 支援 C# 開發人員,提供一套完整的動態 PDF 產生功能,包括在 C# 環境中建立個人化的發票、資料驅動的報表和自訂表單欄位。

IronPDF 中基於 Chrome 的渲染有哪些優點?

IronPDF 中基於 Chrome 的渲染功能可提供高保真 PDF 文件,保持複雜佈局和樣式的完整性,確保生成的 PDF 在不同環境中看起來一致。

IronPDF 可以從 HTML 內容產生 PDF 嗎?

是的,IronPDF 可以從 HTML 內容產生 PDF,讓開發人員可以將網頁、HTML 字串或模板轉換成專業品質的 PDF 文件。

IronPDF 兼容 .NET Framework 嗎?

IronPDF 與 .NET Framework 完全相容,使其成為在此環境下工作的開發人員動態生成 PDF 的通用工具。

使用 IronPDF 可以創建哪些類型的文件?

使用 IronPDF,開發人員可以建立各式各樣的文件,包括個人化的發票、資料驅動的報表以及客製化的表單欄位,這些都是由 C# 應用程式動態產生的。

IronPDF 支援多國語言 PDF 嗎?

是的,IronPDF 支持生成多语言 PDF,允许开发人员创建满足不同语言要求的文档。

Curtis Chau
技術作家

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

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