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 { /// /// 结业证书PDF文档生成类 /// /// /// 实现IDocument接口,用于生成A4大小的结业证书PDF文档 /// 包含证书标题、学员信息、课程名称、证书编号和发证日期等内容 /// public class CertificateDocument : IDocument { /// /// 证书数据模型 /// private readonly CertificateModel _model; /// /// 构造函数 /// /// 证书数据模型,包含生成证书所需的所有信息 public CertificateDocument(CertificateModel model) { _model = model; } /// /// 获取文档元数据 /// /// 返回默认的文档元数据 public DocumentMetadata GetMetadata() => DocumentMetadata.Default; /// /// 组合文档内容 /// /// 文档容器,用于构建PDF文档结构 /// /// 构建A4大小的证书页面,包含以下内容: /// 1. 证书标题 "结 业 证 书" /// 2. 学员姓名和课程完成信息 /// 3. 证书编号 /// 4. 发证日期 /// 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(); }); }); } } }