Начиная с (задолго до) января 2019 года, pyPdf больше не обновляется и после тестирования не совместим (по крайней мере) с Python 3.6 и, скорее всего, вообще с Python 3:
In [1]: import pyPdf
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-1-bba5a42e9137> in <module>
----> 1 import pyPdf
c:\temp\envminecart\lib\site-packages\pyPdf\__init__.py in <module>
----> 1 from pdf import PdfFileReader, PdfFileWriter
2 __all__ = ["pdf"]
ModuleNotFoundError: No module named 'pdf'
(Перемещение назначения __all__
над import
устраняет эту конкретную проблему, но всплывают другие SyntaxError
из-за синтаксиса Python 2.)
К счастью, проект-преемник, PyPDF2 , работает на Python 3.6 (по крайней мере). Похоже, что основной API, ориентированный на пользователя, намеренно поддерживался как совместимый с pyPdf, поэтому ответ nosklo можно использовать в современном Python после pip install PyPDF2
, просто изменив на PyPDF2
в выражении import
и переключение xrange
на range
:
from PyPDF2 import PdfFileWriter, PdfFileReader
output_pdf = PdfFileWriter()
with open(r'input.pdf', 'rb') as readfile:
input_pdf = PdfFileReader(readfile)
total_pages = input_pdf.getNumPages()
for page in range(total_pages - 1, -1, -1):
output_pdf.addPage(input_pdf.getPage(page))
with open(r'output.pdf', "wb") as writefile:
output_pdf.write(writefile)
Я бы также рекомендовал более Pythonic подход - просто перебирать страницы напрямую, используя reversed
:
from PyPDF2 import PdfFileWriter, PdfFileReader
output_pdf = PdfFileWriter()
with open('input.pdf', 'rb') as readfile:
input_pdf = PdfFileReader(readfile)
for page in reversed(input_pdf.pages):
output_pdf.addPage(page)
with open('output.pdf', "wb") as writefile:
output_pdf.write(writefile)
Я не знаю, была ли эта .pages
коллекция доступной в оригинальном pyPdf
, но, возможно, на данный момент это не имеет большого значения.