跳至页脚内容
使用IRONPDF

C# PDFWriter 教程:在 .NET 中创建 PDF 文档

IronPDF 通过将 HTML 转换为 PDF 来简化在 C# 中创建 PDF 的过程,使开发人员能够以最少的代码生成专业的 PDF,避免手动定位或过多的样板代码。

过去,用 C# 编程方式创建 PDF 文档是一项挑战。 大多数 C# PDFWriter 解决方案都涉及复杂的 API 和大量的样板代码,仅仅是为了生成一个简单的PDF 文件。 如果你尝试过一些较老的开源库,你就会知道内存泄漏性能问题有多么令人沮丧。

IronPDF改变了这一切。 只需几行代码,即可创建 PDF 文档,添加新页面、段落、图像、标题和页码,并保存它们,而无需处理底层细节。 该库支持异步操作以提高性能,并支持多线程以进行批量处理。

在本文中,我们将向您展示如何使用 IronPDF 的文档对象ChromePdfRenderer和 PDF 生成方法,直接从 Visual Studio 在 .NET Framework 或 .NET Core 中创建专业的 PDF 文档。 到最后,你将能够生成自己的 PDF 文件,无论是简单的"Hello World"测试,还是带有自定义字体嵌入式图像的完整发票。

C# 中的 PDFWriter 是什么?

PDFWriter 是一个文档对象,允许开发人员以编程方式生成 PDF 文档、添加段落、图像、页眉并操作页面。 传统库通常需要手动定位、复杂的计算和明确的资源管理。 他们可能还会遇到国际语言UTF-8 支持方面的问题。

IronPDF 简化了这一切。 您可以使用 HTML 内容和 CSS,通过简单的代码,在熟悉的 C# 环境中(例如典型的控制台应用程序)或使用MemoryStream等标准类来创建 PDF 文档。 该库可自动处理字体字距调整元数据管理

有些库,如 iTextSharp,有一个名为PdfWriter类,但在 C# 中,术语 PDFWriter 通常指的是以编程方式生成 PDF 文档的任何组件或库。 如果您正在比较各种选项,请查看IronPDF 与 iText 的比较情况,或者查看与AsposeSyncfusionQuestPDF的比较,以获得详细的功能分析。

从低级操作转到高级生成可以提高生产力。 在 Visual Studio 或 IDE 中新建一个PdfDocument实例,即可用最少的代码创建 PDF 文件。 Chrome 渲染引擎确保每次都能实现像素级的完美输出,支持现代CSS 媒体类型响应式布局

如下所示,传统的 PDFWriter 库(如 iTextSharp)需要大量的样板代码,而 IronPDF 只需几行代码即可生成相同的 PDF 文档——速度更快、更简单、更不容易出错。 该库还提供自定义日志记录选项和原生异常处理,以便于调试。

如何在 C# 项目中安装 IronPDF?

开始使用 IronPDF 不到一分钟。 最简单的安装方法是使用 NuGet 包管理器:

Install-Package IronPdf

或者,在 Visual Studio 中:

1.在解决方案资源管理器中右键单击您的项目 2.选择 "管理 NuGet 软件包"。

  1. 搜索"IronPDF"
  2. 点击安装

有关特定平台的详细安装,请查看IronPDF 安装指南高级 NuGet 配置。 如果您要部署到AzureAzure FunctionsAWSAWS Lambda ,或者需要在 Docker 中运行 IronPDF ,我们针对每种环境都有专门的指南。 对于Linux 部署(包括Red Hat Enterprise Linux或基于 Intel 和 Apple Silicon 的macOS 安装),可能需要额外的依赖项。 您也可以使用Windows Installer进行手动安装。

如何使用 IronPDF 创建您的第一个 PDF?

与传统的 PDFWriter 实现不同,在 IronPDF 中,您不需要单独的 PDFWriter 类变量。 渲染器和PdfDocument对象在内部处理所有写入任务。 这里是一个完整的工作示例:

using IronPdf;
// Instantiate the PDF renderer
var renderer = new ChromePdfRenderer();
// Create PDF from HTML string
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is my first PDF!</p>");
// Save the PDF
pdf.SaveAs("output.pdf");
using IronPdf;
// Instantiate the PDF renderer
var renderer = new ChromePdfRenderer();
// Create PDF from HTML string
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is my first PDF!</p>");
// Save the PDF
pdf.SaveAs("output.pdf");
$vbLabelText   $csharpLabel

ChromePdfRenderer在内部处理所有复杂性,将您的内容以像素级精度渲染到新文档中。 如果您需要处理流而不是文件,或者需要从内存加载 PDF进行处理,也可以将 PDF 导出到内存

// Save to MemoryStream instead of file
using (var ms = pdf.Stream)
{
    // Use the stream as needed
    byte[] pdfBytes = ms.ToArray();
}
// Save to MemoryStream instead of file
using (var ms = pdf.Stream)
{
    // Use the stream as needed
    byte[] pdfBytes = ms.ToArray();
}
$vbLabelText   $csharpLabel

您还可以将 PDF 文件保存为不同的格式,例如用于存档的 PDF/A 格式用于辅助功能的 PDF/UA 格式,或具有特定PDF 版本兼容性的格式

// Save as PDF/A-3b for long-term archival
pdf.SaveAsPdfA("archived-document.pdf");

// Convert to linearized PDF for fast web viewing
pdf.SaveAsLinearized("web-improve.pdf");
// Save as PDF/A-3b for long-term archival
pdf.SaveAsPdfA("archived-document.pdf");

// Convert to linearized PDF for fast web viewing
pdf.SaveAsLinearized("web-improve.pdf");
$vbLabelText   $csharpLabel

注意:只需几行代码,即可轻松添加图像、新页面、标题和段落,使用 IronPDF 的方法和文档对象功能。 该库支持嵌入式资源的base64 编码和内联图像的数据 URI

如何将HTML转换为PDF文档?

IronPDF 的真正力量在于生成复杂的 PDF 文档。 无论是将现有网页中的HTML 转换为 PDF ,还是创建动态报告,HTML 到 PDF 的转换都能保持完全的保真度。 该库支持Bootstrap 和 Flexbox CSSSVG 图形WebGL 内容

// Convert a URL to PDF
var urlPdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_55___");
urlPdf.SaveAs("website.pdf");
// Convert an HTML file with IronPDF's PDF writer
var filePdf = renderer.RenderHtmlFileAsPdf("example-invoice.html");
filePdf.SaveAs("invoice.pdf");
// Use advanced rendering options for your C# PDF generator
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Environment;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(500); // Wait for dynamic content
// Convert a URL to PDF
var urlPdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_55___");
urlPdf.SaveAs("website.pdf");
// Convert an HTML file with IronPDF's PDF writer
var filePdf = renderer.RenderHtmlFileAsPdf("example-invoice.html");
filePdf.SaveAs("invoice.pdf");
// Use advanced rendering options for your C# PDF generator
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Environment;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(500); // Wait for dynamic content
$vbLabelText   $csharpLabel

渲染器支持完整的 CSS3、JavaScript 执行和响应式布局。 这样可以确保您的PDF文件看起来完全符合预期。 有关渲染选项的更多详细信息,请参阅IronPDF 文档。 您还可以轻松转换 HTML 文件HTML 字符串,甚至HTML ZIP 文件

对于需要身份验证的网站,IronPDF 支持TLS 网站和系统登录以及Kerberos 身份验证。 您可以为 API 访问添加自定义 HTTP 请求标头JavaScript 渲染功能可确保动态内容正确渲染,并支持自定义渲染延迟JavaScript 消息监听器以应对高级场景。

HTML文件输出是什么样的?

分屏视图,左侧显示 HTML 发票模板代码,右侧显示生成的 PDF 预览,演示 HTML 到 PDF 的转换。

如何使用 IronPDF 生成真实世界的 PDF 文档?

在 C# 中生成实际的 PDF 通常涉及动态数据。 以下是如何使用 IronPDF 的PDF 创建 API创建专业发票的方法。 以下代码演示了如何使用自定义纸张尺寸高级格式生成 PDF 报告

string invoiceHtml = $@"
    <html>
    <head>
        <style>
            body {{ font-family: Arial; }}
            .header {{ background: #f0f0f0; padding: 20px; }}
            .total {{ font-weight: bold; font-size: 18px; }}
        </style>
    </head>
    <body>
        <div class='header'>
            <h1>Invoice #{invoiceNumber}</h1>
            <p>Date: {DateTime.Now:yyyy-MM-dd}</p>
        </div>
        <table>
            <tr><td>Product</td><td>Quantity</td><td>Price</td></tr>
            {GenerateLineItems()}
        </table>
        <p class='total'>Total: ${totalAmount:F2}</p>
    </body>
    </html>";
// Use IronPDF's C# PDF writer to create the document
var invoicePdf = renderer.RenderHtmlAsPdf(invoiceHtml);
// Apply digital signature for authenticity
invoicePdf.Sign(new PdfSignature("cert.pfx", "password"));
invoicePdf.SaveAs($"invoice-{invoiceNumber}.pdf");
string invoiceHtml = $@"
    <html>
    <head>
        <style>
            body {{ font-family: Arial; }}
            .header {{ background: #f0f0f0; padding: 20px; }}
            .total {{ font-weight: bold; font-size: 18px; }}
        </style>
    </head>
    <body>
        <div class='header'>
            <h1>Invoice #{invoiceNumber}</h1>
            <p>Date: {DateTime.Now:yyyy-MM-dd}</p>
        </div>
        <table>
            <tr><td>Product</td><td>Quantity</td><td>Price</td></tr>
            {GenerateLineItems()}
        </table>
        <p class='total'>Total: ${totalAmount:F2}</p>
    </body>
    </html>";
// Use IronPDF's C# PDF writer to create the document
var invoicePdf = renderer.RenderHtmlAsPdf(invoiceHtml);
// Apply digital signature for authenticity
invoicePdf.Sign(new PdfSignature("cert.pfx", "password"));
invoicePdf.SaveAs($"invoice-{invoiceNumber}.pdf");
$vbLabelText   $csharpLabel

这种方法结合了 HTML 模板的灵活性和 PDF 输出的可靠性,非常适合生成发票、报告、证书和其他业务文档。 了解更多关于在 ASP.NET 中创建 PDF 报告的信息。 您甚至可以在 MVC 应用程序中将CSHTML 转换为 PDF ,使用Razor Pages进行动态内容生成,或者以无头方式渲染 CSHTML以进行服务器端处理。 对于Blazor 应用程序,IronPDF 提供流畅的集成。

生成的发票是什么样子的?

生成的 PDF 发票截图,显示发票编号 12345,包含示例产品条目和总金额 250.75 美元

哪些高级功能可以提升您的 PDFWriter 性能?

IronPDF 不仅限于基本的 PDF 创建,还提供企业级功能:

页眉和页脚:使用HtmlHeaderFooter添加页码和品牌标识,支持经典文本页眉基于 HTML 的页眉。 数字签名:使用加密签名保护文档,包括HSM 签名修订历史记录 水印:使用ApplyStamp()添加图像或自定义文本水印,支持多个水印新的内容水印。 加密:使用密码保护PDF解密功能保护敏感内容 表单字段:创建带有交互元素的可填写 PDF 表单编辑现有表单 页面操作:轻松合并拆分创建自定义页面尺寸旋转页面

这是一个向您的 C# PDF 文档添加带页码的页眉的实际示例:

// Configure headers for your .NET PDF writer
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = "<div style='text-align:center'>Annual Report 2024</div>",
    MaxHeight = 25
};
// Add page numbers to PDF programmatically
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
    HtmlFragment = "<div style='text-align:center'>Page {page} of {total-pages}</div>",
    MaxHeight = 20
};
// Add watermark for draft documents
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
    DrawDividerLine = true,
    LeftText = "CONFIDENTIAL",
    RightText = "{date} {time}"
};
// Configure headers for your .NET PDF writer
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = "<div style='text-align:center'>Annual Report 2024</div>",
    MaxHeight = 25
};
// Add page numbers to PDF programmatically
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
    HtmlFragment = "<div style='text-align:center'>Page {page} of {total-pages}</div>",
    MaxHeight = 20
};
// Add watermark for draft documents
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
    DrawDividerLine = true,
    LeftText = "CONFIDENTIAL",
    RightText = "{date} {time}"
};
$vbLabelText   $csharpLabel

为了更好地控制文档布局,您可以设置自定义边距、定义自定义纸张尺寸或调整页面方向目录功能会自动为较长的文档生成导航。 您还可以转换 PDF 页面绘制线条和矩形,或者直接向现有 PDF添加文本和位图

使用此功能,您可以生成带有页脚页码和自定义页眉的 PDF 文件。 为了演示,我将从 HTML 字符串创建一个简单的多页 PDF,以演示HTML 到 PDF 的分页符页码格式

// Generate long HTML content to create multiple pages for demonstration
// Multi-page HTML with explicit page breaks
string multiPageHtml = "";
for (int i = 1; i <= 5; i++) // 5 pages
{
    multiPageHtml += $@"
            <div style='page-break-after: always;'>
                <h1>Section {i}</h1>
                <p>This is section {i} of the report. Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
                This content will appear on its own page thanks to the CSS page-break.</p>
            </div>";
}
//render HTML string a PDF
var multipagePdf = renderer.RenderHtmlAsPdf(multiPageHtml);
//save PDF
multipagePdf.SaveAs("multiPageReport.pdf");
// Generate long HTML content to create multiple pages for demonstration
// Multi-page HTML with explicit page breaks
string multiPageHtml = "";
for (int i = 1; i <= 5; i++) // 5 pages
{
    multiPageHtml += $@"
            <div style='page-break-after: always;'>
                <h1>Section {i}</h1>
                <p>This is section {i} of the report. Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
                This content will appear on its own page thanks to the CSS page-break.</p>
            </div>";
}
//render HTML string a PDF
var multipagePdf = renderer.RenderHtmlAsPdf(multiPageHtml);
//save PDF
multipagePdf.SaveAs("multiPageReport.pdf");
$vbLabelText   $csharpLabel

其他功能包括PDF 安全清理PDF 扁平化(使表单不可编辑)和线性化(实现快速网页浏览)。 您还可以使用PDF DOM 对象缩放 PDF 对象平移 PDF 对象以进行精确控制。

如需进行更多自定义,您可以添加文本和图像印章合并或拆分 PDF ,甚至可以从现有 PDF 中提取文本和图像。 该库还支持UTF-8 和国际语言,使其适用于全球应用。 对于特定格式,您可以将XML 转换为 PDFMarkdown 转换为 PDFRTF 转换为 PDFDOCX 转换为 PDF

最终PDF文件中页码是如何显示的?

! PDF 查看器显示"MultiPageReport.pdf"的两页展开图,第 1 部分和第 2 部分标题包含 Lorem ipsum 文本,以 75% 的缩放比例显示。

为什么选择 IronPDF 来满足您的 C# PDF 生成需求?

IronPDF 使在 C# 中生成 PDF 变得直观且可靠。 你不需要专门的PdfWriter类; 相反,渲染器和PdfDocument对象会处理从 HTML 内容到页面大小、页眉和页脚的一切。 无论您是创建发票、报告还是证书以集成到 Microsoft Office 中,IronPDF 都能帮助您仅用几行代码完成这项工作。 该库支持高容量场景的并行处理和响应式应用程序的异步操作

凭借完整的文档、强大的支持选项(包括工程支持)和免费试用版,入门非常简单。 您可以轻松地试验新的 PDF 文档,添加图像或调整字体大小和页面布局而不费力。 IronPDF 将 PDF 创建从一项技术任务变成了一个顺畅、高效的工作流程。 该库提供演示来展示其功能,并提供针对复杂场景的教程

该库擅长常见任务,例如将图像转换为 PDF(包括多帧 TIFF 支持) 、处理响应式 CSS以及支持Web 字体和图标。 为了进行调试,您可以使用 Chrome 调试 HTML ,以确保输出完美无误。 高级功能包括用于智能 PDF 处理的OpenAI 集成Azure Blob 存储支持以及用于物理输出的打印功能

对于部署,IronPDF 提供了IIS 配置ClickOnce 部署软件安装程序集成的指南。 该库还支持MAUI 应用程序Android 部署,适用于移动场景。

立即开始使用 IronPDF。
green arrow pointer

准备好现代化您的 C# PDF writer 工作流程了吗? 开始您的免费试用并体验IronPDF如何简化 .NET 中的 PDF 创建。 凭借完整的文档API 参考和快速响应的支持,您将在几分钟内(而不是几小时)生成专业的 PDF 文件。 查看我们的更新日志,了解最新更新和即将推出的功能里程碑

立即使用IronPDF革新您的文档创建方式,加入数千名已使用 C# 生成现代 PDF 的开发人员的行列。 无论您是使用VB.NETF#还是Blazor ,IronPDF 都能满足您的需求。

常见问题解答

什么是C# PDFWriter?

C# PDFWriter是一种允许开发人员使用C#编程语言以编程方式创建PDF文档的工具。

为什么开发人员应该选择C# PDFWriter?

开发人员应该选择C# PDFWriter,因为它简化了创建PDF的过程,减少了对复杂API和样板代码的需求。

IronPDF如何增强C#中的PDF创建?

IronPDF提供了一个简化的API,使开发人员更容易在他们的C#应用程序中生成、操作和自定义PDF文档。

旧版开源库存在哪些挑战?

旧版开源库通常具有复杂的API,需要大量样板代码,使PDF创建变得繁琐且耗时。

IronPDF能否处理复杂的PDF创建任务?

是的,IronPDF被设计成可以高效地处理简单和复杂的PDF创建任务,提供了大量的自定义和自动化功能。

使用IronPDF相对于其他PDF库有什么好处?

IronPDF提供了用户友好的API,全面的文档和强大的功能,减少了开发时间并提高了PDF输出的质量。

IronPDF适合C#开发的初学者吗?

是的,IronPDF适合初学者,因为它通过简单的代码示例和广泛的支持资源简化了PDF的创建。

IronPDF如何与.NET应用程序集成?

IronPDF与.NET应用程序无缝集成,允许开发人员在他们的项目中直接使用C#来整合PDF功能。

开发人员使用IronPDF可获得什么支持?

使用IronPDF的开发人员可以获得全面的文档、社区论坛和技术支持,以帮助解决任何开发挑战。

IronPDF可用于网络和桌面应用程序吗?

是的,IronPDF可以用于网络和桌面应用程序,提供了在不同平台上生成和管理PDF的灵活性。

IronPDF 是否支持最新的 .NET 10 版本?

是的,IronPDF 完全支持 .NET 10,以及 .NET 9、.NET 8、.NET 7、.NET 6、.NET Core 和 .NET Framework,使开发人员能够在现代 .NET 10 应用程序中使用 C# PDFWriter 和相关 API。

Curtis Chau
技术作家

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

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