问题描述
我正在尝试使用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 (将#修改为@)