Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在不打开文件的情况下更改powerpoint中的所有字体_Python_Powerpoint_Python Pptx - Fatal编程技术网

Python 在不打开文件的情况下更改powerpoint中的所有字体

Python 在不打开文件的情况下更改powerpoint中的所有字体,python,powerpoint,python-pptx,Python,Powerpoint,Python Pptx,我想在不打开文件的情况下更改大约100个powerpoint文件中的所有字体。每张幻灯片中有几种形状类型,每种形状可能有不同的字体。我使用了pythonpptxpackage并编写了以下代码来更改powerpoint演示文稿中所有文本的字体。虽然它没有给出任何错误,但它不起作用,文件中的字体仍然是原来的样子,例如Arial。我还添加了print(shape.text),以确保它已找到所有文本,并且似乎没有问题。是虫子吗?还是我遗漏了什么 prs = Presentation('f10.pptx'

我想在不打开文件的情况下更改大约100个powerpoint文件中的所有字体。每张幻灯片中有几种形状类型,每种形状可能有不同的字体。我使用了
pythonpptx
package并编写了以下代码来更改powerpoint演示文稿中所有文本的字体。虽然它没有给出任何错误,但它不起作用,文件中的字体仍然是原来的样子,例如
Arial
。我还添加了
print(shape.text)
,以确保它已找到所有文本,并且似乎没有问题。是虫子吗?还是我遗漏了什么

prs = Presentation('f10.pptx')

for i, slide in enumerate(prs.slides):
    for shape in slide.shapes:
        print (shape.has_text_frame)
        if shape.has_text_frame:
            print(shape.text)
            for p in shape.text_frame.paragraphs:
                for r in p.runs:
                    print(r.font.name)
                    r.font.name = 'Tahoma'
                    print(r.font.name)
                    
prs.save('f10_tahoma.pptx')

此外,该包似乎不适用于utf-8字符。我在上一张幻灯片上添加了一个文本框,添加了:

text_frame = shape.text_frame
text_frame.clear()  # not necessary for newly-created shape

p = text_frame.paragraphs[0]
run = p.add_run()
run.text = 'سلام '

font = run.font
font.name = 'Andalus'
font.size = Pt(18)

在保存文件之前,请添加一个包含utf-8字符的文本框。它将它添加到那里,当我检查字体时,它显示它被设置为
Andalus
,但实际上它不是
Andalus

文件的文本是什么语言
Run.font
properties对于UTF-8很好,但是对于像阿拉伯语这样的草书脚本,有一种单独的字体。不幸的是,
pythonpptx
中没有实现对该辅助字体的访问,但这至少可以解释您看到的部分行为

对于罗马字符文本(就像我们在这里使用的那样),有一些东西需要检查

  • 打开文档时,需要在运行PowerPoint的计算机上安装有问题的字体。否则PowerPoint将替换字体

  • XML中使用的字体(字体)名称并不总是与PowerPoint下拉选择框中显示的完全匹配。您需要以XML中应该显示的确切形式将该名称命名为
    pythonpptx
    。您可能需要制作一个手动操作的示例文件,可能包含一张幻灯片和一个文本框,以简化操作,然后检查该文件的XML以查找PowerPoint用于该字体的“拼写”

    您可以使用如下代码来实现这一点:

    prs = Presentation("example.pptx")
    shape = prs.slides[0].shapes[0]
    print(shape._element.xml)
    

  • 您应该能够在元素中的某个位置找到字体名称,如

    ,谢谢您的回答。字体为阿拉伯语/波斯语。我检查了你提到的字体,看起来还可以。我将文件保存为xml,替换了所有字体,然后将其保存回pptx,它成功了!我可以使用
    python-pptx
    将文件另存为.xml吗?