YD_Event.Admin/YD_Event.Core/Certificate/CertificateDocument.cs

101 lines
3.4 KiB
C#
Raw Normal View History

2025-12-27 12:53:54 +08:00
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();
});
});
}
}
}