initial commit
This commit is contained in:
44
apps/createSeiTaiDocument/extensions/shape_size_tool.py
Normal file
44
apps/createSeiTaiDocument/extensions/shape_size_tool.py
Normal file
@@ -0,0 +1,44 @@
|
||||
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}
|
||||
Reference in New Issue
Block a user