QuestPDF是一款.NET开源的PDF文档生成器。在微信公众号上看到关于QuestPDF的文章,本文结合参考文献,对该包进行简单测试。
QuestPDF提供布局引擎,具备全面的分页功能。QuestPDF中的文档由众多简单元素构成(如边框、背景、图像、文本、边距、表格、网格等),能够构造复杂的文档结构。开发人员可以快速了解每类简单元素的用法,并能放心大胆地使用它们。此外,QuestPDF中的文档及其所有元素都支持分页功能。例如,一个元素可以移动到下一页(如果没有足够的空间),甚至可以在表的行之间分割。
本文先基于QuestPDF帮助文档中的示例进行简单测试,后续会逐步深入学习该包的用法。
创建Winform程序,并通过NuGet包管理器安装QuestPDF包,如下图所示:
基于参考文献2中给出的包含页眉、内容和页脚的示例,创建简单的界面,生成包含文本和图片的单页PDF文件(参考文献2中的示例中生成内容是写死的,本文示例的改动主要是能在窗口中输入内容和选择图片),示例代码和界面如下所示:
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Background(Colors.White);
page.DefaultTextStyle(x => x.FontSize(20));
page.Header()
.Text("QuestPDF测试")
.SemiBold().FontSize(36).FontColor(Colors.Blue.Medium);
page.Content()
.PaddingVertical(1, Unit.Centimetre)
.Column(x =>
{
x.Spacing(20);
x.Item().Text(textBox1.Text);
x.Item().Image(pictureBox1.Tag as string, ImageScaling.Resize);
});
page.Footer()
.AlignCenter()
.Text(x =>
{
x.Span("页码 ");
x.CurrentPageNumber();
});
});
})
.GeneratePdf("test.pdf");
程序运行结果如下所示,可以正常生成PDF文档,但是页眉和页脚中的中文没有正常显示。
查看代码中设置文本字体的代码,发现只设置了字体大小和颜色,字体采用的默认字体。QuestPDF设置字体是用FontFamily名称设置的,于是修改代码,采用宋体显示文本内容。不过程序运行过程中却报找不到宋体文件的错误,如下图所示:
page.Header()
.Text("QuestPDF测试")
.SemiBold().FontFamily("宋体").FontSize(36).FontColor(Colors.Blue.Medium);
仔细查看参考文献3中包含中文字体的示例代码,发现其设置黑体时使用的FontFamily名称是simhei,百度后才知道该名称是黑体字体对应的ttf文件名。于是到windows\Fonts文件夹下找到宋体的字体文件名,如下所示:
重新设置代码中的FontFamily名,在运行程序,即可生成显示正常的pdf文档,如下图所示:
page.Header()
.Text("QuestPDF测试")
.SemiBold().FontFamily("simsun").FontSize(36).FontColor(Colors.Blue.Medium);
本文只是结合参考文献中的示例代码,对QuestPDF功能进行了简单测试,后续还会继续深入学习QuestPDF包的用法
参考文献:
[1]https://github.com/QuestPDF/QuestPDF
[2]https://www.questpdf.com/getting-started.html
[3]https://blog.csdn.net/sd7o95o/article/details/125985863