Files
cdtestplant_v1/apps/createSeiTaiDocument/extensions/shape_size_tool.py
2025-04-29 18:09:00 +08:00

45 lines
1.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from docx.oxml.ns import qn # qn作用是元素的.tag属性自动帮你处理namespace
from docx.shape import InlineShape
from apps.createSeiTaiDocument.docXmlUtils import (
Demand_table_xqms,
Timing_diagram_width,
Test_result_width,
Horizatal_width
)
def set_shape_size(shape: InlineShape):
"""调用下面辅助函数,判断字典{'in_table': True, 'row_idx': 10, 'col_idx': 3}来设置大小"""
shape_location = get_shape_location(shape)
# 先判断是否在table中
if shape_location['in_table']:
# 在table中看是否是第一列第一列则是时序图
if shape_location['col_idx'] == 0:
# 在第一列:说明是时序图
shape.width = Timing_diagram_width
else:
shape.width = Test_result_width
else:
shape.width = Horizatal_width
def get_shape_location(shape: InlineShape):
"""传入图片直接处理注意是python-docx库不是docxtpl"""
# 获取父元素链
parent_chain = list(shape._inline.iterancestors())
# 检查是否在表格中
for elem in parent_chain:
if elem.tag == qn("w:tbl"):
# 获取表格对象
tbl = elem
# 获取行对象并计算行索引
tr = next(e for e in parent_chain if e.tag == qn('w:tr'))
row_idx = tbl.index(tr)
# 获取单元格对象并计算列索引
tc = next(e for e in parent_chain if e.tag == qn('w:tc'))
col_idx = tr.index(tc)
return {
'in_table': True,
'row_idx': row_idx,
'col_idx': col_idx
}
return {'in_table': False}