如何更改 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 是需要迭代的列表。