PyMuPDF 包读取pdf文档时,span里的flags属性代表什么

时间:2024-07-15 07:05:15

在 PyMuPDF(也称为 fitz)库中,flags 属性表示文本的格式化信息。flags 是一个整数,它包含了不同位(bits)的标志,每个位代表文本的一种属性。这些标志位可以组合在一起表示复杂的文本格式。

具体而言,flags 属性中的各个位可以解释如下:

  • 0x0001 - 文本被斜体化(Italic)
  • 0x0002 - 文本是粗体(Bold)
  • 0x0004 - 文本被下划线(Underline)
  • 0x0008 - 文本被删除线(Strikeout)
  • 0x0010 - 文本是超脚注(Superscript)
  • 0x0020 - 文本是下脚注(Subscript)
  • 0x0040 - 文本是小型大写字母(Small Caps)
  • 0x0080 - 文本是影子(Shadow)
  • 0x0100 - 文本是轮廓(Outline)
  • 0x0200 - 文本是浮雕(Embossed)
  • 0x0400 - 文本是凹陷(Engraved)

这些标志位通过按位操作可以组合在一起。例如,如果文本既是粗体又是斜体,则 flags 值将是 0x0002 | 0x0001 = 0x0003

要读取并解释 flags 属性,可以使用按位与操作来检查特定标志是否存在。例如:

import fitz

doc = fitz.open("example.pdf")
page = doc.load_page(0)

for block in page.get_text("dict")["blocks"]:
    for line in block["lines"]:
        for span in line["spans"]:
            flags = span["flags"]
            is_bold = flags & 0x0002 != 0
            is_italic = flags & 0x0001 != 0
            print(f"Text: {span['text']}, Bold: {is_bold}, Italic: {is_italic}")

这段代码会检查每个 spanflags 属性,并打印出文本是否是粗体或斜体。通过这种方式,你可以解码并使用 flags 属性来获取文本的格式化信息。