如何更改 pptx-python 中的字符间距?
How can I change the character spacing in pptx-python?
我尝试做的是更改函数中每个 运行 的间距:
def add_direction_arrows(self):
global junc_file, junc_file_name
match_colors_to_type = {"White": RGBColor(255, 255, 255), "Yellow": RGBColor(238, 233, 23)}
arrows_placeholders = {"NORTH_ARROWS": self.NO.LAN.Organize_arrows_order(),
"SOUTH_ARROWS": self.SO.LAN.Organize_arrows_order(),
"EAST_ARROWS": self.EA.LAN.Organize_arrows_order(),
"WEST_ARROWS": self.WE.LAN.Organize_arrows_order()}
for slide in junc_file.slides:
for shape in slide.shapes:
if shape.name in arrows_placeholders.keys():
text_frame = shape.text_frame
text_frame.clear()
arrows_list = arrows_placeholders[shape.name]
for arrow in arrows_list:
text_frame = shape.text_frame
p = text_frame.paragraphs[0]
run = p.add_run()
run.text = arrow[0] * arrow[1]
font = run.font
font.bold = False
➜ font.spacing = -10
font.size = Pt(49.9)
font.color.rgb = match_colors_to_type[arrow[2]]
junc_file.save(junc_file_name)
我不确定 python-pptx 库是否包含此选项,但如果不包含,我还有哪些其他选项?可以自己添加吗?也许是一种在 powerpoint 中手动 'press a button' 的方法?
谢谢!
根据文档 python-pptx
不支持间距。
您可以深入了解该库的内部工作方式,并可能自己添加支持,但我怀疑这是否真的适合您。
您当然可以稍后手动编辑 powerpoint 文件来更改此设置(甚至使用 VBA)。
好像不支持这样的。作为一种解决方法,我使用以下代码片段在 shape.table 上下文中实现了相同的目的。也许您可以通过替换前两行来获取文本框架 txBody 来查看文本运行的行为是否相同。
def _set_char_spacing(cell):
tc = cell._tc
txBody = tc.get_or_add_txBody()
if not len(txBody.p_lst) > 0:
return cell
p = txBody.p_lst[0] # NOTE: Using index 0 just for demo purposes
r = p.r_lst[0] # NOTE: Using index 0 just for demo purposes
if not r.rPr:
rPr = r._add_rPr()
spacing = Emu(40)
rPr.attrib['spc'] = str(spacing)
return cell
免责声明,p_lst 和 r_lst 是需要迭代的列表。
我尝试做的是更改函数中每个 运行 的间距:
def add_direction_arrows(self):
global junc_file, junc_file_name
match_colors_to_type = {"White": RGBColor(255, 255, 255), "Yellow": RGBColor(238, 233, 23)}
arrows_placeholders = {"NORTH_ARROWS": self.NO.LAN.Organize_arrows_order(),
"SOUTH_ARROWS": self.SO.LAN.Organize_arrows_order(),
"EAST_ARROWS": self.EA.LAN.Organize_arrows_order(),
"WEST_ARROWS": self.WE.LAN.Organize_arrows_order()}
for slide in junc_file.slides:
for shape in slide.shapes:
if shape.name in arrows_placeholders.keys():
text_frame = shape.text_frame
text_frame.clear()
arrows_list = arrows_placeholders[shape.name]
for arrow in arrows_list:
text_frame = shape.text_frame
p = text_frame.paragraphs[0]
run = p.add_run()
run.text = arrow[0] * arrow[1]
font = run.font
font.bold = False
➜ font.spacing = -10
font.size = Pt(49.9)
font.color.rgb = match_colors_to_type[arrow[2]]
junc_file.save(junc_file_name)
我不确定 python-pptx 库是否包含此选项,但如果不包含,我还有哪些其他选项?可以自己添加吗?也许是一种在 powerpoint 中手动 'press a button' 的方法? 谢谢!
根据文档 python-pptx
不支持间距。
您可以深入了解该库的内部工作方式,并可能自己添加支持,但我怀疑这是否真的适合您。
您当然可以稍后手动编辑 powerpoint 文件来更改此设置(甚至使用 VBA)。
好像不支持这样的。作为一种解决方法,我使用以下代码片段在 shape.table 上下文中实现了相同的目的。也许您可以通过替换前两行来获取文本框架 txBody 来查看文本运行的行为是否相同。
def _set_char_spacing(cell):
tc = cell._tc
txBody = tc.get_or_add_txBody()
if not len(txBody.p_lst) > 0:
return cell
p = txBody.p_lst[0] # NOTE: Using index 0 just for demo purposes
r = p.r_lst[0] # NOTE: Using index 0 just for demo purposes
if not r.rPr:
rPr = r._add_rPr()
spacing = Emu(40)
rPr.attrib['spc'] = str(spacing)
return cell
免责声明,p_lst 和 r_lst 是需要迭代的列表。