# 证书模板管理说明 ## 当前模板 系统内置两套模板: - `classic`:经典结业证书,动态填写姓名、课程名称、阶段名称、课程起止日期和发证日期。 - `practice-camp`:实修大本营结业证书,只动态填写姓名、课程开始日期、课程结束日期和发证日期。 模板定义集中在 `app/services/certificate_templates.py`,底图位于 `app/assets/`,文字坐标和绘制逻辑位于 `app/services/pdf.py`。 ## 后台流程 1. 在“证书模板”查看可用模板和动态字段。 2. 在“项目管理”为项目配置默认模板。 3. 单张创建证书时,系统自动采用项目默认模板,管理员可以在提交前切换。 4. Excel 导入时先选择本批次模板,再上传文件;确认导入后整批证书固化为所选模板。 5. 证书创建后保存 `template_code`,以后修改项目默认模板不会改变历史证书。 ## 增加新模板 1. 将清晰底图放入 `app/assets/`,不要在代码中引用工作区外部文件。 2. 在 `certificate_templates.py` 注册模板代码、名称、底图文件和动态字段。 3. 在 `pdf.py` 增加独立渲染函数,并由 `render_certificate_image` 按模板代码分发。 4. 使用真实姓名和日期生成 PDF,再通过 `pdftoppm` 渲染为 PNG 检查位置、清晰度和文字遮挡。 5. 在 `tests/test_certificate_templates.py` 增加模板资源和渲染测试。 模板代码一旦用于正式证书,不应重命名或复用;需要大幅改版时应注册新的模板代码,以保证历史证书可以稳定重现。