作为回应这个答案 https://stackoverflow.com/a/46980767/1868136对于我之前的问题,我编写了以下简短的程序来尝试重现该问题。
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 上运行
为什么会发生这种情况?
嗯,我能想到一些事情,这可能需要一些来回。
首先,我会尝试使用out.getvalue()
代替out.read()
。这就是我一直这样做的方式,其记录的行为是获取流的全部内容。
如果这不起作用,我会添加out.flush()
and out.seek(0)
之前out.read()
call. BytesIO
是一个缓冲的输出流,并且可能有一些缓冲的数据在之前没有被写入流中read()
称呼。另外,我期待read()
从当前光标位置开始工作,seek(0)
调用将重置到文件的开头。
让我们知道您如何处理,我们将从那里开始。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)