Python 在不打开文件的情况下更改powerpoint中的所有字体
我想在不打开文件的情况下更改大约100个powerpoint文件中的所有字体。每张幻灯片中有几种形状类型,每种形状可能有不同的字体。我使用了Python 在不打开文件的情况下更改powerpoint中的所有字体,python,powerpoint,python-pptx,Python,Powerpoint,Python Pptx,我想在不打开文件的情况下更改大约100个powerpoint文件中的所有字体。每张幻灯片中有几种形状类型,每种形状可能有不同的字体。我使用了pythonpptxpackage并编写了以下代码来更改powerpoint演示文稿中所有文本的字体。虽然它没有给出任何错误,但它不起作用,文件中的字体仍然是原来的样子,例如Arial。我还添加了print(shape.text),以确保它已找到所有文本,并且似乎没有问题。是虫子吗?还是我遗漏了什么 prs = Presentation('f10.pptx'
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
中没有实现对该辅助字体的访问,但这至少可以解释您看到的部分行为
对于罗马字符文本(就像我们在这里使用的那样),有一些东西需要检查
pythonpptx
。您可能需要制作一个手动操作的示例文件,可能包含一张幻灯片和一个文本框,以简化操作,然后检查该文件的XML以查找PowerPoint用于该字体的“拼写”
您可以使用如下代码来实现这一点:
prs = Presentation("example.pptx")
shape = prs.slides[0].shapes[0]
print(shape._element.xml)
您应该能够在元素中的某个位置找到字体名称,如
或
,谢谢您的回答。字体为阿拉伯语/波斯语。我检查了你提到的字体,看起来还可以。我将文件保存为xml,替换了所有字体,然后将其保存回pptx,它成功了!我可以使用python-pptx
将文件另存为.xml吗?