python - 使用 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)”。
所以,我的问题是如何检测文本的实际格式以及如何将其复制到新段落中?
解决方案
推荐阅读
- c# - 将多个刚体分配给功能
- java - 如何在java中打开csv文件时设置新密码
- typescript - 无法使用 Angular CLI 创建组件
- python - 如何接收从烧瓶发送的带有烧瓶的文件?
- python - 如何在插入数据库之前从表输出格式化 Python 变量
- airflow - 由于 DAG 代码连接到 Airflow DB,Apache Airflow 在 initdb 上冻结
- ios - 没有可用于应用内购买的信息。稍后再试。21105
- amazon-web-services - ALB 运行状况在端口 80 上显示不正常
- javascript - 将函数调用中的属性分配给现有对象的最短语法?
- javascript - 修改解构的反应状态将更新组件的状态