使用Python合并PDF - 合并时关闭PDF文件
我正在使用下面的方法把几个单独的PDF文件合并成一个PDF文件。
这个方法运行得很好,但合并后所有的PDF文件都还保持打开状态。我想知道在脚本结束时,如何关闭这些PDF文件(比如说有四个文件,包括aaa、bbb、ccc和abc)。
我想用类似f.clos()
的命令,但我不知道该怎么放在这里。
from pyPdf import PdfFileWriter, PdfFileReader
def append_pdf(input,output):
[output.addPage(input.getPage(page_num)) for page_num in range(input.numPages)]
output = PdfFileWriter()
append_pdf(PdfFileReader(file("C:\\aaa.pdf","rb")),output)
append_pdf(PdfFileReader(file("c:\\bbb.pdf","rb")),output)
append_pdf(PdfFileReader(file("c:\\ccc.pdf","rb")),output)
output.write(file("c:\\abc.pdf ","wb"))
问题是,当我尝试删除这些文件时,Windows弹出提示:
无法完成该操作,因为文件在pythonw中打开
(我使用的是Python 2.76,所以把Robᵩ的第一次尝试中的那行改成了inputFile.close()
)。
2 个回答
0
所有的文件在脚本执行完毕后会自动关闭。如果你想在脚本结束之前就关闭它们,可以调用 file.close()
这个函数。这里有一种方法:
# UNTESTED
for fname in 'c:/aaa.pdf', 'c:/bbb.pdf', 'c:/ccc.pdf':
inputFile = open(fname, 'rb')
append_pdf(PdfFileReader(inputFile), output)
close(inputFile)
你可以看到,每个输入文件在使用完后会立即关闭。不过,这样做会有一个问题:如果 PdfFileRead()
或 append_pdf()
出现错误,那么 close()
就不会被调用。为了解决这个问题,我们使用了一个上下文管理器:
# UNTESTED
for fname in 'c:/aaa.pdf', 'c:/bbb.pdf', 'c:/ccc.pdf':
with open(fname, 'rb') as inputFile:
append_pdf(PdfFileReader(inputFile), output)
每个文件会在 with
代码块结束时自动关闭。
输出文件也是一样的:
# UNTESTED
with open('c:/abc.pdf', 'wb') as outputFile:
output.write(outputFile)
0
我在这里学到的,pypdf合并多个PDF文件为一个PDF
发现使用PyPDF2也可以实现同样的目标,并且解决了文件无法删除的问题。
from PyPDF2 import PdfFileMerger, PdfFileReader
merger = PdfFileMerger()
filenames = ['c:\\11.pdf', 'c:\\22.pdf', 'c:\\33.pdf']
for filename in filenames:
merger.append(file_folder + filename)
merger.write('c:\\123.pdf')