跳過到頁腳內容
使用IRONPDF

如何在.NET Core中使用IronPDF創建PDF檔案

IronPDF使用其 Chrome 渲染引擎,透過 HTML 到 PDF 的轉換在.NET Core應用程式中建立 PDF 文件,支援 CSS3、 JavaScript、圖像和複雜的佈局,只需簡單的 C# 程式碼即可實現。

在現代 Web 應用程式中,以程式設計方式建立 PDF 文件是一項常見需求。 無論您是建立發票、報告還是任何基於文件的系統,了解如何在ASP.NET Core中有效地建立 PDF 文件至關重要。 本教學探討了使用IronPDF (一個功能強大的函式庫,可簡化 PDF 產生)在.NET Core中建立 PDF 檔案的最佳方法。 有關完整的技術細節,請參閱官方文件

IronPDF使.NET Core開發人員能夠使用簡單的 HTML 和 CSS 建立 PDF 文件,透過其直覺的 API 和渲染引擎,無需複雜的 PDF 手動繪製操作。該程式庫支援多種部署環境,包括 Windows、Linux、macOS 以及AzureAWS Lambda等雲端平台。 該庫的 Chrome 渲染引擎可確保將 HTML 精確轉換為 PDF ,並完全支援 CSS 螢幕和列印媒體類型。

如何在.NET Core中開始產生 PDF 檔案?

IronPDF是一個完整的.NET Core PDF 庫,它將複雜的 PDF 創建過程轉換為簡單的操作。 與需要手動繪製元素的傳統方法不同, IronPDF使用 HTML 標籤和 CSS 產生符合您確切設計要求的 PDF 檔案。 此庫底層使用 Chrome 渲染引擎,確保 HTML 到 PDF 的像素級完美轉換。 這種方法非常適合建立新的 PDF 文件,以及將現有內容轉換為 PDF 格式。

在評估適用於.NET Core的 PDF 產生解決方案時,開發人員通常會比較多個選項。 IronPDF能在眾多競爭對手(如iTextAsposeSyncfusion)中脫穎而出,原因有以下幾點:

-出色的渲染品質:基於 Chrome 的引擎確保了精確的 HTML/CSS 保真度 -更簡潔的API :利用HTML知識創建PDF,而不是複雜的PDF基本組件 -跨平台支援:提供適用於 Windows、Linux、macOS 和雲端平台的原生二進位文件 -功能齊全:從基本創建到高級操作和安全保障

如何安裝IronPDF?

若要開始在.NET Core專案中建立 PDF,請安裝IronPDF NuGet套件。 使用軟體套件管理器控制台:

Install-Package IronPdf
Install-Package IronPdf
SHELL

或使用.NET CLI:

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

此安裝程式可立即為您的 Web 應用程式提供 PDF 生成功能。 對於更進階的安裝方案,請查看NuGet套件文件或探索Docker 部署選項

如何建立你的第一個PDF文件?

以下範例示範如何使用 IronPDF 的HTML 字串到 PDF 轉換功能產生具有格式化內容的 PDF。 此方法非常適合從動態內容建立 PDF,或當您需要將 HTML 匯出為 PDF 文件時:

using IronPdf;

// Create a new ChromePdfRenderer
var renderer = new ChromePdfRenderer();

// Define HTML content with styling
var html = @"
    <html>
        <body style='font-family: Arial; margin: 40px;'>
            <h1>Hello World PDF Document</h1>
            <p>This is your first PDF file created with IronPDF!</p>
        </body>
    </html>";

// Generate PDF from HTML
var pdf = renderer.RenderHtmlAsPdf(html);

// Save the PDF document
pdf.SaveAs("output.pdf");
using IronPdf;

// Create a new ChromePdfRenderer
var renderer = new ChromePdfRenderer();

// Define HTML content with styling
var html = @"
    <html>
        <body style='font-family: Arial; margin: 40px;'>
            <h1>Hello World PDF Document</h1>
            <p>This is your first PDF file created with IronPDF!</p>
        </body>
    </html>";

// Generate PDF from HTML
var pdf = renderer.RenderHtmlAsPdf(html);

// Save the PDF document
pdf.SaveAs("output.pdf");
Imports IronPdf

' Create a new ChromePdfRenderer
Dim renderer As New ChromePdfRenderer()

' Define HTML content with styling
Dim html As String = "
    <html>
        <body style='font-family: Arial; margin: 40px;'>
            <h1>Hello World PDF Document</h1>
            <p>This is your first PDF file created with IronPDF!</p>
        </body>
    </html>"

' Generate PDF from HTML
Dim pdf = renderer.RenderHtmlAsPdf(html)

' Save the PDF document
pdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

這段程式碼透過渲染HTML內容創建一個新的PDF文件。 ChromePdfRenderer 負責處理轉換,確保您的 PDF 文件保持一致的格式。 您也可以將 PDF 儲存到記憶體流中,供 Web 應用程式以內聯方式傳回文件,而不是寫入磁碟。

了解其核心組成部分有助於您有效地使用IronPDF :

  • ChromePdfRenderer :將 HTML 轉換為 PDF 的主要渲染引擎
  • PdfDocument :表示要操作的 PDF 文檔
  • RenderingOptions :控制佈局、邊距、頁首和其他設置
  • SecuritySettings :管理密碼、權限與加密

使用 HTML 建立 PDF 相較於傳統的 PDF API 具有顯著優勢。開發者可以利用現有的 HTML/CSS 技能,CSS 框架能夠自然套用, JavaScript會在轉換前進行渲染,媒體查詢也會自動適應 PDF 的尺寸。 更新PDF內容只需要更改HTML模板即可。

PDF 檢視器顯示一個簡單的"Hello World PDF 文件",其中包含格式化文字"這是您使用IronPDF創建的第一個 PDF 文件!",縮放比例為 100%,演示了 IronPDF 的 HTML 渲染引擎的基本 PDF 生成功能

IronPDF ChromePdfRenderer creating Hello World PDF document with Arial font styling in .NET Core

渲染後的 PDF 文件展示了 IronPDF 將帶有 CSS 樣式的 HTML 轉換為專業 PDF 文件的能力。

如何使用進階版面將 HTML 轉換為 PDF?

IronPDF擅長將複雜的網頁和 HTML 內容轉換為專業的 PDF 檔案。 HTML 轉 PDF 功能支援現代 CSS3、 JavaScript和響應式設計。 該庫可以處理網頁字體、Bootstrap 和 Flexbox 佈局,甚至是JavaScript框架。 以下程式碼展示如何建立包含表格、圖像和樣式元素的 PDF 文檔,以及精細的佈局控制:

using IronPdf;

var renderer = new ChromePdfRenderer();

// Configure rendering options
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;

// Enable JavaScript for dynamic content
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(1000);

// Set viewport and CSS media type
renderer.RenderingOptions.ViewPortWidth = 1024;
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;

var html = @"
    <html>
    <head>
        <style>
            table { width: 100%; border-collapse: collapse; }
            th, td { padding: 10px; border: 1px solid #ddd; }
            th { background-color: #f2f2f2; }
        </style>
    </head>
    <body>
        <h2>Sales Report</h2>
        <table>
            <tr><th>Product</th><th>Quantity</th><th>Total</th></tr>
            <tr><td>Software License</td><td>10</td><td>$500</td></tr>
        </table>
    </body>
    </html>";

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

// Configure rendering options
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;

// Enable JavaScript for dynamic content
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(1000);

// Set viewport and CSS media type
renderer.RenderingOptions.ViewPortWidth = 1024;
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;

var html = @"
    <html>
    <head>
        <style>
            table { width: 100%; border-collapse: collapse; }
            th, td { padding: 10px; border: 1px solid #ddd; }
            th { background-color: #f2f2f2; }
        </style>
    </head>
    <body>
        <h2>Sales Report</h2>
        <table>
            <tr><th>Product</th><th>Quantity</th><th>Total</th></tr>
            <tr><td>Software License</td><td>10</td><td>$500</td></tr>
        </table>
    </body>
    </html>";

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("report.pdf");
Imports IronPdf

Dim renderer = New ChromePdfRenderer()

' Configure rendering options
renderer.RenderingOptions.MarginTop = 25
renderer.RenderingOptions.MarginBottom = 25

' Enable JavaScript for dynamic content
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.WaitFor.RenderDelay(1000)

' Set viewport and CSS media type
renderer.RenderingOptions.ViewPortWidth = 1024
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print

Dim html As String = "
    <html>
    <head>
        <style>
            table { width: 100%; border-collapse: collapse; }
            th, td { padding: 10px; border: 1px solid #ddd; }
            th { background-color: #f2f2f2; }
        </style>
    </head>
    <body>
        <h2>Sales Report</h2>
        <table>
            <tr><th>Product</th><th>Quantity</th><th>Total</th></tr>
            <tr><td>Software License</td><td>10</td><td>$500</td></tr>
        </table>
    </body>
    </html>"

Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("report.pdf")
$vbLabelText   $csharpLabel

IronPDF 的 Chrome 引擎支援廣泛的 CSS 功能:Flexbox、CSS Grid、浮動、定位、CSS3 變換、過渡、動畫、Web 字體、可變字體、特定於列印的媒體查詢和偽元素選擇器。 您還可以設定自訂頁邊距和紙張尺寸,並管理字體以支援國際語言。

PDF viewer displaying a professionally formatted Sales Report with a table showing Software License product data including quantity (10) and total ($500), demonstrating IronPDF's advanced table formatting and CSS styling capabilities in .NET Core applications

Advanced IronPDF table rendering with CSS styling showing sales report data in formatted PDF

進階表格格式設定展示了 IronPDF 的 CSS 渲染功能,可用於專業商務文件。

如何在ASP.NET Core中整合 PDF 生成功能?

在ASP.NET Core MVC 中整合 PDF 產生功能非常簡單。 IronPDF可與ASP.NET Core MVCRazor Pages和Blazor Server 應用程式整合。 以下是一個完整的實作範例,展示了控制器操作和最小 API 端點如何協同工作:

using Microsoft.AspNetCore.Mvc;
using IronPdf;

// --- MVC Controller approach ---
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
var app = builder.Build();

// Minimal API endpoint
app.MapGet("/api/pdf/{id}", async (int id) =>
{
    var renderer = new ChromePdfRenderer();
    var html = $"<h1>Invoice #{id}</h1><p>Thank you for your purchase!</p>";
    var pdf = renderer.RenderHtmlAsPdf(html);
    return Results.File(pdf.BinaryData, "application/pdf", $"invoice-{id}.pdf");
});

app.Run();

// --- MVC Controller ---
public class DocumentController : Controller
{
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var html = "<h1>Invoice</h1><p>Thank you for your purchase!</p>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        return File(pdf.BinaryData, "application/pdf", "document.pdf");
    }
}
using Microsoft.AspNetCore.Mvc;
using IronPdf;

// --- MVC Controller approach ---
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
var app = builder.Build();

// Minimal API endpoint
app.MapGet("/api/pdf/{id}", async (int id) =>
{
    var renderer = new ChromePdfRenderer();
    var html = $"<h1>Invoice #{id}</h1><p>Thank you for your purchase!</p>";
    var pdf = renderer.RenderHtmlAsPdf(html);
    return Results.File(pdf.BinaryData, "application/pdf", $"invoice-{id}.pdf");
});

app.Run();

// --- MVC Controller ---
public class DocumentController : Controller
{
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var html = "<h1>Invoice</h1><p>Thank you for your purchase!</p>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        return File(pdf.BinaryData, "application/pdf", "document.pdf");
    }
}
Imports Microsoft.AspNetCore.Mvc
Imports IronPdf

' --- MVC Controller approach ---
Dim builder = WebApplication.CreateBuilder(args)
builder.Services.AddControllersWithViews()
Dim app = builder.Build()

' Minimal API endpoint
app.MapGet("/api/pdf/{id}", Async Function(id As Integer)
                                  Dim renderer = New ChromePdfRenderer()
                                  Dim html = $"<h1>Invoice #{id}</h1><p>Thank you for your purchase!</p>"
                                  Dim pdf = renderer.RenderHtmlAsPdf(html)
                                  Return Results.File(pdf.BinaryData, "application/pdf", $"invoice-{id}.pdf")
                              End Function)

app.Run()

' --- MVC Controller ---
Public Class DocumentController
    Inherits Controller

    Public Function GeneratePdf() As IActionResult
        Dim renderer = New ChromePdfRenderer()
        Dim html = "<h1>Invoice</h1><p>Thank you for your purchase!</p>"
        Dim pdf = renderer.RenderHtmlAsPdf(html)
        Return File(pdf.BinaryData, "application/pdf", "document.pdf")
    End Function
End Class
$vbLabelText   $csharpLabel

控制器方法會產生 PDF 文件並將其作為可下載文件傳回,非常適合伺服器端處理。 對於更複雜的場景,可以考慮使用URL 轉 PDF 功能,將即時網頁直接渲染成 PDF。

企業應用需要可靠的 PDF 產生功能,以適應其現有的基礎架構。 IronPDF可處理數千個並發 PDF 請求,在伺服器端產生敏感文檔,支援依賴注入和中介軟體,並可部署至 Azure 應用服務或 AWS。 要產生可用於生產環境的 PDF 文件,請遵循以下準則:透過在啟動程式碼中註冊IronPDF服務來使用依賴注入;對頻繁產生的 PDF 文件實現快取;使用回退選項優雅地處理錯誤;以及使用 PDF 密碼和權限來保護敏感資料。

PDF 檢視器以 100% 縮放比例顯示帶有

ASP.NET Core controller generating invoice PDF with IronPDF showing thank you message

控制器產生的 PDF 展示了與ASP.NET Core Web 應用程式的流暢整合。

如何新增頁首、頁尾和合併文件?

IronPDF支援眾多用於建立 PDF 的進階功能。 您可以新增頁首和頁尾插入頁碼,以及合併多個 PDF 檔案。 該庫還支援浮水印數位簽名書籤文字和圖像加蓋印章以及創建目錄

using IronPdf;

var renderer = new ChromePdfRenderer();

// Add text header and footer
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    CenterText = "Company Report",
    DrawDividerLine = true
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    CenterText = "Page {page} of {total-pages}",
    DrawDividerLine = true
};

// Add HTML-based branded header
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align: center'><img src='logo.png' /></div>",
    Height = 30
};

renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;

var html = "<h1>Annual Report</h1><p>Content goes here...</p>";
var mainPdf = renderer.RenderHtmlAsPdf(html);

// Merge multiple PDFs
var coverPdf = renderer.RenderHtmlAsPdf("<p>Cover Page</p>");
var merged = PdfDocument.Merge(coverPdf, mainPdf);

// Apply security
merged.SecuritySettings.SetPassword("user-password");
merged.SecuritySettings.AllowUserPrinting = true;
merged.SecuritySettings.AllowUserCopyPasteContent = false;

merged.SaveAs("report-with-header.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

// Add text header and footer
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    CenterText = "Company Report",
    DrawDividerLine = true
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    CenterText = "Page {page} of {total-pages}",
    DrawDividerLine = true
};

// Add HTML-based branded header
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align: center'><img src='logo.png' /></div>",
    Height = 30
};

renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;

var html = "<h1>Annual Report</h1><p>Content goes here...</p>";
var mainPdf = renderer.RenderHtmlAsPdf(html);

// Merge multiple PDFs
var coverPdf = renderer.RenderHtmlAsPdf("<p>Cover Page</p>");
var merged = PdfDocument.Merge(coverPdf, mainPdf);

// Apply security
merged.SecuritySettings.SetPassword("user-password");
merged.SecuritySettings.AllowUserPrinting = true;
merged.SecuritySettings.AllowUserCopyPasteContent = false;

merged.SaveAs("report-with-header.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

' Add text header and footer
renderer.RenderingOptions.TextHeader = New TextHeaderFooter With {
    .CenterText = "Company Report",
    .DrawDividerLine = True
}
renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
    .CenterText = "Page {page} of {total-pages}",
    .DrawDividerLine = True
}

' Add HTML-based branded header
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
    .HtmlFragment = "<div style='text-align: center'><img src='logo.png' /></div>",
    .Height = 30
}

renderer.RenderingOptions.MarginTop = 50
renderer.RenderingOptions.MarginBottom = 50

Dim html As String = "<h1>Annual Report</h1><p>Content goes here...</p>"
Dim mainPdf As PdfDocument = renderer.RenderHtmlAsPdf(html)

' Merge multiple PDFs
Dim coverPdf As PdfDocument = renderer.RenderHtmlAsPdf("<p>Cover Page</p>")
Dim merged As PdfDocument = PdfDocument.Merge(coverPdf, mainPdf)

' Apply security
merged.SecuritySettings.SetPassword("user-password")
merged.SecuritySettings.AllowUserPrinting = True
merged.SecuritySettings.AllowUserCopyPasteContent = False

merged.SaveAs("report-with-header.pdf")
$vbLabelText   $csharpLabel

這些範例展示如何新增專業潤飾並將多個文件合併到一個文件中。 專業 PDF 的主要增強功能包括:用於品牌一致性的頁眉/頁腳、用於多頁導航的頁碼、用於安全性和草稿識別的浮水印、用於長文檔的書籤以及自動生成目錄。 您還可以探索頁面方向和旋轉、 PDF 壓縮或符合 PDF/A 標準的文件以進行長期存檔。

PDF 文件展示了一個專業的年度報告模板,其中包含

Professional PDF with custom headers and footers created using IronPDF TextHeaderFooter

專業化的頁首和頁尾可以改善文件的呈現方式和導覽體驗。

如何建立互動式PDF表單?

IronPDF可以建立具有各種輸入欄位(文字方塊、複選框、單選按鈕和下拉式清單)的互動式 PDF 表單。 您也可以透過程式設計方式填寫和編輯現有的 PDF 表單。 該庫支援表單資料提取,並且可以將表單展平,使其不可編輯:

using IronPdf;
using System.IO;

// Create a form from HTML
var html = @"
<!DOCTYPE html>
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; }
        .form-container { width: 400px; padding: 20px; border: 1px solid #ccc; border-radius: 8px; }
        .form-group { margin-bottom: 15px; }
        label { display: block; margin-bottom: 5px; font-weight: bold; color: #333; }
        input[type='text'], textarea { width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px; box-sizing: border-box; }
        textarea { height: 100px; resize: vertical; }
    </style>
</head>
<body>
    <div class='form-container'>
        <h2>Document Generation Test Form</h2>
        <form>
            <div class='form-group'>
                <label for='fullName'>Full Name:</label>
                <input type='text' id='fullName' name='fullName'>
            </div>
            <div class='form-group'>
                <label for='comments'>Comments/Feedback:</label>
                <textarea id='comments' name='comments' placeholder='Type your feedback here...'></textarea>
            </div>
            <div class='form-group'>
                <input type='checkbox' id='agree' name='agree'>
                <label for='agree'>I agree to the terms and conditions.</label>
            </div>
            <button style='padding: 10px 15px; background-color: #007bff; color: white; border: none; border-radius: 4px; cursor: pointer;'>
                Submit
            </button>
        </form>
    </div>
</body>
</html>";

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("form.pdf");

// Read back and process form data
var loadedPdf = new PdfDocument("form.pdf");
var fullName = loadedPdf.Form.FindFormField("fullName").Value;
Console.WriteLine($"Full Name: {fullName}");

// Flatten form to prevent further editing
loadedPdf.Form.Flatten();
loadedPdf.SaveAs("processed-form.pdf");
using IronPdf;
using System.IO;

// Create a form from HTML
var html = @"
<!DOCTYPE html>
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; }
        .form-container { width: 400px; padding: 20px; border: 1px solid #ccc; border-radius: 8px; }
        .form-group { margin-bottom: 15px; }
        label { display: block; margin-bottom: 5px; font-weight: bold; color: #333; }
        input[type='text'], textarea { width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px; box-sizing: border-box; }
        textarea { height: 100px; resize: vertical; }
    </style>
</head>
<body>
    <div class='form-container'>
        <h2>Document Generation Test Form</h2>
        <form>
            <div class='form-group'>
                <label for='fullName'>Full Name:</label>
                <input type='text' id='fullName' name='fullName'>
            </div>
            <div class='form-group'>
                <label for='comments'>Comments/Feedback:</label>
                <textarea id='comments' name='comments' placeholder='Type your feedback here...'></textarea>
            </div>
            <div class='form-group'>
                <input type='checkbox' id='agree' name='agree'>
                <label for='agree'>I agree to the terms and conditions.</label>
            </div>
            <button style='padding: 10px 15px; background-color: #007bff; color: white; border: none; border-radius: 4px; cursor: pointer;'>
                Submit
            </button>
        </form>
    </div>
</body>
</html>";

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("form.pdf");

// Read back and process form data
var loadedPdf = new PdfDocument("form.pdf");
var fullName = loadedPdf.Form.FindFormField("fullName").Value;
Console.WriteLine($"Full Name: {fullName}");

// Flatten form to prevent further editing
loadedPdf.Form.Flatten();
loadedPdf.SaveAs("processed-form.pdf");
Imports IronPdf
Imports System.IO

' Create a form from HTML
Dim html As String = "
<!DOCTYPE html>
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; }
        .form-container { width: 400px; padding: 20px; border: 1px solid #ccc; border-radius: 8px; }
        .form-group { margin-bottom: 15px; }
        label { display: block; margin-bottom: 5px; font-weight: bold; color: #333; }
        input[type='text'], textarea { width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px; box-sizing: border-box; }
        textarea { height: 100px; resize: vertical; }
    </style>
</head>
<body>
    <div class='form-container'>
        <h2>Document Generation Test Form</h2>
        <form>
            <div class='form-group'>
                <label for='fullName'>Full Name:</label>
                <input type='text' id='fullName' name='fullName'>
            </div>
            <div class='form-group'>
                <label for='comments'>Comments/Feedback:</label>
                <textarea id='comments' name='comments' placeholder='Type your feedback here...'></textarea>
            </div>
            <div class='form-group'>
                <input type='checkbox' id='agree' name='agree'>
                <label for='agree'>I agree to the terms and conditions.</label>
            </div>
            <button style='padding: 10px 15px; background-color: #007bff; color: white; border: none; border-radius: 4px; cursor: pointer;'>
                Submit
            </button>
        </form>
    </div>
</body>
</html>"

Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.CreatePdfFormsFromHtml = True
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("form.pdf")

' Read back and process form data
Dim loadedPdf As New PdfDocument("form.pdf")
Dim fullName As String = loadedPdf.Form.FindFormField("fullName").Value
Console.WriteLine($"Full Name: {fullName}")

' Flatten form to prevent further editing
loadedPdf.Form.Flatten()
loadedPdf.SaveAs("processed-form.pdf")
$vbLabelText   $csharpLabel

這將創建一個帶有表單字段的交互式 PDF,用戶可以填寫這些字段,非常適合需要用戶輸入的應用程式。 互動式 PDF 滿足關鍵的業務需求:無需網絡表單即可收集信息,為無法訪問互聯網的用戶提供離線功能,透過簽名表單實現法律合規性,以及熟悉的 PDF 界面可減少培訓時間。

安全表格處理需要格外小心。 始終驗證和清理所有表單數據,使用存取控制限製表單欄位編輯,記錄所有表單提交以進行審計跟踪,使用加密保護敏感表單數據,並使用數位簽名驗證表單真實性。

互動式 PDF 表單,顯示文件產生測試表單,包含可填寫的文字欄位(用於填寫姓名和評論/回饋)、用於條款同意的互動式複選框以及藍色提交按鈕,示範了 IronPDF 的完整表單建立功能

IronPDF interactive form with text fields, checkbox, and button demonstrating form creation

互動式表單支援直接在PDF文件中收集資料。

生產環境中如何處理效能和錯誤?

在生產環境中產生 PDF 檔案時,應實施適當的錯誤處理並考慮效能最佳化。 IronPDF為高容量場景提供非同步和多執行緒支援。 您還應該實作自訂日誌記錄,以便進行偵錯和監控。 建立渲染器實例會產生開銷,因此有效地重複使用它們至關重要。 以下範例結合了生產環境錯誤處理和渲染器重複使用:

using IronPdf;
using Microsoft.Extensions.Logging;

// Register a reusable renderer as a singleton in your DI container
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(500);

// Resilient generation with retry and exponential backoff
async Task<byte[]> GenerateWithRetry(string html, ILogger logger, int maxRetries = 3)
{
    for (int attempt = 1; attempt <= maxRetries; attempt++)
    {
        try
        {
            renderer.RenderingOptions.Timeout = 60;
            var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf(html));
            pdf.SecuritySettings.MakePdfDocumentReadOnly();
            pdf.SecuritySettings.SetPassword("userPassword123");
            logger.LogInformation("PDF generated successfully on attempt {Attempt}", attempt);
            return pdf.BinaryData;
        }
        catch (Exception ex) when (attempt < maxRetries)
        {
            logger.LogWarning(ex, "PDF generation failed, attempt {Attempt} of {MaxRetries}", attempt, maxRetries);
            await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)));
        }
    }
    throw new InvalidOperationException("Failed to generate PDF after retries");
}
using IronPdf;
using Microsoft.Extensions.Logging;

// Register a reusable renderer as a singleton in your DI container
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(500);

// Resilient generation with retry and exponential backoff
async Task<byte[]> GenerateWithRetry(string html, ILogger logger, int maxRetries = 3)
{
    for (int attempt = 1; attempt <= maxRetries; attempt++)
    {
        try
        {
            renderer.RenderingOptions.Timeout = 60;
            var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf(html));
            pdf.SecuritySettings.MakePdfDocumentReadOnly();
            pdf.SecuritySettings.SetPassword("userPassword123");
            logger.LogInformation("PDF generated successfully on attempt {Attempt}", attempt);
            return pdf.BinaryData;
        }
        catch (Exception ex) when (attempt < maxRetries)
        {
            logger.LogWarning(ex, "PDF generation failed, attempt {Attempt} of {MaxRetries}", attempt, maxRetries);
            await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)));
        }
    }
    throw new InvalidOperationException("Failed to generate PDF after retries");
}
Imports IronPdf
Imports Microsoft.Extensions.Logging
Imports System.Threading.Tasks

' Register a reusable renderer as a singleton in your DI container
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.MarginTop = 25
renderer.RenderingOptions.MarginBottom = 25
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.WaitFor.RenderDelay(500)

' Resilient generation with retry and exponential backoff
Async Function GenerateWithRetry(html As String, logger As ILogger, Optional maxRetries As Integer = 3) As Task(Of Byte())
    For attempt As Integer = 1 To maxRetries
        Try
            renderer.RenderingOptions.Timeout = 60
            Dim pdf = Await Task.Run(Function() renderer.RenderHtmlAsPdf(html))
            pdf.SecuritySettings.MakePdfDocumentReadOnly()
            pdf.SecuritySettings.SetPassword("userPassword123")
            logger.LogInformation("PDF generated successfully on attempt {Attempt}", attempt)
            Return pdf.BinaryData
        Catch ex As Exception When attempt < maxRetries
            logger.LogWarning(ex, "PDF generation failed, attempt {Attempt} of {MaxRetries}", attempt, maxRetries)
            Await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)))
        End Try
    Next
    Throw New InvalidOperationException("Failed to generate PDF after retries")
End Function
$vbLabelText   $csharpLabel

始終驗證輸入資料並妥善處理異常情況,以確保可靠地產生 PDF 文件。 考慮對敏感文件實施PDF 權限和密碼,以控制列印、複製和編輯權限。

應該追蹤哪些監控指標?

監控以下關鍵指標,以確保生產環境中 PDF 的產生:

用於監控IronPDF性能的關鍵生產指標
指標 目的 警報閾值
世代時間 績效追蹤 > 10 seconds
記憶體使用情況 資源最佳化 > 500 MB per request
錯誤率 可靠性監測 > 5% failure rate
佇列長度 能力規劃 > 100 pending
文件大小 儲存最佳化 > 50 MB average

如何在不同平台上部署和排查 PDF 生成問題?

IronPDF支援跨不同平台的多種部署方案。 您可以將其部署到 Azure Functions、 AWS Lambda或傳統 IIS 伺服器。 該程式庫還支援 Linux 部署,並且可以在Docker 容器中運行,以實現微服務架構。 不同的部署方法各有優勢:Docker 容器提供一致性,Kubernetes 實作水平擴展,無伺服器函數提供彈性擴展,IronPdfEngine 服務提供進程隔離。

您應該了解哪些平台特定要求?

在部署.NET PDF 生成功能時,每個平台都有其獨特的注意事項:

IronPDF的平台特定部署要求和解決方案
平台 關鍵要求 解決方案
Linux 缺少字體 透過 apt/yum 安裝字型包
Docker 文件權限 以非root使用者身分執行
Azure 應用程式服務 暫存目錄 配置可寫入路徑
AWS Lambda 冷啟動 使用預置並發
macOS 程式碼簽名 在設定中允許未簽名庫

渲染問題通常源自於缺少 CSS 或 JS 資源、動態內容的時序問題、缺少伺服器字體或 CSS 不相容。 有效的調試始於啟用詳細日誌記錄(透過 renderer.LoggingMode = IronPdf.Logging.LoggingModes.All),保存中間 HTML 以便檢查,並在停用JavaScript 的情況下進行測試,以隔離渲染問題。 記憶體管理也至關重要:始終釋放 PdfDocument 對象,分塊處理大型作業,並設定適當的容器記憶體限制。

對於雲端部署,請檢視Azure 部署指南和 AWS Lambda 設定文件。 根據微軟.NET文檔, .NET 10 引進了額外的效能改進,與 IronPDF 本身的最佳化相輔相成。 有關 PDF 規範的詳細信息, PDF 協會的技術資源為理解 PDF/A 合規性要求提供了有用的背景資訊。 此外, Google的 Chromium 專案文件涵蓋了 IronPDF 的 HTML 轉 PDF 引擎的渲染行為。

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

IronPDF將.NET Core中建立 PDF 檔案的複雜任務轉化為一個簡單、易於管理的流程。 從基本的文件建立到表單、影像和頁面管理等進階功能,該程式庫提供了以程式設計方式產生 PDF 文件的工具。 透過將 HTML 轉換為 PDF,您可以快速載入資料並產生最終檔案。 該程式庫支援各種 PDF 標準、具有輔助功能,並提供完整的文檔,使其適用於企業應用程式。

為什麼IronPDF是.NET專案的理想選擇?

IronPDF是.NET PDF 產生的理想選擇:

-企業級應用:經過生產環境實戰檢驗 -跨平台:真正的跨作業系統移植性 -積極開發:定期更新,推出新功能 -格式相容性強:支援 DOCX 轉 PDF、RTF 轉 PDF、影像轉 PDF以及更多其他格式轉換 -豐富的操作功能:提取文字和圖像、將 PDF 柵格化為圖像、編輯內容以及存取 PDF DOM。

今天如何開始?

請依照以下步驟開始產生 PDF 檔案:

1.安裝IronPDF :透過NuGet將其新增至您的.NET 10 專案中 2.嘗試基本範例:從簡單的 HTML 轉 PDF 轉換開始。 3.探索進階功能:新增表單、簽名、安全性設定 4.優化效能:實現快取、非同步和渲染器復用 5.部署到生產環境:選擇合適的託管策略

無論您是建立簡單的報告還是複雜的多頁文檔,IronPDF 直覺的 API 和強大的渲染引擎都使其成為.NET開發人員的實用選擇。 立即使用 IronPDF 的免費試用版,在您的ASP.NET Core應用程式中開始建立專業的 PDF 檔案。 準備好為您的應用程式添加 PDF 生成功能了嗎? 立即開始使用IronPDF ,體驗建立 PDF 的便利性。 如需更多學習資源,請瀏覽完整教學課程程式碼範例功能文件

常見問題解答

IronPDF 在 ASP.NET 應用程式中的主要功能是什麼?

IronPDF 讓開發人員在 ASP.NET 應用程式中輕鬆建立 PDF 文檔,從而簡化產生發票、報告和其他基於文檔的系統等任務。

在現代 Web 應用程式中,以程式設計方式建立 PDF 文件為何如此重要?

以程式設計方式建立 PDF 文件至關重要,因為它能夠為需要文件管理的應用程式(例如計費系統和資料報告)實現自動化和動態內容產生。

我可以在 .NET Core 環境中使用 IronPDF 產生 PDF 檔案嗎?

是的,IronPDF 是一個功能強大的 .NET Core 庫,專門用於簡化 PDF 生成,是 .NET Core 應用程式中創建 PDF 文件的理想選擇。

在 .NET Core 中使用 IronPDF 可以建立哪些類型的文件?

使用 IronPDF,您可以建立各種文檔,包括發票、報告以及任何需要有效產生 PDF 的基於文檔的系統。

哪裡可以找到更多關於使用 IronPDF 的技術細節?

有關使用 IronPDF 的全面技術細節,請參閱官方文檔,其中提供了逐步指導和實用技巧。

IronPDF 如何增強 ASP.NET 應用程式中的 PDF 產生功能?

IronPDF 透過提供一個強大的程式庫來增強 PDF 生成功能,該程式庫簡化了在 ASP.NET 應用程式中直接建立、操作和管理 PDF 文件的過程。

IronPDF 是否適合在 .NET Core 中建立基於文件的系統?

是的,IronPDF 非常適合在 .NET Core 中建立基於文件的系統,因為它提供了以程式設計方式產生和管理 PDF 的無縫方法。

在 .NET Core 中使用 IronPDF 建立 PDF 的最佳方法是什麼?

本教學探討了處理 PDF 建立的各種方法,重點介紹如何利用 IronPDF 的功能在 .NET Core 環境中有效地產生和管理 PDF 文件。

Curtis Chau
技術作家

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

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

鋼鐵支援團隊

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