ASP Create PDF on the Fly:在 .NET Core 中動態生成 PDF
在 ASP.NET Core 中建立現代 Web 應用程式時,動態產生 PDF 文件的功能至關重要。 無論你是建立發票、報告還是證書,使用者都希望能夠立即產生 PDF 文件,而無需伺服器端儲存。 IronPDF強大的 PDF 庫讓您可以輕鬆地在 .NET Core 專案中即時建立 PDF。
在本文中,我們將引導您完成在 ASP.NET 應用程式中輕鬆即時建立 PDF 文件所需的步驟。
即時建立 PDF 是什麼意思?
即時建立 PDF 指的是記憶體中動態產生 PDF 文檔,並將其直接傳輸到使用者的瀏覽器。 此伺服器端處理過程消除了將 PDF 檔案儲存到磁碟的需要,從而提高了效能和安全性。 透過 IronPDF 的 SDK,您可以立即將 HTML 內容轉換為專業的 PDF 文檔,非常適合需要在伺服器上儲存文件而建立 PDF 的 Web 應用程式。
!{--01001100010010010100001001010010010000010101001001011001010111110100011101000101010101 01000101111101010011010101000100000101010010010101000100010101000100010111110101011101001000110 1010101000100100001011111010100000101001001001111010001000101010101010000110101010100101010101011 10101010001010010010010010010000010100110001011111010000100100110001001111101000011010010111111010000110100101110--
如何設定 IronPDF 以產生動態 PDF 文件?
首先,透過 NuGet 套件管理器安裝 IronPDF,將這個強大的 PDF 庫加入您的 ASP.NET Core 專案中:
Install-Package IronPdf
接下來,在 ASP.NET Core 應用程式中配置 IronPDF,以動態建立 PDF 檔案:
using IronPdf;
using Microsoft.AspNetCore.Mvc;
namespace PdfGenerator.Controllers
{
public class DocumentController : Controller
{
private readonly ChromePdfRenderer _renderer;
public DocumentController()
{
// Initialize the renderer once for reuse
_renderer = new ChromePdfRenderer();
// Optional: Set your license key
License.LicenseKey = "YOUR-LICENSE-KEY";
}
}
}using IronPdf;
using Microsoft.AspNetCore.Mvc;
namespace PdfGenerator.Controllers
{
public class DocumentController : Controller
{
private readonly ChromePdfRenderer _renderer;
public DocumentController()
{
// Initialize the renderer once for reuse
_renderer = new ChromePdfRenderer();
// Optional: Set your license key
License.LicenseKey = "YOUR-LICENSE-KEY";
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com此設定初始化ChromePdfRenderer ,這是 IronPDF 的強大渲染引擎,它使用 Chromium 將 HTML 轉換為 PDF 文件。 透過建立單一渲染器實例,可以優化重複建立 PDF 時的記憶體使用量。 了解更多關於HTML轉PDF轉換的進階技巧。
如何從HTML內容建立PDF文件?
建立 PDF 文件的核心功能是將 HTML 字串轉換為 PDF 文件。 以下是一個詳細範例,展示如何快速產生發票:
[HttpGet]
public IActionResult GenerateInvoice(int orderId)
{
// Fetch data from your database or service
var orderData = GetOrderData(orderId);
// Build HTML content with dynamic data
string htmlContent = $@"
<!DOCTYPE html>
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; }}
.header {{ background-color: #f0f0f0; padding: 20px; }}
table {{ width: 100%; border-collapse: collapse; }}
td, th {{ padding: 10px; border: 1px solid #ddd; }}
</style>
</head>
<body>
<div class='header'>
<h1>Invoice #{orderData.InvoiceNumber}</h1>
<p>Date: {DateTime.Now:yyyy-MM-dd}</p>
</div>
<table>
<tr>
<th>Item</th>
<th>Quantity</th>
<th>Price</th>
</tr>";
foreach(var item in orderData.Items)
{
htmlContent += $@"
<tr>
<td>{item.Name}</td>
<td>{item.Quantity}</td>
<td>${item.Price:F2}</td>
</tr>";
}
htmlContent += @"
</table>
</body>
</html>";
// Create PDF from HTML
var pdf = _renderer.RenderHtmlAsPdf(htmlContent);
// Convert to byte array for streaming
byte[] pdfBytes = pdf.BinaryData;
// Return PDF to browser
return File(pdfBytes, "application/pdf", $"invoice_{orderId}.pdf");
}[HttpGet]
public IActionResult GenerateInvoice(int orderId)
{
// Fetch data from your database or service
var orderData = GetOrderData(orderId);
// Build HTML content with dynamic data
string htmlContent = $@"
<!DOCTYPE html>
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; }}
.header {{ background-color: #f0f0f0; padding: 20px; }}
table {{ width: 100%; border-collapse: collapse; }}
td, th {{ padding: 10px; border: 1px solid #ddd; }}
</style>
</head>
<body>
<div class='header'>
<h1>Invoice #{orderData.InvoiceNumber}</h1>
<p>Date: {DateTime.Now:yyyy-MM-dd}</p>
</div>
<table>
<tr>
<th>Item</th>
<th>Quantity</th>
<th>Price</th>
</tr>";
foreach(var item in orderData.Items)
{
htmlContent += $@"
<tr>
<td>{item.Name}</td>
<td>{item.Quantity}</td>
<td>${item.Price:F2}</td>
</tr>";
}
htmlContent += @"
</table>
</body>
</html>";
// Create PDF from HTML
var pdf = _renderer.RenderHtmlAsPdf(htmlContent);
// Convert to byte array for streaming
byte[] pdfBytes = pdf.BinaryData;
// Return PDF to browser
return File(pdfBytes, "application/pdf", $"invoice_{orderId}.pdf");
}IRON VB CONVERTER ERROR developers@ironsoftware.com這段程式碼示範如何透過將 HTML 頁面範本與即時資料結合來產生動態 PDF 檔案。 RenderHtmlAsPdf 方法處理 HTML 內容(包括 CSS 樣式),並產生可供下載的專業文件。 該方法支援複雜的佈局、圖像,甚至支援 JavaScript 執行。 您可以在新標籤頁中查看輸出結果。
範例輸出
! ASP.NET 程式動態產生 PDF:.NET Core 中的動態 PDF 產生:圖 1 - 使用我們的 ASP.NET 程式動態產生的 PDF 範例
如何將 PDF 檔案直接串流傳輸給使用者而不儲存到磁碟?
即時傳輸 PDF 需要處理記憶體流和位元組數組。 這種方法確保 PDF 文件永遠不會存取伺服器的檔案系統,這對於雲端部署和容器化應用程式至關重要:
[HttpPost]
public async Task<IActionResult> CreateReport([FromBody] ReportRequest request)
{
// Generate HTML from request data
string html = BuildReportHtml(request);
// Create PDF in memory
var pdfDocument = _renderer.RenderHtmlAsPdf(html);
// Use MemoryStream for efficient streaming
using (var memoryStream = new MemoryStream())
{
// Write PDF binary data to the memory stream
memoryStream.Write(pdfDocument.BinaryData, 0, pdfDocument.BinaryData.Length);
// Set response headers for inline display
Response.Headers.Add("Content-Disposition", "inline; filename=report.pdf");
// Return FileContentResult with proper content type
return new FileContentResult(memoryStream.ToArray(), "application/pdf");
}
}[HttpPost]
public async Task<IActionResult> CreateReport([FromBody] ReportRequest request)
{
// Generate HTML from request data
string html = BuildReportHtml(request);
// Create PDF in memory
var pdfDocument = _renderer.RenderHtmlAsPdf(html);
// Use MemoryStream for efficient streaming
using (var memoryStream = new MemoryStream())
{
// Write PDF binary data to the memory stream
memoryStream.Write(pdfDocument.BinaryData, 0, pdfDocument.BinaryData.Length);
// Set response headers for inline display
Response.Headers.Add("Content-Disposition", "inline; filename=report.pdf");
// Return FileContentResult with proper content type
return new FileContentResult(memoryStream.ToArray(), "application/pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com範例輸出 PDF 文檔
! ASP 即時建立 PDF:.NET Core 中的動態 PDF 產生:圖 2 - 使用位元組陣列和串流建立的 PDF
位元組數組方法可讓您完全在記憶體中建立 PDF。 內容類型"application/pdf"告訴瀏覽器如何處理該文件,而 Content-Disposition 標頭決定 PDF 文件是在瀏覽器中開啟還是觸發下載。 有關PDF 到 MemoryStream 轉換的更多詳細信息,請查看我們的文件。 當用戶按下按鈕發送請求時,伺服器將運行此程式碼以繼續該過程。
立即開始免費試用,體驗動態 PDF 產生功能!
如何從動態資料庫內容產生PDF?
在實際應用程式中,ASP.NET Core 應用程式經常需要根據資料庫查詢結果建立 PDF 報表。 以下是如何使用 Entity Framework Core 資料產生 PDF 檔案並進行正確錯誤處理的方法:
[HttpGet("report/monthly")]
public async Task<IActionResult> MonthlyReport(int year, int month)
{
// Query database for report data
var reportData = await _context.Transactions
.Where(t => t.Date.Year == year && t.Date.Month == month)
.GroupBy(t => t.Category)
.Select(g => new {
Category = g.Key,
Total = g.Sum(t => t.Amount),
Count = g.Count()
})
.ToListAsync();
// Build HTML template with style
var htmlTemplate = @"<h2>Monthly Report</h2>
<table style='width:100%'>";
foreach(var item in reportData)
{
htmlTemplate += $"<tr><td>{item.Category}</td>" +
$"<td>{item.Count} items</td>" +
$"<td>${item.Total:F2}</td></tr>";
}
htmlTemplate += "</table>";
// Generate PDF document with settings
var pdf = _renderer.RenderHtmlAsPdf(htmlTemplate);
// Add metadata to PDF
pdf.MetaData.Title = $"Report {month}/{year}";
pdf.MetaData.Author = "Reporting System";
// Stream PDF to user
return File(pdf.BinaryData, "application/pdf");
}[HttpGet("report/monthly")]
public async Task<IActionResult> MonthlyReport(int year, int month)
{
// Query database for report data
var reportData = await _context.Transactions
.Where(t => t.Date.Year == year && t.Date.Month == month)
.GroupBy(t => t.Category)
.Select(g => new {
Category = g.Key,
Total = g.Sum(t => t.Amount),
Count = g.Count()
})
.ToListAsync();
// Build HTML template with style
var htmlTemplate = @"<h2>Monthly Report</h2>
<table style='width:100%'>";
foreach(var item in reportData)
{
htmlTemplate += $"<tr><td>{item.Category}</td>" +
$"<td>{item.Count} items</td>" +
$"<td>${item.Total:F2}</td></tr>";
}
htmlTemplate += "</table>";
// Generate PDF document with settings
var pdf = _renderer.RenderHtmlAsPdf(htmlTemplate);
// Add metadata to PDF
pdf.MetaData.Title = $"Report {month}/{year}";
pdf.MetaData.Author = "Reporting System";
// Stream PDF to user
return File(pdf.BinaryData, "application/pdf");
}IRON VB CONVERTER ERROR developers@ironsoftware.com這種模式允許您從任何資料來源建立 PDF,將資料庫記錄立即轉換為格式化文件。 HTML範本方法使得維護和修改報表版面變得容易。 對於更複雜的情況,您還可以探索如何從現有文件建立 PDF,並找到更多資訊索引的連結。 我們希望這能成為一個好例子。
即時產生 PDF 的最佳實踐是什麼?
在 ASP.NET Core 中動態建立 PDF 檔案時,請考慮以下優化策略:
非同步操作:產生多個 PDF 檔案時,使用非同步方法可以防止阻塞伺服器執行緒池:
var pdfTask = _renderer.RenderHtmlAsPdfAsync(htmlContent);
var pdf = await pdfTask;var pdfTask = _renderer.RenderHtmlAsPdfAsync(htmlContent);
var pdf = await pdfTask;IRON VB CONVERTER ERROR developers@ironsoftware.com記憶體管理:對於大型 PDF 文件,應妥善釋放資源,並考慮直接將資料串流到回應中,以最大限度地減少記憶體使用量:
using (var pdf = _renderer.RenderHtmlAsPdf(html))
{
return File(pdf.Stream, "application/pdf");
}using (var pdf = _renderer.RenderHtmlAsPdf(html))
{
return File(pdf.Stream, "application/pdf");
}IRON VB CONVERTER ERROR developers@ironsoftware.com渲染器重複使用:在產生多個 PDF 時,跨請求共享 ChromePdfRenderer 實例以提高效能。 渲染器是線程安全的,可以有效率地處理並發操作。 重用渲染器確實可以節省時間。千萬不要錯過這項優化。
根據微軟的ASP.NET Core 最佳實踐,最大限度地減少物件分配和重複使用資源是實現高效能 Web 應用程式的關鍵。
!{--010011000100100101000010010100100100000101010010010110010101111101001110010101010101010101010101010101010101010 0100010111110100100101001101010100010000010100110001001100010111110100001001001100010011110010101010
結論
使用 IronPDF 即時建立 PDF 文檔,可以將複雜的文檔產生流程轉化為簡單的程式碼。 從簡單的發票到複雜的報告,IronPDF 強大的 SDK 可以處理繁重的工作,讓您專注於應用程式邏輯。 無需儲存到磁碟即可產生和串流 PDF 文件,這使得您的 ASP.NET Core 應用程式更加有效率且安全。 我們不斷融合新功能,您可以從我們所有的範例中汲取靈感。 這是該圖書館的官方文件。
使用 IronPDF,您可以從 HTML 內容建立 PDF,將其作為位元組數組進行串流傳輸,並立即向使用者提供專業文件。 無論您是建立報表系統、發票產生器或文件管理解決方案,IronPDF 都能提供您實現強大的 PDF 產生所需的所有功能。 您也可以撰寫新訊息以獲取支援。 文字內容清晰明了。
準備好使用動態 PDF 功能改造您的 ASP.NET Core 應用程式了嗎? 購買許可證即可解鎖所有功能並獲得我們工程團隊的專業支援。
常見問題解答
如何在 ASP.NET Core 中動態產生 PDF?
您可以使用 IronPDF 在 ASP.NET Core 中動態生成 PDF,而無需將檔案儲存至磁碟。它可讓您直接將 PDF 串流至瀏覽器。
使用 IronPDF 生成 PDF 有哪些優點?
IronPDF 提供功能強大的渲染引擎,可直接在您的 .NET Core 專案中動態建立 PDF,確保立即產生 PDF,而無需伺服器端儲存。
IronPDF 可以用來建立發票和報表嗎?
是的,IronPDF 適合用於建立各種類型的文件,例如發票、報告和證書,這些文件都是在 ASP.NET Core 應用程式中即時產生的。
使用 IronPDF 時,伺服器端儲存是否必要?
不,IronPDF 可讓您直接在瀏覽器上產生 PDF 檔案並將 PDF 檔案串流至瀏覽器,無需伺服器端儲存,效率高且速度快。
什麼樣的應用程式可以從即時產生 PDF 中獲益?
現代網路應用程式,特別是那些需要即時建立文件的應用程式,例如發票系統和報表工具,可以從 IronPDF 提供的即時 PDF 生成功能中獲益良多。
IronPDF 支援 .NET Core 專案嗎?
是的,IronPDF 與 .NET Core 專案完全相容,讓開發人員可以將 PDF 生成功能無縫整合到他們的應用程式中。






