How to Create a PDF in C#

This article was translated from English: Does it need improvement?
Translated
View the article in English

以编程方式创建 PDF 通常会带来重大挑战,无论是添加页眉和页脚,还是处理兼容性问题。 幸运的是,IronSoftware 通过将各种 PDF 创建功能整合为直观易懂的方法,简化了这一过程,使开发人员可以直接启动他们的项目。

使用 IronPDF,您可以无缝地添加形状、文本、图像、页眉和页脚。 您还可以灵活设置文档的方向、大小和元数据,并导出到 PDF/UA 和 PDF/A 等多个标准。 此外,将 IronPDF 集成到现有应用程序中以用于 PDF 查看或以编程方式打印文档非常简单。

在本教程中,我们将探索每个功能并展示 IronPDF 如何提升开发体验。 它可以让您创建可阅读和可重用的代码组件,这些组件可以部署在任何受支持的环境和平台上。

在本文结束时,您将对如何使用 IronPDF 创建符合您需求的风格化和独特的 PDF 拥有扎实的理解。

要开始安装 IronPDF 并按照本文所列的教程示例,请查看这个快速安装指南,它将帮助您顺利设置。

章节 2:快速入门:使用 IronPDF 创建您的第一个 PDF

仅需几行代码即可使用 IronPDF 在 C# 中轻松创建您的第一个 PDF。 本快速指南将向您展示如何初始化 PDF 文档、添加内容并保存它,从而确保新库开发人员的顺利开始。 在几秒钟内深入 PDF 创建并轻松扩展您的 C# 应用程序功能。

Nuget IconGet started making PDFs with NuGet now:

  1. Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf

  2. Copy and run this code snippet.

    new IronPdf.PdfDocument(500, 500).SaveAs("output.pdf");
  3. Deploy to test on your live environment

    Start using IronPDF in your project today with a free trial
    arrow pointer

目录

NuGet 使用 NuGet 安装

PM >  Install-Package IronPdf

IronPDF 上查看 NuGet 快速安装。超过 1000 万次下载,它正以 C# 改变 PDF 开发。 您也可以下载 DLLWindows 安装程序

设计您的完美 PDF

创建空白 PDF

使用 IronPDF 创建空白 PDF 既直观又简单,仅需几行代码。 我们首先初始化一个新的PdfDocument类,提供维度,然后调用SaveAs方法进行保存。

:path=/static-assets/pdf/content-code-examples/how-to/create-new-pdfs.cs
using IronPdf;

PdfDocument pdf = new PdfDocument(270, 270);

pdf.SaveAs("blankPage.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

有关此代码片段的更详细解释以及探索其附加功能,请参阅我们的综合如何指南

今天在您的项目中使用 IronPDF,免费试用。

第一步:
green arrow pointer

添加页眉和页脚

使用 IronPDF 轻松在 PDF 的顶部或底部添加页眉和页脚。 IronPDF 允许您添加两种类型的页眉和页脚。 TextHeaderFooter 适用于仅需文本的场景,例如通过字符串插值展示页码,比如"{page} of {total-pages}"。 与此同时,HtmlHeaderFooter 是一种更高级的变体,允许开发人员自定义他们放置的 HTML 内容。

有关此代码片段的更详细解释以及探索其附加功能,请参阅我们的综合如何指南

HTML 页眉和页脚

通过设置HtmlHeaderFooter对象,我们可以通过将页码放入<center>标签中并添加图像资产来自定义文本出现的位置,以确保文档独特。

:path=/static-assets/pdf/content-code-examples/how-to/headers-and-footers-htmlheaderfooter.cs
using IronPdf;

string headerHtml = @"
    <html>
    <head>
        <link rel='stylesheet' href='style.css'>
    </head>
    <body>
        <h1>This is a header!</h1>
    </body>
    </html>";

string footerHtml = @"
    <html>
    <head>
        <link rel='stylesheet' href='style.css'>
    </head>
    <body>
        <h1>This is a footer!</h1>
    </body>
    </html>";

// Instantiate renderer and create PDF
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>");

// Create header and footer
HtmlHeaderFooter htmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = headerHtml,
    LoadStylesAndCSSFromMainHtmlDocument = true,
};

HtmlHeaderFooter htmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = footerHtml,
    LoadStylesAndCSSFromMainHtmlDocument = true,
};

// Add to PDF
pdf.AddHtmlHeaders(htmlHeader);
pdf.AddHtmlFooters(htmlFooter);
Imports IronPdf

Private headerHtml As String = "
    <html>
    <head>
        <link rel='stylesheet' href='style.css'>
    </head>
    <body>
        <h1>This is a header!</h1>
    </body>
    </html>"

Private footerHtml As String = "
    <html>
    <head>
        <link rel='stylesheet' href='style.css'>
    </head>
    <body>
        <h1>This is a footer!</h1>
    </body>
    </html>"

' Instantiate renderer and create PDF
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>")

' Create header and footer
Private htmlHeader As New HtmlHeaderFooter With {
	.HtmlFragment = headerHtml,
	.LoadStylesAndCSSFromMainHtmlDocument = True
}

Private htmlFooter As New HtmlHeaderFooter With {
	.HtmlFragment = footerHtml,
	.LoadStylesAndCSSFromMainHtmlDocument = True
}

' Add to PDF
pdf.AddHtmlHeaders(htmlHeader)
pdf.AddHtmlFooters(htmlFooter)
$vbLabelText   $csharpLabel

有关此代码片段的更详细解释以及探索其附加功能,请参阅我们的综合如何指南

文本页眉和页脚

下面的示例使用TextHeaderFooter和占位符值来表示页码、URL 和日期。

:path=/static-assets/pdf/content-code-examples/how-to/headers-and-footers-add-textheaderfooter.cs
using IronPdf;

// Instantiate renderer and create PDF
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>");

// Create text header
TextHeaderFooter textHeader = new TextHeaderFooter
{
    CenterText = "This is the header!",
};

// Create text footer
TextHeaderFooter textFooter = new TextHeaderFooter
{
    CenterText = "This is the footer!",
};

// Add text header and footer to the PDF
pdf.AddTextHeaders(textHeader);
pdf.AddTextFooters(textFooter);

pdf.SaveAs("addTextHeaderFooter.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

除了上面显示的字段外,我们还提供如下占位符值,它们将在渲染时被替换:{page}{total-pages}{url}{date}{time}{html-title}{pdf-title}

有关此代码片段的更详细解释以及探索其附加功能,请参阅我们的综合如何指南

添加页码

与上面的示例类似,我们可以使用TextHeaderFooterHtmlHeaderFooter在页眉或页脚中显示页码,渲染文档时将显示。

:path=/static-assets/pdf/content-code-examples/how-to/page-numbers-basic.cs
using IronPdf;

// Create text header
TextHeaderFooter textHeader = new TextHeaderFooter()
{
    CenterText = "{page} of {total-pages}"
};

// Create html footer
HtmlHeaderFooter htmlFooter = new HtmlHeaderFooter()
{
    HtmlFragment = "<center><i>{page} of {total-pages}<i></center>"
};

// Render a new PDF
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>");

// Add header and footer
pdf.AddTextHeaders(textHeader);
pdf.AddHtmlFooters(htmlFooter);

pdf.SaveAs("pdfWithPageNumber.pdf");
Imports IronPdf

' Create text header
Private textHeader As New TextHeaderFooter() With {.CenterText = "{page} of {total-pages}"}

' Create html footer
Private htmlFooter As New HtmlHeaderFooter() With {.HtmlFragment = "<center><i>{page} of {total-pages}<i></center>"}

' Render a new PDF
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>")

' Add header and footer
pdf.AddTextHeaders(textHeader)
pdf.AddHtmlFooters(htmlFooter)

pdf.SaveAs("pdfWithPageNumber.pdf")
$vbLabelText   $csharpLabel

有关此代码片段的更详细解释以及探索其附加功能,请参阅我们的综合如何指南

使用 DataURIs 内嵌图像

有时候依赖资产目录过慢且低效,因此我们可以使用数据 URI 内嵌图像作为解决办法。 以下是关于如何做到这一点的简要代码示例。

:path=/static-assets/pdf/content-code-examples/how-to/datauris-image.cs
using IronPdf;
using System;

// Read byte from image file
var pngBinaryData = System.IO.File.ReadAllBytes("My_image.png");

// Convert bytes to base64
var ImgDataURI = @"data:image/png;base64," + Convert.ToBase64String(pngBinaryData);

// Import base64 to img tag
var ImgHtml = $"<img src='{ImgDataURI}'>";

ChromePdfRenderer Renderer = new ChromePdfRenderer();

// Render the HTML string
var pdf = Renderer.RenderHtmlAsPdf(ImgHtml);

pdf.SaveAs("datauri_example.pdf");
Imports IronPdf
Imports System

' Read byte from image file
Private pngBinaryData = System.IO.File.ReadAllBytes("My_image.png")

' Convert bytes to base64
Private ImgDataURI = "data:image/png;base64," & Convert.ToBase64String(pngBinaryData)

' Import base64 to img tag
Private ImgHtml = $"<img src='{ImgDataURI}'>"

Private Renderer As New ChromePdfRenderer()

' Render the HTML string
Private pdf = Renderer.RenderHtmlAsPdf(ImgHtml)

pdf.SaveAs("datauri_example.pdf")
$vbLabelText   $csharpLabel

有关此代码片段的更详细解释以及探索其附加功能,请参阅我们的综合如何指南

OpenAI for PDF

IronPDF 通过支持 OpenAI 模型用于快速摘要、查询和记忆,利用 Microsoft Semantic Kernel,提升了效率和可扩展性。 以下是如何使用 OpenAI 快速总结 PDF 内容的简要代码示例。

:path=/static-assets/pdf/content-code-examples/how-to/openai-summarize.cs
using IronPdf;
using IronPdf.AI;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using Microsoft.SemanticKernel.Memory;
using System;
using System.Threading.Tasks;

// Setup OpenAI
var azureEndpoint = "<<enter your azure endpoint here>>";
var apiKey = "<<enter your azure API key here>>";
var builder = Kernel.CreateBuilder()
    .AddAzureOpenAITextEmbeddingGeneration("oaiembed", azureEndpoint, apiKey)
    .AddAzureOpenAIChatCompletion("oaichat", azureEndpoint, apiKey);
var kernel = builder.Build();

// Setup Memory
var memory_builder = new MemoryBuilder()
    // optionally use new ChromaMemoryStore("http://127.0.0.1:8000") (see https://github.com/microsoft/semantic-kernel/blob/main/dotnet/notebooks/09-memory-with-chroma.ipynb)
    .WithMemoryStore(new VolatileMemoryStore())
    .WithAzureOpenAITextEmbeddingGeneration("oaiembed", azureEndpoint, apiKey);
var memory = memory_builder.Build();

// Initialize IronAI
IronDocumentAI.Initialize(kernel, memory);

License.LicenseKey = "<<enter your IronPdf license key here";

// Import PDF document
PdfDocument pdf = PdfDocument.FromFile("wikipedia.pdf");

// Summarize the document
Console.WriteLine("Please wait while I summarize the document...");
string summary = await pdf.Summarize(); // optionally pass AI instance or use AI instance directly
Console.WriteLine($"Document summary: {summary}\n\n");
Imports Microsoft.VisualBasic
Imports IronPdf
Imports IronPdf.AI
Imports Microsoft.SemanticKernel
Imports Microsoft.SemanticKernel.Connectors.OpenAI
Imports Microsoft.SemanticKernel.Memory
Imports System
Imports System.Threading.Tasks

' Setup OpenAI
Private azureEndpoint = "<<enter your azure endpoint here>>"
Private apiKey = "<<enter your azure API key here>>"
Private builder = Kernel.CreateBuilder().AddAzureOpenAITextEmbeddingGeneration("oaiembed", azureEndpoint, apiKey).AddAzureOpenAIChatCompletion("oaichat", azureEndpoint, apiKey)
Private kernel = builder.Build()

' Setup Memory
Private memory_builder = (New MemoryBuilder()).WithMemoryStore(New VolatileMemoryStore()).WithAzureOpenAITextEmbeddingGeneration("oaiembed", azureEndpoint, apiKey)
Private memory = memory_builder.Build()

' Initialize IronAI
IronDocumentAI.Initialize(kernel, memory)

License.LicenseKey = "<<enter your IronPdf license key here"

' Import PDF document
Dim pdf As PdfDocument = PdfDocument.FromFile("wikipedia.pdf")

' Summarize the document
Console.WriteLine("Please wait while I summarize the document...")
Dim summary As String = Await pdf.Summarize() ' optionally pass AI instance or use AI instance directly
Console.WriteLine($"Document summary: {summary}" & vbLf & vbLf)
$vbLabelText   $csharpLabel

有关此代码片段的更详细解释以及探索其附加功能,请参阅我们的综合如何指南

全面的 PDF 自定义

方向和旋转

方向

RenderingOptions 类的PaperOrientation属性允许您决定 PDF 的方向渲染方式。 在此示例中,我们将其设置为PdfPaperOrientation.Landscape以呈现 PDF 方向为横向模式。

:path=/static-assets/pdf/content-code-examples/tutorials/csharp-create-pdf-complete-1.cs

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Change paper orientation
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;

PdfDocument pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page");

pdf.SaveAs("landscape.pdf");
Dim renderer As New ChromePdfRenderer()

' Change paper orientation
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape

Dim pdf As PdfDocument = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page")

pdf.SaveAs("landscape.pdf")
$vbLabelText   $csharpLabel

旋转

要设置 PDF 页面的旋转,我们可以使用SetPageRotation方法,并使用PdfPageRotation枚举作为输入来旋转页面。

:path=/static-assets/pdf/content-code-examples/how-to/page-orientation-rotation-set-rotation.cs
using IronPdf;
using IronPdf.Rendering;
using System.Collections.Generic;

PdfDocument pdf = PdfDocument.FromFile("landscape.pdf");

// Set all pages
pdf.SetAllPageRotations(PdfPageRotation.Clockwise90);

// Set a single page
pdf.SetPageRotation(1, PdfPageRotation.Clockwise180);

// Set multiple pages
List<int> selectedPages = new List<int>() { 0, 3 };
pdf.SetPageRotations(selectedPages, PdfPageRotation.Clockwise270);

pdf.SaveAs("rotatedLandscape.pdf");
Imports IronPdf
Imports IronPdf.Rendering
Imports System.Collections.Generic

Private pdf As PdfDocument = PdfDocument.FromFile("landscape.pdf")

' Set all pages
pdf.SetAllPageRotations(PdfPageRotation.Clockwise90)

' Set a single page
pdf.SetPageRotation(1, PdfPageRotation.Clockwise180)

' Set multiple pages
Dim selectedPages As New List(Of Integer)() From {0, 3}
pdf.SetPageRotations(selectedPages, PdfPageRotation.Clockwise270)

pdf.SaveAs("rotatedLandscape.pdf")
$vbLabelText   $csharpLabel

有关设置 PDF 的方向和旋转的更详细解释以及探索其附加功能,请参阅我们的综合如何指南

自定义纸张大小

通过使用SetCustomPaperSizeinCentimeters方法设置widthheight来自定义 PDF 的尺寸。 IronPDF 还支持将尺寸设置为标准化尺寸,例如通过将PaperSize属性设置为一系列可用枚举来设置 A4。

有关此代码片段的更详细解释以及探索其附加功能,请参阅我们的综合如何指南

自定义纸张大小 in Cm

:path=/static-assets/pdf/content-code-examples/how-to/custom-paper-size-cm.cs
using IronPdf;

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Set custom paper size in cm
renderer.RenderingOptions.SetCustomPaperSizeinCentimeters(15, 15);

PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Custom Paper Size</h1>");

pdf.SaveAs("customPaperSize.pdf");
Imports IronPdf

Private renderer As New ChromePdfRenderer()

' Set custom paper size in cm
renderer.RenderingOptions.SetCustomPaperSizeinCentimeters(15, 15)

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Custom Paper Size</h1>")

pdf.SaveAs("customPaperSize.pdf")
$vbLabelText   $csharpLabel

标准纸张大小

在此示例中,我们还将PaperSize属性设置为PdfPaperSize.A4枚举。

:path=/static-assets/pdf/content-code-examples/how-to/custom-paper-size-standard-paper-size.cs
using IronPdf;
using IronPdf.Rendering;

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Set paper size to A4
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;

PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Standard Paper Size</h1>");

pdf.SaveAs("standardPaperSize.pdf");
Imports IronPdf
Imports IronPdf.Rendering

Private renderer As New ChromePdfRenderer()

' Set paper size to A4
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Standard Paper Size</h1>")

pdf.SaveAs("standardPaperSize.pdf")
$vbLabelText   $csharpLabel

有关支持的标准化尺寸列表,请点击此处

标准合规

在 C# 中导出 PDF/A 格式文档

使用SaveAsPdfUA方法创建和导出符合 PDF/UA 标准的 PDF。

:path=/static-assets/pdf/content-code-examples/how-to/pdfa-fromfile.cs
using IronPdf;

// Create a PdfDocument object or open any PDF File
PdfDocument pdf = PdfDocument.FromFile("wikipedia.pdf");

// Use the SaveAsPdfA method to save to file
pdf.SaveAsPdfA("pdf-a3-wikipedia.pdf", PdfAVersions.PdfA3b);
Imports IronPdf

' Create a PdfDocument object or open any PDF File
Private pdf As PdfDocument = PdfDocument.FromFile("wikipedia.pdf")

' Use the SaveAsPdfA method to save to file
pdf.SaveAsPdfA("pdf-a3-wikipedia.pdf", PdfAVersions.PdfA3b)
$vbLabelText   $csharpLabel

有关此代码片段的更详细解释以及探索其附加功能,请参阅我们的综合如何指南

在 C# 中导出 PDF/UA 格式文档

要在 C# 中将 PDF 转换为 PDF/A,我们也可以使用 IronPDf 库,它支持 PDF/A 的最新标准,确保您文件的完整性; 与上面的示例类似,我们调用SaveAsPdfA以 PDF/A 标准保存 PDF。

:path=/static-assets/pdf/content-code-examples/how-to/pdfua-fromfile.cs
using IronPdf;

// Open PDF File
PdfDocument pdf = PdfDocument.FromFile("wikipedia.pdf");

// Export as PDF/UA compliance PDF
pdf.SaveAsPdfUA("pdf-ua-wikipedia.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

有关此代码片段的更详细解释以及探索其附加功能,请参阅我们的综合如何指南

在此示例中,我们将 PDF 保存为 PDF/A-3 变体,使用枚举的PdfAVersions

有关支持的 PDF/A 版本的完整列表,请点击此处

结论

上面分享的简要示例展示了使用 IronPDF 创建 PDF 时可以解锁的卓越能力和突出功能。

如果您想请求一个功能或对 IronPDF 或许可有一般性问题,请联系我们的支持团队。 我们将非常乐意为您提供帮助。

常见问题解答

如何使用 IronPDF 在 C# 中创建 PDF 文档?

您可以通过初始化一个新的 PDF 文档对象并添加例如文本、图像和表格等内容,然后保存文件,来在 C# 中使用 IronPDF 创建 PDF 文档。

IronPDF 提供了哪些功能来编辑 PDF?

IronPDF 提供了用于编辑 PDF 的功能,包括添加水印、页眉、页脚和背景。它还支持合并、拆分和压缩 PDF。

我可以使用 IronPDF 将表单添加到 PDF 文档吗?

可以,IronPDF 允许您将交互式表单添加到 PDF 文档中。您可以创建表单字段,例如文本输入、复选框和单选按钮。

使用 IronPDF 可以用密码保护 PDF 吗?

当然可以,您可以使用 IronPDF 用密码保护您的 PDF 文档。它允许您设置用户和所有者密码,以控制访问和权限。

如何使用 IronPDF 向 PDF 应用水印?

要使用 IronPDF 应用水印,可以使用 PDF 编辑功能叠加文本或图像作为水印在 PDF 文档的每一页上。

IronPDF 可以压缩 PDF 文件以减小其大小吗?

可以,IronPDF 包含压缩 PDF 文件的功能,帮助减少文件大小同时保持质量,这对于存储和共享非常有用。

如何使用 IronPDF 向 PDF 添加页眉和页脚?

您可以通过指定要包含在每一页顶部或底部的文本或图像,使用 IronPDF 为您的 PDF 文档添加页眉和页脚。

IronPDF 是否支持 PDF 页面背景定制?

IronPDF 支持背景定制,允许您设置图像或颜色作为 PDF 页面背景,增强文档设计。

我可以使用 IronPDF 将 HTML 转换为 PDF 吗?

可以,IronPDF 提供将 HTML 转换为 PDF 的功能。您可以将包括 CSS 和 JavaScript 的复杂 HTML 内容渲染为 PDF 文档。

在 C# 项目中使用 IronPDF 的系统要求是什么?

IronPDF 兼容 .NET Framework 和 .NET Core。它需要 Windows、macOS 或 Linux 操作系统,并且与使用 Visual Studio 的 C# 项目无缝集成。

IronPDF 是否完全兼容 .NET 10?

是的——IronPDF 完全兼容 .NET 10。它可与最新的运行时环境无缝集成,充分利用 .NET 10 的性能改进和语言增强功能。它支持 Windows、macOS、Linux 和容器环境下的 .NET 版本 10、9、8、7、6、5、.NET Standard 2.0+ 和 .NET Framework 4.6.2+。

Curtis Chau
技术作家

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

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

准备开始了吗?
Nuget 下载 16,133,208 | 版本: 2025.11 刚刚发布