certflow.services.printer.template_field_formatter module

模板差异化字段格式化(docs/PRINT_BLUEPRINT.md §4)。

按模板语言族(全中文/中英文/全英文/俄英文)把原始字段值渲染为打印文本: - 全中文底板已预印 ≤℃ / mm·in / MPa·Lb → 只打数值;英制需 X 偏移。 - 中英文/全英文/俄英文底板无单位 → 自带单位。

field_display_formats 配置位于 config/imperial_rules.yaml``(该文件未被主配置 ``!include,故此处直接加载;同文件的 pn_display_formats 此前为死配置,本类一并接管)。

format() 返回 (渲染文本, 英制 X 偏移 mm)。打印引擎对非零 x_offset 应将该字段 坐标右移;现已接入 ESC/P 引擎:PrintView._format_print_data 将偏移随数据以 _x_offsets 透传,PrinterService.print_by_template_config / print_by_template 据此右移字段 X 坐标(蓝图 §4.2)。

certflow.services.printer.template_field_formatter.family_of(key)[源代码]

由模板配置键或语言族串推导语言族(全中文/中英文/全英文/俄英文)。

单一真相来源:print_view / certificate_preview_painter / scan_service 均应收口到此函数,消除重复的族判定逻辑(蓝图 §9-3 相关清理)。

参数:

key (str | None)

返回类型:

str

certflow.services.printer.template_field_formatter.resolve_template_key(value)[源代码]

由模板语言族/标签/配置键解析 coordinates.yaml 的模板键。

用于队列打印按证书模板类型选取正确坐标源(取代硬编码 positions):

  • 已是合法键 → 直接返回;

  • 该语言族 enabled 变体优先(如 全中文 → full_chinese_3);

  • 否则取该族首个变体;

  • 兜底 full_chinese_3 → 首个键。

参数:

value (str | None)

返回类型:

str

class certflow.services.printer.template_field_formatter.TemplateFieldFormatter(formats=None)[源代码]

基类:object

按模板语言族渲染字段打印文本。

参数:

formats (dict[str, dict[str, dict[str, Any]]] | None)

classmethod load()[源代码]

从 config/imperial_rules.yaml 加载 field_display_formats。

返回类型:

TemplateFieldFormatter

format(field, raw, template_type)[源代码]

渲染字段。

参数:
  • field (str) -- 字段名(pn/temperature/medium/dn)

  • raw (Any) -- 原始值(可能带符号,如 ≤425℃ / 2.5MPa / 150Lb / DN200)

  • template_type (str) -- 模板语言族(全中文/中英文/全英文/俄英文)

返回:

(渲染文本, 英制 X 偏移 mm)

返回类型:

tuple[str, float]

format_pn(value, unit, family)[源代码]

公称压力格式化(打印/扫描/预览共用,(value, unit) 拆分自权威串 pn_display)。

与打印侧 format("pn", ...) 同源;pn_display 为权威输入(任意串), pn_value / pn_unit 由其反向拆出。门限(中文可无单位、非中文必须带单位) 由 output_guard.validate_pn_text 把关,此处只负责「按模板语言族决定带不带单位」:

  • 空值 → ""

  • 非标准单位(KPa 等,不在 {None, MPa, Lb})→ 原值 f"{value}{unit}", 不丢单位、不做单位换算;

  • MPa 整数补一位小数(如 3232.0);

  • 英制 lb/Lb 大小写不敏感,统一展示为 Lb``(如 ``150Lb);

  • 全中文族:底板预印 MPa → 仅返回数值(如 25.0MPa25.0); 但若单位为非 MPa``(如英制磅级 ``Lb 用中文合格证打印),为避免与预印 MPa 混淆,**保留单位**(如 1500Lb1500Lb);

  • 中英文/全英文/俄英文族:必须带单位(如 32.0MPa / 150Lb)。

参数:
返回类型:

str

certflow.services.printer.template_field_formatter.get_field_formatter()[源代码]

全局单例:懒加载 field_display_formats。

返回类型:

TemplateFieldFormatter