# OFD **Repository Path**: guoshigen/ofd ## Basic Information - **Project Name**: OFD - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-29 - **Last Updated**: 2026-09-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PDF → OFD 转换器 将 PDF 转换为符合 **GB/T 33190-2016《电子文件存储与交换格式 版式文档》** 的 OFD 文件。 面向中文发票、单据等版式文档,保证矢量图形、文本、字体、印章的高保真还原。 ## 特性 - **文本保真**:提取 PDF 文本与字体并嵌入子集,避免乱码/重叠(实测全样本 100% 文本保真)。 - **矢量还原**:线、矩形、贝塞尔曲线按 OFD `PathObject` 输出;坐标严格遵循国标(相对 `Boundary` 原点),已解决第三方阅读器整页黑问题。 - **印章处理** - 位图印章(扫描件)→ 提取图像嵌入。 - 矢量印章(红章)→ 识别 even-odd 椭圆环 `clip` + 覆盖填充,输出 `Rule="1"` 圆环路径,正确显示为红环而非实心块。 - **clip 安全**:全样本扫描 0 处真实溢出风险;局部矩形裁切(如发票二维码)无损。 - **颜色合规**:OFD `CT_Color` 通道按 0~255 十进制整数(白色 `"255 255 255"`)。 ## 环境依赖 - Python 3.10+ - `pymupdf>=1.20`(PDF 解析) - `lxml>=4.9`(OFD XML 生成) - (可选)`Pillow`:GUI 与对比图辅助 ## 安装 ```bash pip install -r requirements.txt ``` ## 用法 ### 命令行(单文件) ```bash python pdf2ofd.py input.pdf -o output.ofd --check ``` - `pdf`:输入 PDF 文件或目录(目录则批量转换) - `-o/--output`:输出 OFD 路径(文件模式)或目录(目录模式,默认与输入同目录) - `--check`:转换后执行结构校验 + 文本保真度自检 ### 命令行(批量目录) ```bash python pdf2ofd.py pdf/ -o out_all/ ``` ### 图形界面 ```bash python ofd_gui.py # 正常启动窗口 python ofd_gui.py --smoke # UI 冒烟测试(600ms 后自动关闭) python ofd_gui.py --selftest # 无界面自检(验证转换链路 + 输出解析) ``` ### 预览 / 对比验收 ```bash python ofd_preview.py out.ofd --pdf input.pdf -o cmp.png --page 0 --dpi 150 ``` 左为原 PDF、右为生成的 OFD,用于肉眼验收。 ## 项目结构 | 文件 | 说明 | |------|------| | `pdf2ofd.py` | 核心转换器(PDF → OFD) | | `ofd_preview.py` | 本地渲染 OFD / 与 PDF 并排对比,用于验收 | | `ofd_gui.py` | tkinter 图形界面 | | `requirements.txt` | 依赖清单 | | `_ref_ofd/` | 官方厂商(数科)OFD 样本,用作合规参考 | > 测试样本 `pdf/`、批量输出 `out_all/`、`out_fixed/` 等体积较大,未纳入版本库(见 `.gitignore`),请按需自行放置。 ## 注意事项 - 建议在 WPS / 数科阅读器打开 OFD 验收。 - 竖排旋转文字、个别装饰细节在不同阅读器下可能存在细微差异。 ## 许可证 待定。