【发布时间】:2014-12-19 04:34:40
【问题描述】:
我正在尝试编写一个将 pdf 拆分为单独页面的函数。来自this SO answer。我复制了一个简单的函数,将 pdf 拆分为单独的页面:
def splitPdf(file_):
pdf = PdfFileReader(file_)
pages = []
for i in range(pdf.getNumPages()):
output = PdfFileWriter()
output.addPage(pdf.getPage(i))
with open("document-page%s.pdf" % i, "wb") as outputStream:
output.write(outputStream)
return pages
但是,这会将新 PDF 写入文件,而不是将新 PDF 列表作为文件变量返回。于是我把output.write(outputStream)这一行改成了:
pages.append(outputStream)
但是,当尝试在页面列表中写入元素时,我得到了 ValueError: I/O operation on closed file。
有人知道我如何将新文件添加到列表中并将它们返回,而不是将它们写入文件吗?欢迎所有提示!
【问题讨论】:
-
您是否尝试过读取数据,而不是存储文件句柄 -
pages.append(outputStream.read())? -
你试过用
cStringIO.StringIO打开outputStream吗? -
上述用户所说的...您通常可以将
StringIO对象替换为文件并将结果作为字符串输出 -
@jonrsharpe - 我刚刚尝试过,这给了我一个
IOError: File not open for reading在线留言pages.append(outputStream.read())。还有其他想法吗? -
@user4815162342 - 嗯,不,我没有尝试过 StringIO。关于如何做到这一点的任何提示?一个代码示例将非常受欢迎.. :)
标签: python pdf io outputstream pypdf