Install
openclaw skills install ofd-text-extractor本技能用于从 OFD 格式文件中提取文本内容,并保留位置信息。 触发场景包括:分析 OFD 发票内容、从 OFD 文件中提取特定位置的信息、 或需要了解 OFD 文件的详细结构时使用。
openclaw skills install ofd-text-extractor本技能提供 OFD(Open Fixed-layout Document)格式文件的文本提取能力,输出包含精确位置信息的结构化数据。
新增功能:
当用户需要以下操作时触发本技能:
OFD 本质上是 ZIP 压缩包,解压后包含以下核心文件:
| 文件/目录 | 说明 |
|---|---|
OFD.xml | 主入口文件,定义文档基本结构 |
Doc_0/Document.xml | 文档结构定义,包含模板页映射 |
Doc_0/Pages/Page_X/Content.xml | 页面内容,包含文字和位置信息 |
Doc_0/Tpls/Tpl_X/Content.xml | 模板页内容(如发票表头) |
Doc_0/Res/ | 资源文件(图片、字体等) |
在 Content.xml 中,每个 TextObject 包含:
<ofd:TextObject ID="6956" Boundary="28.8287 6.087 28.7 19.8488" Font="6993" Size="3.175">
<ofd:TextCode X="4.825" Y="11.0658" DeltaX="3.175 3.175 3.175 3.175 3.175">旅客运输服务</ofd:TextCode>
</ofd:TextObject>
| 属性 | 说明 |
|---|---|
Boundary | 边界框:X Y Width Height(单位:mm) |
X, Y | 文字起始坐标(单位:mm) |
DeltaX | 字符间距数组,用于计算每个字符的位置 |
TextCode 内容 | 实际文本内容 |
字符位置计算公式:
示例:旅客运输服务
# 基本提取
.\scripts\extract_ofd.ps1 -OfdFile "发票.ofd"
# 提取并显示字符位置
.\scripts\extract_ofd.ps1 -OfdFile "发票.ofd" -ShowCharacters
# 导出到 JSON
.\scripts\extract_ofd.ps1 -OfdFile "发票.ofd" -OutputFile "result.json" -ShowCharacters
{
"file": "发票.ofd",
"pages": [
{
"pageIndex": 0,
"pageSize": { "width": 210, "height": 180 },
"usedTemplates": ["1"],
"texts": [
{
"id": "page_0",
"objectId": "6956",
"text": "旅客运输服务",
"x": 4.825,
"y": 11.0658,
"boundary": {
"x": 28.8287,
"y": 6.087,
"width": 28.7,
"height": 19.8488
},
"source": "page",
"isTemplate": false,
"characters": [
{ "char": "旅", "x": 4.825, "y": 11.0658, "index": 0 },
{ "char": "客", "x": 8.0, "y": 11.0658, "index": 1 },
{ "char": "运", "x": 11.175, "y": 11.0658, "index": 2 },
{ "char": "输", "x": 14.35, "y": 11.0658, "index": 3 },
{ "char": "服", "x": 17.525, "y": 11.0658, "index": 4 },
{ "char": "务", "x": 20.7, "y": 11.0658, "index": 5 }
]
}
]
}
]
}
| 字段 | 说明 |
|---|---|
text | 完整文本内容 |
x, y | 文本起始坐标(mm) |
boundary | 文本对象边界框 |
source | 来源:page 或 template_X |
isTemplate | 是否来自模板页 |
characters | 字符级位置数组(使用 -ShowCharacters 时包含) |
OFD 发票通常使用模板页来定义固定的表头(如"出行人"、"出发地"等标签)。
脚本会自动:
Document.xml 找到模板页映射Tpls/Tpl_X/Content.xml 中的模板内容isTemplate 字段区分来源技能使用 scripts/extract_ofd.py 脚本进行提取(推荐 Python 版本,跨平台兼容):
# 基本用法
python scripts/extract_ofd.py <ofd文件路径>
# 显示字符位置
python scripts/extract_ofd.py <ofd文件路径> --show-chars
# 导出 JSON
python scripts/extract_ofd.py <ofd文件路径> --output <输出路径> --show-chars
参数说明:
<ofd文件路径>: OFD 文件路径(必需)--output <输出路径>: JSON 输出文件路径(可选)--show-chars: 显示/包含字符级位置(可选)isTemplate: true 标记-ShowCharacters 参数才会包含在输出中