pdf2docx开发概要:解析文本样式¶
发布于:2020-07-20 | 分类:process automation
前文介绍了PyMuPDF
提取的原始数据,即文本、图片、超链接及形状。其中文本块自带了字体、颜色、斜体、粗体等属性,但是高亮
、下划线
、删除线
等具体样式需要进一步根据 文本和形状的位置关系 来判定。
解析思路¶
从前文可知,形状具有两重属性:几何属性决定了它作用在页面上的位置,语义属性决定了它的类型(高亮、下划线、删除线、超链接)。所谓文本样式解析,即根据文本和形状的几何属性,确定形状的语义属性。
-
依次检测文本和形状的位置,如果文本块和形状相交,则深入到
line
>span
级别,得到该形状在span
上的作用区域 -
利用形状的几何类型和位置关系判断语义属性:
几何类型 相对位置 语义属性 Fill
重叠 高亮 Stroke
文本中部 删除线 Stroke
文本底部 下划线 Hyperlink
重叠 超链接
pdf2docx
关注的形状分为两类:
Stroke
即较细的矩形,表征表格边框线、文字下划线、删除线等样式。Hyperlink
实际是Stroke
的一种特例。Fill
即普通矩形,表征单元格背景色、文本高亮等样式
数据结构¶
在原始文本块数据结构的基础上,为span
块新增表征解析结果的style
属性:
# span
{
"bbox": [float, float, float, float],
"size": float,
"flags": int,
"font": str,
"color": int,
"text": str, # joined from chars
"chars": [{...}]
# ----- new items -----
"style": [
{
"type": int,
"color": int,
"uri": str # hyperlink only
},
{...}
]
}
以上文本属性可以直接通过python-docx
提供的字体相关的API重建 1。