首页 > 解决方案 > 使用 python-docx 访问其他段落样式属性

问题描述

我正在尝试使用 python-docx 解析 Word 文档,但无法获得正确的段落样式。我已将文件的简化版本上传到Dropbox。文档的“正常”样式使用“Garamont”字体,但是这已更改,因此我在文件中单击的任何地方,字体都是“Calibri (Body)”。

当我在第一行使用 Word 中的“样式检查器”时,它显示:“段落格式”为Normal+ Plus: Centered, Left: 0 cm, Before: 0 pt,“文本级别格式”为Default Paragraph Font+ Plus: +Body (Calibri), 14 pt, Bold, Underline

当我对表格中的非粗体文本执行相同操作时,我得到:“段落格式”是Normal+ Plus: +Body (Calibri), Before: 0 pt,“文本级别格式”是Default Paragraph Font+ Plus: <none>

即在表格内外的不同层次上改变字体。但是,在这两种情况下,我都不知道如何使用 python-docx 获取此信息:

import docx
doc = docx.Document('test.docx')
par = doc.paragraphs[0]
#par = doc.tables[0].cell(0,1).paragraphs[0]
print(f"'{par.style.name}'")
print(f"'{par.style.font.name}'")
print(f"'{par.runs[0].font.name}'")
print(f"'{par.runs[0].style.name}'")
print(f"'{par.runs[0].style.font.name}'")

c = doc.tables[0].cell(1,0)
for par in c.paragraphs:
    print(f"{len(par.runs)}", end=' ')
c.paragraphs[0].add_run('Very short summary')
doc.save('test_ed.docx')

返回

'Normal'
'Garamond'
'None'
'Default Paragraph Font'
'None'
1 0 0 0 0 0 0 0 0 1

换句话说,我没有看到任何迹象表明该文档实际上使用了 Calibri 字体。par如果我使用第二个定义(来自表),它返回完全相同。

此外,查看生成的test_ed.docx,添加的行使用“Garamont”,即使 Word 将其他空段落显示为使用“Calibri (Body)”。

所以,我的问题是如何检测文本的实际格式以及如何将其复制到新段落中?

标签: pythonpython-docx

解决方案


推荐阅读