Rust 核心(仅介绍)

本页只做架构介绍,不提供 Rust 演示程序或使用教程——按项目决策,Rust API 层不对外开放示例。需要用一凡OFD 的能力请走 WASM(浏览器 / Node 全功能出口)。

workspace 组成

13 个库 crate,单一职责、分层清晰:

crate 一句话职责 关键依赖
ofd-core 国标数据模型(CT_*/ST_*)+ XML 序列化 + ZIP 容器 + 文本/图像提取 quick-xml 0.38、zip 6.0
ofd-font 字型解析、TrueType 子集化(GB/T 42133)、GBK/CID 映射 ttf-parser 0.25、encoding_rs
ofd-jpx JPX/JPEG2000 解码(vendor openjpeg 2.5.3 静态链入;转换端与渲染端共用) openjpeg(vendored C)
ofd-render 双后端渲染:tiny-skia 位图 + Canvas 指令流 tiny-skia 0.11、image 0.25
ofd-convert PDF ↔ OFD 双向转换:pdf-rs 解析 + 内容流重建 + 文本双模式;OFD→PDF 经 pdf-writer 写出 pdf 0.10、pdf-writer 0.13
ofd-sign 签名/验签/电子签章:SM3withSM2、SES v1/v4、X.509 链 libsm 0.6、der 0.7、x509-parser
ofd-crypto SM4-CBC 内容加密 + SM2 数字信封(GM/T 0099 风格) libsm 0.6
ofd-tool 文档合并(ID 重映射)、文字/图像水印、页面操作(抽取/删除/拆分/旋转)、高层生成 API ofd-core
ofd-archive OFD-A 合规检查(GB/T 42133 九条规则)与去技术化 ofd-core
ofd-ffi C ABI 动态库(cdylib + include/ofd.h) ofd-core/render/sign/convert
ofd-wasm wasm-bindgen 绑定 · 核心模块(解析/渲染/文本/验签/授权) wasm-bindgen、serde-wasm-bindgen
ofd-wasm-convert WASM 转换模块(PDF↔OFD 双向,按需加载,独立授权) 复用 ofd-convert
ofd-wasm-tool WASM 工具模块(合并/拆分/旋转/水印/生成/注释/OFD/A,按需加载,独立授权) 复用 ofd-tool/archive

另含 cli/(ofd-cli)与 bindings/(python/csharp/java)。

转换质量评测(pdf2ofd)

PDF→OFD 以评测驱动开发:仓库内置 1018 份公开 PDF 语料(corpus/,覆盖中文正文、嵌入子集字体、扫描件、表单、注释、加密等矩阵),配套评测脚本 scripts/pdf2ofd-eval.py(转换成功率 / SSIM 视觉还原 / 文本层保留三指标)与商业化达标线(docs/business/pdf2ofd-商业化达标线.md)。当前全量口径(2026-10-12 审计整改后复跑,100 DPI、5 页/份、-cropbox):转换成功率 98.4%(1002/1018)、非空产物 98.0%(998/1018)、SSIM≥0.95 557 份、文本层≥0.9 437 份、丢文本层 29 份、平均分 59.19、panic 0;较上一版基线(999/1018、非空 996、SSIM 542、文本 431、平均分 57.61)无新增转换失败。注:本口径含一条并行的字体编码工作线,其影响(31 份提升 / 13 份文本层回退)见达标线文档。

依赖关系

ofd-core ──→ ofd-render ──┐
   │──→ ofd-font ─────────┤
   │──→ ofd-tool          ├──→ ofd-ffi / ofd-wasm* / cli / bindings
   │──→ ofd-archive       │
   │──→ ofd-sign ─────────┤
   │──→ ofd-convert ──────┘
   └──→ ofd-crypto(经 cli 与 wasm 工具模块暴露)

ofd-jpx ←── ofd-convert(必选)/ ofd-render(feature="jpx" 门控,可关减 wasm 体积)

工程约定

  • workspace 单一版本(0.16.0)、edition 2021、rust-version 1.75、专有商业许可(闭源,见根目录 LICENSE)
  • release profile:lto = true、opt-level = 3、strip = true
  • 测试以 crate 内联 #[cfg(test)] 为主(581 项,另含确定性变异模糊回归),另以 OFD 兼容样例与 corpus/ 语料评测驱动回归。口径:cargo test --workspace(2026-10-21,退出码 0)全部测试二进制 passed 求和——运行用例数,45 个二进制共 581 passed / 0 failed,日志 audit/logs/v0.16.0-feature-scope-test.log;三个 wasm crate 各自编译一份 license.rs 的 33 个用例,故「不同用例函数数」口径为 581 − 99 = 482,两者不可混用(本站只用前者)。复现:cargo test --workspace 2>&1 | Select-String 'test result:',或 node scripts/ci-check.mjs --test-log <日志> 校验文档数字与实测一致
  • 构建环境(无 VS 安装的 Windows):MSVC link.exe + xwin SDK(build-env.sh)