当前位置:首页 > 技能相关 > .NET > 正文内容

QuestPDF 官方API文档

admin2年前 (2023-03-28).NET5830 修订时间:2023-03-28 15:19:39

介绍

QuestPDF 是一个用于生成 PDF 文档的开源 .NET 库。

它提供了一个布局引擎,设计时考虑了完整的分页支持。该文档由许多简单的元素(例如边框、背景、图像、文本、填充、表格、网格等)组成,这些元素组合在一起以创建更复杂的结构。这样,作为开发人员,您可以了解每个元素的行为并充满信心地使用它们。此外,文档及其所有元素都支持分页功能。例如,一个元素可以移动到下一页(如果没有足够的空间)或者甚至像表格的行一样在页面之间拆分。

与其他库不同,它不依赖于在许多情况下不可靠的 HTML 到 PDF 的转换。相反,它实现了自己的布局引擎,该引擎经过优化以涵盖所有与分页相关的要求。

快速入门

安装

该库以 NuGet 包的形式提供。您可以像从 IDE 中安装任何其他 NuGet 包一样安装它。

// 程序包管理器
Install-Package QuestPDF
// .NET CLI
dotnet add package QuestPDF
// .csproj文件中的包引用
<PackageReference Include="QuestPDF" Version="2022.12.1" />

示例

使用 QuestPDF 开始制作原型有多容易?由于其最小的 API,真的很容易!请分析下面的代码:

using System;
using System.Windows.Forms;
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;

namespace NETtoPDF
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
           Document.Create(container =>
           {
             container.Page(page =>
             {
              page.Size(PageSizes.A5);
              page.Margin(2, Unit.Centimetre);
              page.PageColor(Colors.White);
              page.DefaultTextStyle(x => x.FontSize(12).FontFamily("黑体"));
              page.Background().Image("D:\\VS2022\\NETtoPDF\\167979257449892.jpg");
              page.Header();
  
              page.Content()
                .PaddingVertical(1, Unit.Centimetre)
                .Column(x =>
                {
                  x.Spacing(20);
                  x.Item().Text("这是一个PDF文件").FontSize(26).FontColor(Colors.Blue.Medium);
                  x.Item().Text("这是使用QuestPDF NET组件生成的PDF文件,文件的大小可能会受到字体的样式影响。");
                  x.Item().Image("D:\\VS2022\\NETtoPDF\\167979257449892.jpg");
                });

              page.Footer()
                  .AlignCenter()
                .Text(x =>
                {
                  x.Span("当前页 ");
                  x.CurrentPageNumber();
                });
            });
          }).GeneratePdf("hello.pdf");

        }
    }
}

示例效果图:

image.png

视觉元素

Text

一般使用默认或自定义样式绘制文本,文本总是占用尽可能少的空间。如果文本字符串很长,则元素可能占据整个宽度并中断到下一行。此元素支持分页。

1、“文本”方法,如下所示:

//直接输出文字,需要文件配置默认的字体(中文)
.Text("这是一个PDF文件");
//设置字体颜色、大小
.Text("这是一个PDF文件").FontColor("#F00").FontSize(24)

2、“文本块”方法,如下所示:

//文本块方法
.Text(text =>
{
text.Span("关关雎鸠,在河之洲。");
//下划线
text.Span("窈窕淑女,君子好逑。").Underline();
});

3、基本字体样式

//字体颜色
x.Item().Text("测试字体基本样式").FontColor("#F00");
//字体格式
x.Item().Text("测试字体基本样式").FontFamily("黑体");
//字体字号
x.Item().Text("测试字体基本样式").FontSize(24);
//行间距
x.Item().Text("测试字体基本样式").LineHeight(1.5f);
//斜体
x.Item().Text("测试字体基本样式").Italic();
//字体背景色
x.Item().Text("测试字体基本样式").BackgroundColor("#f00");
//中划线
x.Item().Text("测试字体基本样式").Strikethrough();
//下划线
x.Item().Text("测试字体基本样式").Underline();
//下标
x.Item().Text(t =>
{
    t.Span("CM");
    t.Span("2").Subscript();

});
//上标
x.Item().Text(t =>
{
    t.Span("CM");
    t.Span("2").Superscript();

});

//字体排列方式

x.Item().Text(text =>
{
  //左对齐
  text.AlignLeft();
  //居中
  text.AlignCenter();
  //右对齐
  text.AlignRight();

  text.Span("Sample text");
});

4、定义默认字体样式

//用于文件页面默认样式设定
container.Page(page =>
{
   page.DefaultTextStyle(x => x.FontSize(12).FontFamily("黑体"));
});
//用于文本块默认样式设定
x.Item().Text(t =>
 {
     t.DefaultTextStyle(tt => tt.FontSize(12).FontFamily("黑体").FontColor(Colors.Blue.Medium));
     t.Line("第一行文本");
     t.Line("第二行文本").Underline();
 });

5、字体由细到粗

注意,并非所有字体都支持每种样式,QuestPDF将匹配最接近的可用样式

.Weight(FontWeight.Normal)
.Thin()
.ExtraLight()
.Light()
.NormalWeight()
.Medium()
.SemiBold()
.Bold()
.ExtraBold()
.Black()
.ExtraBlack()

6、一些特殊的用法

//设置样式
var highlight = TextStyle.Default.BackgroundColor(Colors.Green.Lighten3);
//赋值样式Text
Text.Span("E=mc").Style(highlight);

//换行
Text.EmptyLine();

//行与字母设置方式
.Column(column =>
{
        //设置间距数组
    var lineHeights = new[] { 0.8f, 1f, -1.5f };
        //遍历间距数组
    foreach (var lineHeight in lineHeights)
    {
        //行项目
        column
                //行项目
            .Item()
            //边框1
            .Border(1)
            //边距
            .Padding(10)
            //输出内容
            .Text("行内容")
            //字体大小
            .FontSize(16)
            //行间距,可以为负值
            .LineHeight(lineHeight)
            //字符间距,可以为负值
            .LetterSpacing(lineHeight);
    }
});

7、定义自定义样式类

public static class Typography
{
    public static TextStyle Title => TextStyle
        .Default
        .FontType("Helvetica")
        .FontColor(Colors.Black)
        .FontSize(20)
        .Bold();

    public static TextStyle Headline => TextStyle
        .Default
        .FontType("Helvetica")
        .FontColor(Colors.Blue.Medium)
        .FontSize(14);

    public static TextStyle Normal => TextStyle
        .Default
        .FontType("Helvetica")
        .FontColor("#000000")
        .FontSize(10)
        .LineHeight(1.25f)
        .AlignLeft();
}

然后,可以通过以下方式使用预定义的排版:

.Text("自定义的文本样式").Style(Typography.Headline)

Images

此元素可用于在文档中放置图像。

默认情况下,“图像”会保留图像的纵横比。

图像被加载到SkiaSharp.image对象中。请注意,所有限制都是派生的。例如,可用的图像格式可能因平台而异。

您可以使用任何常见光栅格式的图像,例如JPG、PNG、BMB等。

// 可以提供如下图像:
// 1) 二进制数组
byte[] imageData = File.ReadAllBytes("167979257449892.jpg");
x.Item().Image(imageData);

// 2) 文件名称
x.Item().Image("167979257449892.jpg");

// 3) 文件流
var stream = new FileStream("167979257449892.jpg", FileMode.Open);
x.Item().Image(stream);















 您阅读本篇文章共花了: 

免责声明
本站内容均为博客主本人日常使用记录的存档,如侵犯你的权益请联系:lifei@zaiheze.com 546262132@qq.com 沟通删除事宜。本站仅带访问端口形式使用,已杜绝搜索引擎爬取。

扫描二维码推送至手机访问。

版权声明:本文由LIFEI - blog发布,如需转载请注明出处。

本文链接:http://www.lifeiai.com/?id=300

分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。