本技能提供 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 包含:
xml
<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 内容实际文本内容
字符位置计算公式:
示例: 旅客运输服务
powershell
# 基本提取
.\scripts\extract_ofd.ps1 -OfdFile "发票.ofd"
# 提取并显示字符位置
.\scripts\extract_ofd.ps1 -OfdFile "发票.ofd" -ShowCharacters
# 导出到 JSON
.\scripts\extract_ofd.ps1 -OfdFile "发票.ofd" -OutputFile "result.json" -ShowCharacters
json
{
"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 版本,跨平台兼容):
powershell
# 基本用法
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 参数才会包含在输出中