使用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,即使Word使用“ Calibri(Body)”显示其他空的段落,添加的行也使用“ Garamont”。

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)