标准依据

一凡OFD 的每一块能力都对应一份国家标准或行业标准:

标准 名称 覆盖范围 实现
GB/T 33190-2016 电子文件存储与交换格式 版式文档 OFD 格式本体:容器、页面、图形/文字/图像/视频、注释、签名、版本、附件 ofd-core、ofd-render
GB/T 42133-2022 OFD 档案应用指南 OFD-A 合规要求、字体嵌入与子集化、去技术化 ofd-archive、ofd-font
GB/T 35275 信息安全技术 SM2密码算法加密签名消息语法规范 SM3withSM2 签名与验签 ofd-sign
GB/T 38540 信息安全技术 安全电子签章密码技术规范 SES 电子签章数据结构(v1/v4) ofd-sign
GM/T 0099-2020 开放版式文档密码应用技术规范 SM4-CBC 内容加密 + SM2 数字信封 + SM3 校验 ofd-crypto

合规验证语料

兼容性验证不是自造样例,而是使用了真实世界的 OFD 产出(来源:OFD R&W 开源项目测试语料、数科真实电子发票、国标原文 PDF 等,共 133 份 = examples/resources/*.ofd 65 + corpus/ofd/*.ofd 68;examples/resources/自建样本/ 子目录为自建国标符合性样本——用于「无真实样本」能力的验证(CMS 验签/CRL 吊销/时间戳等),不代表真实厂商产物、不计入兼容性矩阵统计):

  • info / list / render(≤12 页)/ verify(原签名逐签名结论)四项 132/133(唯一失败 sanitized_vat_invoice.ofd 本身 OFD.xml 为空根);encrypt + decrypt 回环 133/133;decrypt 语义一致 131/131(2 份故意损坏的负向样例记 N/A)
  • sign + verify 签名回环 132/133(唯一失败同上空根件;2026-10-12 修复后复跑;此前 7 份未过——sign 报成功但新签名未被文档引用的签名列表收录,已修,逐条数据见性能实测与 eval-out/compat-report.json)
  • 矩阵不复现旧文「73 份」口径——那是 2026-09-16 的一次性数据、无清单无报告;现由 scripts/compat-matrix.mjs 按仓库内显式样例清单产出(含每份文件的字节数与 sha256)
  • 数科电票的三个非标差异(TemplateID 属性、CommonData/TemplatePage 外链模板、Content/Layer 嵌套)已适配
  • GB/T 42133-2022 国标原文 PDF(14 页)转换 0.47s,138 个裸 CFF 字体零退化嵌入

档案化(OFD-A)

ofd-archive 按 GB/T 42133-2022 实现合规规则检查(check(),v0.21.0 起 14 个检查项:九条格式规则 + 四性文件级要求——引用完整性 refs-integrity、DocID 元数据 metadata-docid、扩展信息残留 extensions-absent、签名有效性 signature-valid),并提供 to_ofd_a() 去技术化与 repair() 完整修复(去技术化 + 字体子集嵌入 + 图像白名单 + 悬空引用清理 + 大纲治理 + 附件治理 + DocID 补全 + 修复留痕)。原生端推荐使用 CLI:

ofd-cli ofda-check archive.ofd --json before.json
ofd-cli ofda-repair archive.ofd --out archive_ofda.ofd --report-json repair.json
ofd-cli ofda-batch corpus/ofd --out-dir out/ --report-json compliance.json
  • ofda-check:逐项 14 个检查项、缺失字体与签名验签状态(signatures 明细,只验签名值与文件摘要、不判证书链信任);exit 0 合规 / 1 不合规 / 2 错误。
  • ofda-repair:按名称扫描系统字体并子集嵌入(外链模板/注释外观用字一并计入);缺字体时只有显式 --fallback-font 才替代(报告 font-substituted + warnings),否则记 font-missing。拒绝加密件、多 DocBody 与已签名件——修复重写受保护文件会使验签必败(GB/T 42133 6.13:验签合规件应免技术化带签名归档);确需修复用 --strip-signature 显式剥离(SES 内嵌印章图片转页面图像保留视觉,矢量/外置记 stamp-visual-lost)。修复留痕默认写入 DocInfo/CustomDatas 三键(OFDA-Repair-Time/Tool/Summary,DA/T 70 处理过程记入元数据),--no-trace 关闭。
  • ofda-batch:单进程复用字体索引,输出 before/after 合规与缺失字体报告(JSON/CSV),--fail-on-noncompliant 可作验收门禁;--strip-signature 同 ofda-repair。
  • 浏览器端:ofdaCheck → collectSystemFonts(missingFonts) → ofdaRepair(bytes, found[, options]) → 复检(options.stripSignature 剥离签名 / noTrace 关闭留痕),详见 API 参考。
  • 合规率口径:scripts/ofda-compliance.mjs 分别跑「系统字体精确模式」与「显式回退字体模式」;valid 分母剔除无法打开、缺图不可修复(missing-asset)、多文档(multi-doc)与已签名件(signed——v0.21.0 起默认拒绝修复,验签合规件应免修复带签名归档,单列不计失败)。本轮实测(2026-10-24,Windows 系统字体 + examples/resources/fallback-font.ttf,133 份兼容矩阵,14 项检查口径):
指标(valid = 90) 修复前 精确模式 显式回退模式
14 项全通过 0 90(100%) 90(100%)
fonts-embedded 通过 26 90(100%) 90(100%)
未解决字体名字数 30 0 0

分类明细:signed 40 份(已签名件正确拒绝——此前版本会静默重写产出「复检合规」但验签必败的假件,v0.21.0 起显式单列)、missing-asset 3 份(1 份打不开 + 2 份缺图,结构性损坏不计入 valid)。精确模式 100% 由三项真实补强达成(v0.19.0 起沿用):① 同包已嵌入字体复用;② GBK 编码字体名恢复;③ 方正/华文风格族别名(同风格通用族映射,非字节相同)。--fallback-font 仍保留给真正未知字体。复现:node scripts/ofda-compliance.mjs --cli target/release/ofd-cli.exe --fallback-font examples/resources/fallback-font.ttf(CLI 需商业授权,OFD_LICENSE_TOKEN 注入或先 license activate)。