有没有办法直接从 docx 段落而不是从元数据迭代获取 docx 文件的标题?

is there any way to get title of the docx file direct iterating from docx paragraphs and not from metadata?

使用下面给出的代码,我得到了 docx 文件的标题。 更准确地说,标题是第一页上字体最大的文本。 但我的问题是,当我编辑同一个 docx 文件的第一页并使其他一些文本字体大小大于第一页上的前一个文本时,我现在没有得到我想要的输出文本。 它提供相同的旧输出,而不是提供新编辑的大字体文本。 我正在使用 ubuntu.

import docx
doc = docx.Document('/home/user/Desktop/xyz.docx')

print("The first line of document is:", doc.paragraphs[0].text)

list = []
for p in doc.paragraphs:
    size = p.style.font.size
    if size != None:
        size = p.style.font.size.pt
        list.append(size)
print(list)
print(max(list))
for paragraph in doc.paragraphs:
    size = paragraph.style.font.size
    if size != None:
        if paragraph.style.font.size.pt == max(list):
            print(paragraph.text)

标题通常应位于首页,可能位于第一段,也可能不位于第一段。您可以遍历段落并查找具有显式名称“标题”的样式,该样式将该段落标记为标题样式,或者如果标题样式未在 Word 文档中明确定义,则可以标记具有最大磅值的段落并假设它是标题。

import docx

doc = docx.Document('xyz.docx')

title_size = max_size = 0
max_size_text = title = None
for p in doc.paragraphs:
    style = p.style
    if style is not None:
        if style.name == 'Title':
            title_size = style.font.size.pt
            title = p.text
            break
        size = style.font.size
        if size is not None:
            if size.pt > max_size:
                max_size = size.pt
                max_size_text = p.text

if title is not None:
    print(f"Title: size={title_size} text='{title}'")
else:
    print(f"max size title: size={title_size} text='{max_size_text}'")

如果标题是 None 则未定义显式标题然后可以使用具有最大磅值的文本代替。