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

101 lines
3.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
});
});
}
}
}