
如何在C#中從PDF中提取圖像
現代的網路應用程式需要的不僅僅是靜態文件建立。 無論是生成個性化的發票,建立由資料驅動的PDF報告,還是生成自定義的表單欄位,開發人員都需要強大的工具來在運行時生成PDF文件。IronPDF成為領先的解決方案,提供基於Chrome的強大渲染,與C#無縫整合,用於在C#和.NET Framework環境中動態生成PDF。

What is Dynamic PDF Generation in C#?
在C#中動態生成PDF是在運行時利用多個資料源的變數資料(包括資料庫、API或使用者輸入)建立PDF文件。 與靜態PDF文件不同,運行時生成允許個性化內容、條件部分和由資料驅動的佈局; 這些對於能夠適應不斷變化需求的發票、PDF報告、證書和表單至關重要。 這種編程式地建立PDF的方法已成為現代.NET Framework和.NET Core應用程式的重要組成部分。

開始使用IronPDF
首先通過Visual Studio中的Package Manager Console安裝IronPDF NuGet包:

或使用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;Imports IronPdf
' Create Chrome renderer instance
Dim renderer As New ChromePdfRenderer()
' Configure rendering options for PDF format
renderer.RenderingOptions.MarginTop = 50
renderer.RenderingOptions.MarginBottom = 50
renderer.RenderingOptions.PrintHtmlBackgrounds = TrueChromePdfRenderer類提供了在運行時生成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
Dim invoiceTemplate As String = "
<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
Dim invoiceData = New With {
.InvoiceNumber = "INV-2025-001",
.Date = DateTime.Now.ToString("yyyy-MM-dd"),
.CustomerName = "John Doe",
.Total = 1250.00D
}
Dim finalHtml As String = 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
Dim pdf = renderer.RenderHtmlAsPdf(finalHtml)
pdf.SaveAs("invoice.pdf")這種模板方法將展示與資料分開,允許設計師修改複雜的佈局,而開發者專注於資料整合。 Replace方法使用運行時值替換模板ID佔位符,建立個性化的PDF文件。 為轉換具有重複段落的HTML內容, 在PDF轉換之前使用迴圈動態生成HTML。 探索更多HTML轉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);
}Imports System.Threading.Tasks
Imports System.Collections.Generic
' Async batch generation for multiple PDF documents
Public Async Function GenerateMonthlyReportsAsync(customers As List(Of Customer)) As Task
Dim renderer = New ChromePdfRenderer()
Dim tasks = New List(Of Task)()
For Each customer In customers
tasks.Add(Task.Run(Async Function()
' Create HTML content with dynamic data
Dim html As String = $"
<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
Dim document = Await renderer.RenderHtmlAsPdfAsync(html)
Await document.SaveAs($"reports/{customer.Id}_report.pdf")
End Function))
Next
Await Task.WhenAll(tasks)
End Function異步模式使同時生成PDF成為可能,當以批處理方式生成PDF時顯著提高吞吐量。 Task.WhenAll確保所有PDF文件完成後再進行下一步。 上述程式碼使用CSS頁面分隔屬性控制分頁,確保每個客戶的報告都從新頁開始。 查看企業網路應用程式的異步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
Dim formHtml As String = "
<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
Dim pdfDocument = renderer.RenderHtmlAsPdf(formHtml)
pdfDocument.SaveAs("survey_form.pdf")設置CreatePdfFormsFromHtml可將HTML表單元素轉換為互動式PDF表單字段。 使用者可以填寫、保存和電子提交這些PDF文件。 此功能通過消除紙質表單而保持熟悉的HTML開發模式來簡化工作流程。 PDFDocument物件提供程式化操作表單字段的存取。 了解PDF表單操控以進行高級實現,包括數位簽章。
輸出

為何選擇IronPDF而非其他方法
IronPDF的Chrome渲染引擎確保生成的PDF具有像素級準確性,消除了舊WebKit渲染引擎解決方案的妥協。 與需要外部執行檔或無頭瀏覽器設置的開源庫替代方案不同,IronPDF整合無縫且無依賴。 流暢的API和高級API設計使其優於內建類或複雜的Crystal Reports實現。

Key advantages for dynamic PDF generation in C#
- 完整的JavaScript執行,與其他方法不同
- 適用於網路應用程式的執行緒安全操作
- 與以下範例模式全面的異步支持
- 頁碼和字體大小控制通過簡單的API端點配置
- HTML到PDF轉換完全符合Chrome

授權開始於$999對於單一開發者授權,並提供團隊和企業選項。 每個包都有其自身的優勢,通過節省開發時間來收回投資。 購買後立即獲得API金鑰。 查看授權選項以找到適合您專案的NuGet包。
總結
在C#中動態生成PDF改變了應用程式在運行時提供個性化文件的方式。IronPDF提供生成來自HTML內容、網頁和資料源的PDF文件所需的重要工具。 其基於Chrome的渲染可確保您的PDF在C#中完全符合設計規範,而異步支持則允許企業級的處理。
以下命令開始您的旅程:Install-Package IronPdf。 使用IronPDF,您可以轉換HTML字串、建立包含圖像和表格的複雜PDF、新增頁碼、控制字體大小,並從任何資料源生成PDF報告。 每個新文件無論是建立簡單的var頁面還是具有多個var文件實例的複雜佈局,都能從像素級別的渲染中受益。
從IronPDF的免費30天試用套件開始。

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


