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