# 04d 合格证生成与打印流程 > 状态:✅ 已实现 ## 1. 操作入口 | 方式 | 入口 | |------|------| | GUI | 查询页「打印」/「预览」→ `PrintView` / `PrintDialog` | | CLI | `certflow print-cert [options]` | ## 2. 涉及配置 | 配置文件 | 关键字段 | 说明 | |----------|----------|------| | `config/certificate.yaml` | 合格证模板字段 | 合格证的字段映射 | | `config/print.yaml` | 打印参数 | 份数/方向/页边距 | | `config/printer.yaml` | 打印机配置 | 默认打印机选择 | | `config/templates/` | 模板文件 | 合格证 PDF 模板 | | `config/colors.yaml` | 颜色 | 预览渲染 | ## 3. 涉及代码文件 | 层 | 文件 | 职责 | |----|------|------| | View | `views/print_view.py` | 打印页面 | | View | `views/print_dialog.py` | 打印参数对话框 | | View | `views/certificate_preview_painter.py` | 合格证预览渲染 | | Controller | `controllers/print_queue_controller.py` | 打印队列 | | Controller | `controllers/printer_controller.py` | 打印机管理 | | Service | `services/certificate_service.py` | 合格证记录生成 | | Service | `services/certificate_number_service.py` | 合格证编号 | | Service | `services/certificate_print_service.py` | 打印编排 | | Service | `services/cert_print_engine.py` | PDF 渲染引擎(reportlab) | | Service | `services/printer_manager.py` | 系统打印机管理 | | Service | `services/print_history_service.py` | 打印历史 | | Service | `services/dn_service.py` | DN 口径计算 | | Service | `services/pn_service.py` | PN 压力计算 | | Service | `services/dual_code.py` | 双码计算 | | Service | `services/pressure_calc_service.py` | 压力计算 | | Model | `models/certificate.py` | 合格证表 | | Model | `models/print_job.py` | 打印任务表 | | Model | `models/print_log.py` | 打印日志表 | ## 4. 逐步流程 ### 4.1 生成合格证 1. 在查询页选择已编号记录(`product_code` 非空) 2. action `print_certificates` → `_print_certificates` 3. `CertificateService` 将记录写入 `certificate` 表(含 DN/PN 双码计算) 4. CLI 等价命令: ```bash certflow print-cert --filter "product_code not null and cert_done=0" ``` ### 4.2 预览 1. 右键「预览」→ action `preview_certificate` → `_preview_certificate` 2. `CertificatePreviewPainter` 渲染 PDF 预览(PySide6 绘制) 3. 确认无误后进入打印 ### 4.3 打印 1. 工具栏「打印」→ `PrintView` / `PrintDialog` 2. 选择打印机(`PrinterController` + `PrinterManager` 枚举系统打印机) 3. 设置参数(份数/方向,来自 `print.yaml`) 4. `CertificatePrintService` → `CertPrintEngine`(reportlab 生成 PDF)→ 提交系统打印队列 5. `PrintJob` / `PrintLog` 记录任务与结果 6. `PrintHistoryService` 追加到打印历史 ### 4.4 双码计算 合格证中 DN(公称通径)与 PN(公称压力)经 `dn_service`、`pn_service`、`dual_code`、`pressure_calc_service` 计算,依赖基础字典中的口径映射与型号参数映射。 ## 5. 打印历史 见 [`04i-history-archive.md`](./04i-history-archive.md)。 ## 6. 常见问题 - **预览空白**:检查 `certificate.yaml` 字段映射是否覆盖所选记录 - **打印卡住**:检查系统打印机状态;`printer.yaml` 中的默认打印机是否在线 - **双码为 0**:检查基础字典「口径映射」「型号参数映射」是否配置该型号