如何在 Python 中保存演示文稿

如何在 Python 中保存演示文稿

Aspose.Slides FOSS for Python saves presentations exclusively to .pptx 使用格式 prs.save(path, SaveFormat.PPTX). 本指南涵盖正确的保存模式、保存到不同路径以及常见的保存相关错误。.

分步指南

步骤 1:安装软件包

pip install aspose-slides-foss

步骤 2:打开或创建演示文稿

始终使用上下文管理器。save 调用必须在 with 块。.

import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat

# Create new
with slides.Presentation() as prs:
    prs.save("new.pptx", SaveFormat.PPTX)

# Open existing
with slides.Presentation("input.pptx") as prs:
    prs.save("output.pptx", SaveFormat.PPTX)

步骤 3:在…的末尾保存 with

save() 调用放在 … 内部的最后一条语句 with 块中,在所有修改完成后。.

import aspose.slides_foss as slides
from aspose.slides_foss import ShapeType
from aspose.slides_foss.export import SaveFormat

with slides.Presentation() as prs:
    slide = prs.slides[0]
    shape = slide.shapes.add_auto_shape(ShapeType.RECTANGLE, 50, 50, 300, 100)
    shape.add_text_frame("Hello, World!")
    prs.save("output.pptx", SaveFormat.PPTX)

步骤 4:保存到不同的路径

传入不同的输出路径,以创建新文件而不修改原文件::

with slides.Presentation("template.pptx") as prs:
    # modify ...
    prs.save("customized.pptx", SaveFormat.PPTX)

template.pptx 文件未被修改;; customized.pptx 被创建(如果已存在则被覆盖)。.


步骤 5:验证输出

在…之后 with 块已退出,文件已完整并关闭。检查它是否存在::

import os
from pathlib import Path

output = Path("output.pptx")
print(f"Saved: {output.exists()}, size: {output.stat().st_size} bytes")

支持的保存格式

格式枚举值支持
PPTX(Office Open XML)SaveFormat.PPTX
PDFN/A
HTMLN/A
SVGN/A
PNG / JPEGN/A
ODP(OpenDocument)N/A

仅支持 PPTX。尝试以其他任何格式保存都会导致 NotImplementedError 或不受支持的格式错误。.


常见问题及解决方案

PermissionError: [Errno 13] Permission denied

输出文件正被其他应用程序打开(例如,PowerPoint 正在打开该文件)。在保存之前请先关闭其他应用中的该文件。.

文件已创建,但显示为空或已损坏

确保 prs.save() 在…内部调用 with 块中,而不是在其后。之后的 with 块退出后, Presentation 对象已被释放,后续调用将静默失败或抛出错误。.

NotImplementedError 在保存时

当尝试以非 PPTX 的保存格式,或在保存时使用不受支持的功能(例如图表或动画)时会出现此情况。.


常见问答

我可以保存到打开的同一个文件吗??

是的。保存到相同路径会覆盖原文件::

with slides.Presentation("deck.pptx") as prs:
    # modify ...
    prs.save("deck.pptx", SaveFormat.PPTX)  # overwrites original

我可以将保存目标设为字节缓冲区而不是文件吗??

是的。传入一个 io.BytesIO 对象直接传递给 prs.save() — 它接受任何 BinaryIO 目标::

import io
import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat

buf = io.BytesIO()
with slides.Presentation() as prs:
    # ... modify presentation ...
    prs.save(buf, SaveFormat.PPTX)

pptx_bytes = buf.getvalue()

保存时会保留我未修改的内容吗??

是的。原文件中未知的 XML 部分会原样保留。库仅序列化它能理解的文档模型部分,对不识别的 XML 则直接透传。.


另请参阅

 中文