C# QuestPDF
最后修改于 2023 年 7 月 5 日
在本文中,我们将展示如何使用 QuestPDF 库创建 PDF 文档。
可移植文档格式 (PDF) 是一种由 Adobe 创建的通用文件格式,它为人们提供了一种简单可靠的方式来呈现和交换文档。
QuestPDF 是一个用于 PDF 生成的开源 .NET 库。该库使用 Skia 进行渲染。 QuestPDF 使用 Fluent API。
C# QuestPDF 简单示例
以下示例创建一个简单的 PDF 文件。
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
var doc = Document.Create(container => container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.DefaultTextStyle(x => x.FontSize(12));
page.Content()
.Column(x => x.Item().Text(Placeholders.Paragraph()));
}));
doc.GeneratePdf("simple.pdf");
PDF 文档包含一段文本。
using QuestPDF.Fluent; using QuestPDF.Helpers; using QuestPDF.Infrastructure;
我们导入 QuestPDF 类型。
var doc = Document.Create(container => container.Page(page =>
该文档使用 Document.Create 创建。 使用 Page 添加新页面。
page.Size(PageSizes.A4); page.Margin(2, Unit.Centimetre); page.DefaultTextStyle(x => x.FontSize(12));
我们设置页面的基本属性:页面大小、边距和默认字体大小。
page.Content()
.Column(x => x.Item().Text(Placeholders.Paragraph()));
内容使用 Content 添加。 它由一列文本组成。 在该列中,我们添加一个文本项。 Placeholders.Paragraph 创建一个 lorem impsum 文本段落。
doc.GeneratePdf("simple.pdf");
PDF 使用 GeneratePdf 生成。
C# QuestPDF 文本
在下一个示例中,我们将使用各种文本属性。
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
var doc = Document.Create(container => container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content()
.Column(x =>
{
x.Item().Text(Placeholders.Sentence());
x.Spacing(10);
x.Item().Text(Placeholders.Sentence()).FontSize(15);
x.Spacing(10);
x.Item().Text(Placeholders.LoremIpsum());
x.Spacing(10);
x.Item().Text(Placeholders.Paragraph()).FontFamily("Georgia");
x.Spacing(10);
x.Item().Text(Placeholders.Sentence()).FontColor(Colors.Blue.Darken3);
x.Spacing(10);
x.Item().Text(txt =>
{
txt.Span("C# ").Italic();
txt.Span("is a modern, object-oriented, and type-safe programming language.");
});
});
}));
doc.GeneratePdf("text.pdf");
在该程序中,我们利用 Sentence、Paragraph、LoremIpsum 辅助方法来生成一些填充文本。
x.Item().Text(Placeholders.Sentence()); x.Spacing(10); x.Item().Text(Placeholders.Sentence()).FontSize(15);
我们添加两个句子。 使用 Spacing 在它们之间添加间距。 FontSize 设置句子的字体大小。
x.Item().Text(Placeholders.Paragraph()).FontFamily("Georgia");
对于此段落,我们选择 Georgia 字体。
x.Item().Text(Placeholders.Sentence()).FontColor(Colors.Blue.Darken3);
对于这个句子,我们选择深蓝色字体颜色。
x.Item().Text(txt =>
{
txt.Span("C# ").Italic();
txt.Span("is a modern, object-oriented, and type-safe programming language.");
});
使用 Span,我们可以更改文本项的属性。 我们为第一个文本跨度设置斜体样式。
C# QuestPDF 标题 & 页脚
对于下一个文档,我们添加标题和页脚。
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
var doc = Document.Create(container => container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Header()
.Text("My header")
.SemiBold().FontSize(24).FontColor(Colors.Blue.Medium);
page.Content()
.PaddingVertical(1, Unit.Centimetre)
.Column(x =>
{
x.Item().Text(Placeholders.LoremIpsum());
x.Spacing(20);
x.Item().Text(Placeholders.LoremIpsum());
});
page.Footer()
.Text(x =>
{
x.Span("Page ");
x.CurrentPageNumber();
});
}));
doc.GeneratePdf("headfoot.pdf");
文档包含三个部分:标题、内容和页脚。
page.Header()
.Text("My header")
.SemiBold().FontSize(24).FontColor(Colors.Blue.Medium);
使用 Header 添加标题。 我们使用 SemiBold 更改字体粗细,使用 FontSize 更改字体大小,并使用 FontColor 更改字体颜色。
page.Content()
.PaddingVertical(1, Unit.Centimetre)
.Column(x =>
{
x.Item().Text(Placeholders.LoremIpsum());
x.Spacing(20);
x.Item().Text(Placeholders.LoremIpsum());
});
页面内容使用 Content 添加。 我们添加两个段落并在它们之间添加一个间距。
page.Footer()
.Text(x =>
{
x.Span("Page ");
x.CurrentPageNumber();
});
最后,我们使用 Footer 添加页脚。 它包含当前页码。
C# QuestPDF 线条
在下一个示例中,我们向页面添加一些水平线。
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
var doc = Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content()
.Column(x =>
{
x.Item().Text(Placeholders.Paragraph());
x.Item().PaddingVertical(5).LineHorizontal(1);
x.Item().Text(Placeholders.Paragraph());
x.Item().PaddingVertical(5).LineHorizontal(1).LineColor(Colors.LightBlue.Darken3);
x.Item().Text(Placeholders.Paragraph());
x.Item().PaddingVertical(5).LineHorizontal(2);
x.Item().Text(Placeholders.Paragraph());
});
});
});
doc.GeneratePdf("lines.pdf");
在该程序中,我们在段落之间添加三行。
x.Item().PaddingVertical(5).LineHorizontal(1);
我们有一条宽度为 1 的水平线,带有一些垂直内边距。
x.Item().PaddingVertical(5).LineHorizontal(1).LineColor(Colors.LightBlue.Darken3);
我们可以使用 LineColor 更改线条的颜色。
x.Item().PaddingVertical(5).LineHorizontal(2);
在这里,我们使线条更粗。
C# QuestPDF 边框
在下一个示例中,我们添加一些边框。
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
Action<IDocumentContainer> container = (container) => container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content()
.Column(x =>
{
x.Item().Border(1).Padding(5).Text(Placeholders.Paragraph());
x.Item().Border(1).Padding(5).Text(Placeholders.Paragraph());
x.Item().Border(1).Padding(5).Text(Placeholders.Paragraph());
});
});
var doc = Document.Create(container);
doc.GeneratePdf("borders.pdf");
我们有三个文本段落。 我们在这些段落周围放置一些边框。
x.Item().Border(1).Padding(5).Text(Placeholders.Paragraph());
我们使用 Border 添加边框,并使用 Padding 添加一些内边距。
C# QuestPDF 表格
下一个示例在 PDF 文档中生成一个表格。
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
var fonts = new[]
{
Fonts.Calibri,
Fonts.Georgia,
Fonts.Arial,
Fonts.TimesNewRoman,
Fonts.Consolas,
Fonts.Tahoma,
Fonts.Verdana,
Fonts.Trebuchet,
Fonts.ComicSans
};
var doc = Document.Create(container => container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content()
.Column(x => x.Item().Table(table =>
{
table.ColumnsDefinition(cols =>
{
cols.ConstantColumn(150);
cols.ConstantColumn(150);
});
table.ExtendLastCellsToTableBottom();
foreach (var font in fonts)
{
table.Cell().MinWidth(120).Border(1).Padding(5).Text(font).FontFamily(font);
}
}));
}));
doc.GeneratePdf("table.pdf");
该表有两列,并以各种字体系列显示文本。
page.Content()
.Column(x => x.Item().Table(table =>
{
使用 Table 添加表格。
table.ColumnsDefinition(cols =>
{
cols.ConstantColumn(150);
cols.ConstantColumn(150);
});
我们定义两个固定宽度的表格列。
table.ExtendLastCellsToTableBottom();
如果单元格不均匀,则最后一个单元格会放大到表格的底部。
foreach (var font in fonts)
{
table.Cell().MinWidth(120).Border(1).Padding(5).Text(font).FontFamily(font);
}
在 foreach 循环中,我们将 fonts 数组的项添加到表格中。 使用 cell 添加一个新单元格。 我们设置其最小宽度、边框、内边距、内容和字体系列。
来源
在本文中,我们介绍了 QuestPDF 库。 我们展示了如何生成简单的 PDF 文档。
作者
列出所有 C# 教程。