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。