101 lines
3.4 KiB
C#
101 lines
3.4 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using QuestPDF.Fluent;
|
||
using QuestPDF.Helpers;
|
||
using QuestPDF.Infrastructure;
|
||
|
||
namespace YD_Event.Core.Certificate
|
||
{
|
||
/// <summary>
|
||
/// 结业证书PDF文档生成类
|
||
/// </summary>
|
||
/// <remarks>
|
||
/// 实现IDocument接口,用于生成A4大小的结业证书PDF文档
|
||
/// 包含证书标题、学员信息、课程名称、证书编号和发证日期等内容
|
||
/// </remarks>
|
||
public class CertificateDocument : IDocument
|
||
{
|
||
/// <summary>
|
||
/// 证书数据模型
|
||
/// </summary>
|
||
private readonly CertificateModel _model;
|
||
|
||
/// <summary>
|
||
/// 构造函数
|
||
/// </summary>
|
||
/// <param name="model">证书数据模型,包含生成证书所需的所有信息</param>
|
||
public CertificateDocument(CertificateModel model)
|
||
{
|
||
_model = model;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取文档元数据
|
||
/// </summary>
|
||
/// <returns>返回默认的文档元数据</returns>
|
||
public DocumentMetadata GetMetadata() => DocumentMetadata.Default;
|
||
|
||
/// <summary>
|
||
/// 组合文档内容
|
||
/// </summary>
|
||
/// <param name="container">文档容器,用于构建PDF文档结构</param>
|
||
/// <remarks>
|
||
/// 构建A4大小的证书页面,包含以下内容:
|
||
/// 1. 证书标题 "结 业 证 书"
|
||
/// 2. 学员姓名和课程完成信息
|
||
/// 3. 证书编号
|
||
/// 4. 发证日期
|
||
/// </remarks>
|
||
public void Compose(IDocumentContainer container)
|
||
{
|
||
container.Page(page =>
|
||
{
|
||
// 设置页面大小为A4
|
||
page.Size(PageSizes.A4);
|
||
// 设置页面边距为40
|
||
page.Margin(40);
|
||
// 设置默认字体为思源黑体
|
||
page.DefaultTextStyle(x => x.FontFamily("Source Han Sans CN"));
|
||
|
||
// 构建页面内容,使用列布局
|
||
page.Content().Column(column =>
|
||
{
|
||
// 设置列项间距为20
|
||
column.Spacing(20);
|
||
|
||
// 添加证书标题
|
||
column.Item().AlignCenter().Text("结 业 证 书")
|
||
.FontSize(32) // 设置字体大小为32
|
||
.Bold(); // 设置为粗体
|
||
|
||
// 添加学员姓名信息
|
||
column.Item().PaddingTop(40)
|
||
.Text($"兹证明 {_model.UserName}")
|
||
.FontSize(18)
|
||
.AlignCenter();
|
||
|
||
// 添加课程完成信息
|
||
column.Item()
|
||
.Text($"已完成《{_model.CourseName}》课程")
|
||
.FontSize(18)
|
||
.AlignCenter();
|
||
|
||
// 添加证书编号
|
||
column.Item().PaddingTop(20)
|
||
.Text($"证书编号:{_model.CertificateNo}")
|
||
.FontSize(12)
|
||
.AlignCenter();
|
||
|
||
// 添加发证日期,右对齐
|
||
column.Item().PaddingTop(40)
|
||
.Text($"发证日期:{_model.IssueDate:yyyy年MM月dd日}")
|
||
.AlignRight();
|
||
});
|
||
});
|
||
}
|
||
}
|
||
}
|