如何用python-docx获取段落对齐值?解决部分段落对齐值无法获取问题
问题:python-docx无法获取段落两端对齐值
我正尝试使用python-docx自动化处理docx文件格式,需要获取段落的对齐值。现有代码对大部分段落有效,但测试文档中索引为11、文本为“O Congresso Nacional decreta:”的段落,视觉上为两端对齐(justify),但通过以下代码获取的a1、a2、a3均为None:
for paragraph in doc.paragraphs: a1 = paragraph.alignment a2 = paragraph.style.paragraph_format.alignment a3 = paragraph.style.base_style.paragraph_format.alignment
请问对齐信息还可能存储在什么位置?
解决方案
对齐值可能存储在样式的多层继承链中,仅检查一层父样式是不够的,需要循环遍历整个继承链直到base_style为None。可能的存储位置包括:
paragraph.alignment paragraph.style.paragraph_format.alignment paragraph.style.base_style.paragraph_format.alignment paragraph.style.base_style.base_style.paragraph_format.alignment paragraph.style.base_style.base_style.base_style.paragraph_format.alignment
更高效的实现方式是通过循环自动遍历所有父样式,直到找到非None的对齐值或遍历结束:
def get_paragraph_alignment(paragraph): # 优先检查段落自身的对齐设置 alignment = paragraph.alignment if alignment is not None: return alignment # 遍历样式继承链 current_style = paragraph.style while current_style is not None: alignment = current_style.paragraph_format.alignment if alignment is not None: return alignment current_style = current_style.base_style # 若未找到,返回None或默认对齐方式 return None
内容的提问来源于stack exchange,提问作者pedmacedo
相关产品推荐
相关产品推荐

