标准依据
一凡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)。