为什么将演示文稿保存到类似文件的对象会产生空白的演示文稿?

时间:2017-10-27 18:41:33

标签: python-pptx

作为对我前一个问题的this answer的回复,我写了以下简短的程序来尝试重现这个问题。

from pptx import Presentation
from io import BytesIO

p = Presentation()
slide = p.slides.add_slide(p.slide_layouts[0])
slide.shapes[0].text = 'asdf'

p.save('test.pptx')

out = BytesIO()
p.save(out)

out_file = open('bytes_test.pptx', 'wb', buffering=0)
out_file.write(out.read())
out_file.close()

这产生了两个pptx文件。

第一个,test.pptx,包含一个带有“标题幻灯片”布局并包含字符串“asdf”的幻灯片。文件大小为28 KB。

第二个,bytes_test.pptx,在PowerPoint中打开时,只显示一个大的灰色框,上面写着“点击添加第一张幻灯片”。文件大小为0。

使用Anaconda Python 3.6.1和python-pptx 0.6.6在Windows 10上运行

为什么会这样?

1 个答案:

答案 0 :(得分:2)

嗯,我能想到的一些事情,这可能需要一些来回。

首先,我会尝试使用out.getvalue()代替out.read()。这就是我总是如何做到这一点,其记录的行为是获取流的全部内容。

如果这不起作用,我会在out.flush()来电之前添加out.seek(0)out.read()BytesIO是缓冲输出流,并且可能在read()调用之前将某些缓冲数据写入流中。此外,我希望read()从当前光标位置开始工作,seek(0)调用将重置为文件的开头。

让我们知道你如何使用它,我们将从那里开始。