OfdReader
OFD(Open Fixed-layout Document)文档读取和转换工具。从 OFD 文件中提取内容并转换为 Markdown。
快速开始
提取纯文本
python scripts/ofd_to_text.py <ofd文件路径>
输出到文件:
python scripts/ofd_to_text.py <ofd文件路径> output.txt
转换为 Markdown
python scripts/ofd_to_markdown.py <ofd文件路径>
输出到文件:
python scripts/ofd_to_markdown.py <ofd文件路径> output.md
工作流程
-
验证文件:确认 OFD 文件存在且格式有效(OFD 本质是 ZIP 压缩包)
-
提取内容:
- 解压 OFD 文件
- 解析内部 XML 结构
- 提取 TextCode 和 TextContent 元素
-
格式转换:
- 文本模式:直接拼接所有文本内容
- Markdown 模式:识别段落、标题和表格,转换为对应 Markdown 语法
-
输出结果:打印到控制台或写入文件
脚本说明
scripts/ofd_to_text.py:提取纯文本,保留所有文字内容但不处理格式scripts/ofd_to_markdown.py:转换为 Markdown,保留段落、标题和表格结构scripts/install_dependencies.py:安装可选依赖(核心功能使用标准库)
OFD 格式说明
OFD 文件结构:
- 根目录包含
OFD.xml(文档清单) Doc_0/目录包含文档内容- 内容以 XML 格式存储,使用
http://www.ofdspec.org/2016命名空间
关键元素:
TextCode:文本内容Paragraph:段落Table:表格Row/Cell:表格行和单元格
限制和注意事项
-
格式保真度:OFD 支持复杂的排版布局,脚本仅提取逻辑内容,无法完全保留视觉效果
-
表格识别:基于 XML 结构推断表格,复杂表格可能转换不完整
-
标题检测:使用启发式规则(短文本、特定模式),可能误判
-
编码:OFD 通常使用 UTF-8,脚本自动处理编码
-
依赖:核心脚本使用 Python 标准库(zipfile, xml.etree.ElementTree),无需额外依赖
使用示例
提取 OFD 文档文本:
# 用户询问时
python "C:\Users\zhan\.claude\plugins\skills\OfdReader\scripts\ofd_to_text.py" "document.ofd" "extracted.txt"
转换为 Markdown:
python "C:\Users\zhan\.claude\plugins\skills\OfdReader\scripts\ofd_to_markdown.py" "document.ofd" "document.md"
故障排除
错误:"文件不是有效的 OFD (ZIP) 格式"
- 文件可能损坏或不是 OFD 格式
- 检查文件扩展名是否为 .ofd
错误:"OFD 文件不存在"
- 检查文件路径是否正确
- Windows 路径需要用引号括起来
提取内容为空
- OFD 文件可能是扫描版图片(无文本层)
- 尝试用其他工具打开确认是否有可提取的文本
表格格式混乱
- 复杂表格可能无法完美转换
- 考虑使用 ofd_to_text.py 提取纯文本后手动整理