我正在尝试将 pdf 拆分为其页面并将每个页面另存为新的 pdf。我从上一个问题尝试过这种方法,但没有成功,这里的 pypdf2 拆分示例也没有成功。编辑:我可以在我的文件中看到它成功写入了第一页,然后创建了第二页 pdf 但它是空的。
这是我试图运行的代码:
from PyPDF2 import PdfFileWriter, PdfFileReader
inputpdf = PdfFileReader(open("my_pdf.pdf", "rb"))
for i in range(inputpdf.numPages):
output = PdfFileWriter()
output.addPage(inputpdf.getPage(i))
with open("document-page%s.pdf" % i, "wb") as outputStream:
output.write(outputStream)
Run Code Online (Sandbox Code Playgroud)
这是完整的错误消息:
Traceback (most recent call last):
File "pdf_functions.py", line 9, in <module>
output.write(outputStream)
File "/usr/local/lib/python3.4/dist-packages/PyPDF2/pdf.py", line 482, in write
self._sweepIndirectReferences(externalReferenceMap, self._root)
File "/usr/local/lib/python3.4/dist-packages/PyPDF2/pdf.py", line 572, in _sweepIndirectReferences
self._sweepIndirectReferences(externMap, realdata)
File "/usr/local/lib/python3.4/dist-packages/PyPDF2/pdf.py", line 548, in _sweepIndirectReferences
value = self._sweepIndirectReferences(externMap, value)
File "/usr/local/lib/python3.4/dist-packages/PyPDF2/pdf.py", line 572, in _sweepIndirectReferences
self._sweepIndirectReferences(externMap, realdata)
File "/usr/local/lib/python3.4/dist-packages/PyPDF2/pdf.py", line 548, in _sweepIndirectReferences
value = self._sweepIndirectReferences(externMap, value)
File "/usr/local/lib/python3.4/dist-packages/PyPDF2/pdf.py", line 557, in _sweepIndirectReferences
value = self._sweepIndirectReferences(externMap, data[i])
File "/usr/local/lib/python3.4/dist-packages/PyPDF2/pdf.py", line 572, in _sweepIndirectReferences
self._sweepIndirectReferences(externMap, realdata)
File "/usr/local/lib/python3.4/dist-packages/PyPDF2/pdf.py", line 548, in _sweepIndirectReferences
value = self._sweepIndirectReferences(externMap, value)
File "/usr/local/lib/python3.4/dist-packages/PyPDF2/pdf.py", line 575, in _sweepIndirectReferences
if data.pdf.stream.closed:
AttributeError: 'PdfFileWriter' object has no attribute 'stream'
Run Code Online (Sandbox Code Playgroud)
我也试过这个并确认我确实可以提取单个页面。
from PyPDF2 import PdfFileWriter, PdfFileReader
inputpdf = PdfFileReader(open("/home/ubuntu/inputs/cityshape/form5.pdf", "rb"))
#for i in range(inputpdf.numPages):
output = PdfFileWriter()
output.addPage(inputpdf.getPage(2))
with open("document-page2.pdf", "wb") as outputStream:
output.write(outputStream)
Run Code Online (Sandbox Code Playgroud)
小智 5
这样的事情我也经历过。
我能够通过在循环内移动以下行来解决它:
inputpdf = PdfFileReader(open("/home/ubuntu/inputs/cityshape/form5.pdf", "rb"))
我相信某些版本的 PyPDF2 有某种错误,当您调用该PdfFileWriter.write
方法时,它会与 PdfFileReader 实例混淆。通过在每次写入后重新创建 PdfFileReader 实例,它绕过了这个错误。
以下代码应该可以工作(未经测试):
from PyPDF2 import PdfFileWriter, PdfFileReader
pdf_in_file = open("my_pdf.pdf",'rb')
inputpdf = PdfFileReader(pdf_in_file)
pages_no = inputpdf.numPages
for i in range(pages_no):
inputpdf = PdfFileReader(pdf_in_file)
output = PdfFileWriter()
output.addPage(inputpdf.getPage(i))
with open("document-page%s.pdf" % i, "wb") as outputStream:
output.write(outputStream)
pdf_in_file.close()
Run Code Online (Sandbox Code Playgroud)