0
with open(pdf,'rb') as fin:
reader = PyPDF2.PdfFileReader(fin)
new_pdf = PyPDF2.PdfFileWriter()
for i in range(reader.numPages):
new_pdf.addPage(reader.getPage(i))
out_file = pdf if not create_copy else self._new_copy(pdf)
with open(out_file,'wb') as fout:
new_pdf.write(fout)
这可以在书写副本时按预期工作。为什么需要嵌套读写器的语句?
现在,让我们最后三行搬出with
的:
with open(pdf,'rb') as fin:
reader = PyPDF2.PdfFileReader(fin)
new_pdf = PyPDF2.PdfFileWriter()
for i in range(reader.numPages):
new_pdf.addPage(reader.getPage(i))
out_file = pdf if not create_copy else self._new_copy(pdf)
with open(out_file,'wb') as fout:
new_pdf.write(fout)
这将创建一个PDF文件使用正确数量的网页,但所有的页面都是空白,写入时甚至新文件。 (注意移动new_pdf = ...
也不会改变任何东西)
为什么?我能做些什么呢?因为我希望最终必须将这三条线从第一个with
中移出,以便提供覆盖支持。 (除非我只是创建一个副本,然后重命名,这是我想避免的。)
在第一种情况下是否真的能够打开相同的文件来读取和写入'if not create_copy'? –
@AndreasDeak当然不是。 – User1291
我只能在这里猜测,但也许'addPage'并没有真正将页面复制到'new_pdf'中,而只是对原始文件的引用,然后该文件在'with'结尾处关闭。 –