跳至页脚内容
使用IRONPDF

如何在 C# 中动态生成 PDF

现代网页应用程序需要的不仅仅是静态文档创建。 无论是生成个性化发票、创建数据驱动的PDF报告,还是制作定制化的表单字段,开发人员都需要强大的工具来在运行时生成PDF文档。IronPDF成为领先的解决方案,提供强大的基于Chrome的渲染功能,可以创建PDF文档,并与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内容,先使用循环动态生成HTML,然后再进行PDF转换。 探索更多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分页破坏属性来控制分页,确保每个客户的报告都在新页面上开始。 查看异步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设计使其优于内置类或复杂水晶报表实现。

如何在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 框架的无缝集成,以此来帮助。

为什么要使用 IronPDF 进行 PDF 生成?

IronPDF 是动态生成 PDF 的领先解决方案,因为它强大的基于 Chrome 的渲染引擎确保了高质量的输出。它与 C# 和 .NET 框架无缝集成,使其成为现代 web 应用程序的理想选择。

IronPDF 如何支持 C# 开发人员?

IronPDF 通过提供一整套动态 PDF 生成功能来支持 C# 开发人员,包括在 C# 环境中创建个性化发票、数据驱动报告和自定义表单字段。

IronPDF 中基于 Chrome 的渲染的优势是什么?

IronPDF 中的基于 Chrome 的渲染提供了高保真 PDF 文档,保持复杂布局和样式的完整性,确保生成的 PDF 在不同环境中保持一致。

IronPDF 能从 HTML 内容生成 PDF 吗?

是的,IronPDF 能从 HTML 内容生成 PDF,允许开发人员将网页、HTML 字符串或模板转换为专业质量的 PDF 文档。

IronPDF 与 .NET 框架兼容吗?

IronPDF 与 .NET 框架完全兼容,对于在此环境中工作以动态生成 PDF 的开发人员来说是一个多功能工具。

可以使用IronPDF创建哪些类型的文档?

使用 IronPDF,开发人员可以创建广泛的文档,包括个性化发票、数据驱动报告和自定义表单字段,这些都从 C# 应用程序动态生成。

IronPDF 支持多语言 PDF 吗?

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

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。