TLDR:,它具有更高的优先级风格继承或风格层次,当我们希望在run属性中找到值时,它会将None作为输出返回。
示例:从文档中的所有运行中打印字体名称
doc = Document()
for para in doc.paragraphs:
if para.text:
for run in para.runs:
print(run.font.name)问题:
目前,我正在研究一个用例,以检查给定的文档是否具有特定的字体/语言/字体大小,等等.
例如:为了获得整个文档的语言(拼写和语法)。目前,我按照以下步骤使用Style Hierarchy获取值
langrPr的para for langdocDefaults rPr获取值。这种方法帮助我获得了朗和字体的预期结果(至少对于我所拥有的文档是如此)。
但是在某些情况下,docDefaults本身没有价值,这种方法也没有帮助,然后我听说了风格继承。
因此,如果当前样式没有值,我只是实现了一个递归函数从base_style获取值。
我在我的实现中做了一个小的改变,因为每当没有来自rPr的值时,我只检查它的值是base_style,然后在层次结构中向上移动一步。
我不确定我所遵循的方法是否正确。如果有一个简单的方法来实现这一点。请帮帮忙。参考文献
发布于 2020-09-23 19:07:46
我认为,这里的最终答案只能可靠地来自一组测试用例,这些测试用例基于您可以开发的最低限度的详尽组合,每个测试用例都“手工”确认了它们的期望值。
我之所以这么说,是因为尽管.docx格式的ISO规范相当好,但它通常避免指定行为,包括格式/样式继承层次结构的细节。
你似乎走在正确的轨道上,但我会在你的候选人名单中添加角色风格。例如,运行可以应用显式字体,但也可以应用字符样式,该字符样式本身可以指定字体。直接应用于run的字体将获胜(根据“最近的说明”原则),但这是一个有趣的问题,它将在运行级别/字符风格和直接应用的段落字体之间获胜。我打赌运行级别的字符样式,但这将是测试用例的主题,您将开发并初步手工验证。
我认为以下是继承层次结构的草案。在Word中进行实验时,您可以确认并填写比特:
run.font)run.style)paragraph.font注释:可能无法在python-docx中实现)paragraph.style)中显式指定的字符格式paragraph.style.character_style)lang。不确定这是否符合等级制度,这将需要研究,可能也需要实验。document.styles["Normal"],但可能是可配置的,名称可能因地区而异,比如"Normale“可能是某些语言)不确定这是否完全回答了你的问题;如果你需要其他的东西,也许你可以澄清它。
https://stackoverflow.com/questions/64031644
复制相似问题