我不太确定说出这个的最佳方式,但我想做的是读取pdf文件,进行各种修改,并将修改后的pdf保存在原始文件上。截至目前,我能够将修改后的pdf保存到单独的文件中,但我希望替换原始文件,而不是创建新文件。
这是我目前的代码:
from pyPdf import PdfFileWriter, PdfFileReader
output = PdfFileWriter()
input = PdfFileReader(file('input.pdf', 'rb'))
blank = PdfFileReader(file('C:\\BLANK.pdf', 'rb'))
# Copy the input pdf to the output.
for page in range(int(input.getNumPages())):
output.addPage(input.getPage(page))
# Add a blank page if needed.
if (input.getNumPages() % 2 != 0):
output.addPage(blank.getPage(0))
# Write the output to pdf.
outputStream = file('input.pdf', 'wb')
output.write(outputStream)
outputStream.close()
如果我将outputStream
更改为其他文件名,它可以正常工作,我只能保存输入文件,因为它仍在使用中。我试过.close()
这个流,但它也给了我错误。
我觉得这有一个相当简单的解决方案,我没有找到任何运气。
谢谢!
答案 0 :(得分:7)
您始终可以将临时输出文件重命名为旧文件:
import os
f = open('input.pdf', 'rb')
# do stuff to temp.pdf
f.close()
os.rename('temp.pdf', 'input.pdf')
答案 1 :(得分:3)
你说你试过关闭()流但是有错误?您可以删除PdfFileReader对象以确保没有人仍然可以访问该流。然后关闭流。
from pyPdf import PdfFileWriter, PdfFileReader
inputStream = file('input.pdf', 'rb')
blankStream = file('C:\\BLANK.pdf', 'rb')
output = PdfFileWriter()
input = PdfFileReader(inputStream)
blank = PdfFileReader(blankStream)
...
del input # PdfFileReader won't mess with the stream anymore
inputStream.close()
del blank
blankStream.close()
# Write the output to pdf.
outputStream = file('input.pdf', 'wb')
output.write(outputStream)
outputStream.close()
答案 2 :(得分:1)
如果PDF足够小(这取决于您的平台),您可以只读取整个内容,关闭文件,修改数据,然后将整个内容写回同一文件。