Skip to content

Latest commit

 

History

History
67 lines (45 loc) · 2.16 KB

2020-07-20-pdf2docx开发概要:解析文本样式.md

File metadata and controls

67 lines (45 loc) · 2.16 KB
categories tags
process automation
python

pdf2docx开发概要:解析文本样式


前文介绍了PyMuPDF提取的原始数据,即文本、图片、超链接及形状。其中文本块自带了字体、颜色、斜体、粗体等属性,但是高亮下划线删除线等具体样式需要进一步根据 文本和形状的位置关系 来判定。

解析思路

从前文可知,形状具有两重属性:几何属性决定了它作用在页面上的位置,语义属性决定了它的类型(高亮、下划线、删除线、超链接)。所谓文本样式解析,即根据文本和形状的几何属性,确定形状的语义属性。

  • 依次检测文本和形状的位置,如果文本块和形状相交,则深入到line>span级别,得到该形状在span上的作用区域

  • 利用形状的几何类型和位置关系判断语义属性:

    几何类型 相对位置 语义属性
    Fill 重叠 高亮
    Stroke 文本中部 删除线
    Stroke 文本底部 下划线
    Hyperlink 重叠 超链接

!!! note "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

Footnotes

  1. docx.text.run.Font