Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 15, 2017 12:35:34

SunIsUp
Зарегистрирован: 2017-06-07
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Разбить PDF документ на страницы

Уважаемые форумчане, снова обращаюсь к вам с вопросом.

Появилась задача разбить PDF документ постранично и сохранить каждую страницу в отдельный документ (с именем типа “ИсходноеНазваниеДокумента_НомерСтраницы”). Нашёл библиотеку PyPDF и PyPDF2, но не нашёл примера как сделать разбиение… С объединением в этой библиотеке всё понятно, используя merge(position, file, bookmark=None, pages=None, import_bookmarks=True), а вот про разбиение ничего такого там нет…

Подскажите, может ещё есть какие-то библиотеки для работы с ПДФ в Питоне, или же в этой можно это как-то реализовать?

Офлайн

#2 Июнь 15, 2017 15:16:55

SunIsUp
Зарегистрирован: 2017-06-07
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Разбить PDF документ на страницы

 from pyPdf import PdfFileWriter, PdfFileReader
output = PdfFileWriter()
input_PDF = PdfFileReader(file('C:/Python/hello.pdf', "rb"))
for i in range(input_PDF.getNumPages()):
	new_File_PDF = input_PDF.getPage(i)
	output.addPage(new_File_PDF)
	outputStream = file('output_'+i+'.pdf', wb)
	output.write(outputStream)
	outputStream.close()

Вот такое написал, но выдаёт ошибку
 Traceback (most recent call last):
  File "C:\Python\PDFrazbienie.py", line 1, in <module>
    from pyPdf import PdfFileWriter, PdfFileReader
  File "C:\Python\pyPdf\__init__.py", line 1, in <module>
    from pdf import PdfFileReader, PdfFileWriter
  File "C:\Python\pdf.py", line 655
    raise Exception, "file has not been decrypted"
                   ^
SyntaxError: invalid syntax

Отредактировано SunIsUp (Июнь 15, 2017 15:17:15)

Офлайн

#3 Июнь 15, 2017 16:43:52

SunIsUp
Зарегистрирован: 2017-06-07
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Разбить PDF документ на страницы

 from PyPDF2 import PdfFileWriter, PdfFileReader
output = PdfFileWriter()
input_PDF = PdfFileReader(open('C:/Python/PDF/PyPDF2/hello.pdf', 'rb'))
for i in range(input_PDF.getNumPages()):
	new_File_PDF = input_PDF.getPage(i)
	output.addPage(new_File_PDF)
	print (new_File_PDF)
	outputStream = open("output_"+i+".pdf", "wb")
	output.write(outputStream)
	outputStream.close()

немного поправил, теперь код запускается, но всё же ошибка, ругается вот на эту строку
 outputStream = open("output_"+i+".pdf", "wb")
когда вместо вышеуказанной строки пишу, к примеру hello1.pdf - то создаётся файл hello1.pdf и в нём вся информация из файла hello

Подскажите, пожалуйста, как дописать, чтоб создавались разные документы?

Офлайн

#4 Июнь 15, 2017 16:52:35

SunIsUp
Зарегистрирован: 2017-06-07
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Разбить PDF документ на страницы

Доделал, всё работает)

 from PyPDF2 import PdfFileWriter, PdfFileReader
output = PdfFileWriter()
input_PDF = PdfFileReader(open('C:/Python/PDF/PyPDF2/hello.pdf', 'rb'))
count = 0
for i in range(input_PDF.getNumPages()):
	new_File_PDF = input_PDF.getPage(i)
	output.addPage(new_File_PDF)
	print (new_File_PDF)
	output_Name_File = "output"+str(count)+".pdf"
	outputStream = open(output_Name_File, 'wb')
	output.write(outputStream)
	outputStream.close()
	count += 1

Офлайн

#5 Июнь 15, 2017 16:56:55

SunIsUp
Зарегистрирован: 2017-06-07
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Разбить PDF документ на страницы

всё же некорректно…(
в первый файл записал 1 страницу, во второй 1 и 2, в третий файл 1,2,3 страницы и т.д.

Офлайн

#6 Июнь 16, 2017 01:43:15

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9749
Репутация: +  843  -
Профиль   Отправить e-mail  

Разбить PDF документ на страницы

SunIsUp
  File "C:\Python\pdf.py", line 655
raise Exception, "file has not been decrypted"
^
SyntaxError: invalid syntax
Не та версия питона.

SunIsUp
в первый файл записал 1 страницу, во второй 1 и 2, в третий файл 1,2,3 страницы и т.д.
Наверное, из-за этой строки
SunIsUp
 output.addPage(new_File_PDF)
Надо заново делать output на каждом шаге цикла или просто поискать в самом этом объекте обнуление.



Отредактировано py.user.next (Июнь 16, 2017 01:44:18)

Офлайн

#7 Июнь 16, 2017 09:19:52

SunIsUp
Зарегистрирован: 2017-06-07
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Разбить PDF документ на страницы

А как сделать обнуление, подскажите, пожалуйста?

 from PyPDF2 import PdfFileWriter, PdfFileReader
output = PdfFileWriter()
input_PDF = PdfFileReader(open('C:/Python/PDF/PyPDF2/hello.pdf', 'rb'))
for i in range(input_PDF.getNumPages()):
	new_File_PDF = input_PDF.getPage(i)
	output.addPage(new_File_PDF)
	output_Name_File = "output_"+str(i+1)+".pdf"
	outputStream = open(output_Name_File, 'wb')
	output.write(outputStream)
	outputStream.close()

Офлайн

#8 Июнь 16, 2017 10:48:16

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9749
Репутация: +  843  -
Профиль   Отправить e-mail  

Разбить PDF документ на страницы

Похоже, что нет обнуления у неё
http://pythonhosted.org/PyPDF2/PdfFileWriter.html

SunIsUp
 output = PdfFileWriter()
Эту строку можешь внутрь цикла занести самой первой строкой.



Офлайн

#9 Июнь 16, 2017 10:57:29

SunIsUp
Зарегистрирован: 2017-06-07
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Разбить PDF документ на страницы

Пробовал уже делать то, что вы советуете, вот что выходит:

 Traceback (most recent call last):
  File "C:\Python\PDF\PyPDF2\PDFrazbienie.py", line 10, in <module>
    output.write(outputStream)
  File "C:\Python\PDF\PyPDF2\PyPDF2\pdf.py", line 482, in write
    self._sweepIndirectReferences(externalReferenceMap, self._root)
  File "C:\Python\PDF\PyPDF2\PyPDF2\pdf.py", line 572, in _sweepIndirectReferences
    self._sweepIndirectReferences(externMap, realdata)
  File "C:\Python\PDF\PyPDF2\PyPDF2\pdf.py", line 548, in _sweepIndirectReferences
    value = self._sweepIndirectReferences(externMap, value)
  File "C:\Python\PDF\PyPDF2\PyPDF2\pdf.py", line 572, in _sweepIndirectReferences
    self._sweepIndirectReferences(externMap, realdata)
  File "C:\Python\PDF\PyPDF2\PyPDF2\pdf.py", line 548, in _sweepIndirectReferences
    value = self._sweepIndirectReferences(externMap, value)
  File "C:\Python\PDF\PyPDF2\PyPDF2\pdf.py", line 557, in _sweepIndirectReferences
    value = self._sweepIndirectReferences(externMap, data[i])
  File "C:\Python\PDF\PyPDF2\PyPDF2\pdf.py", line 572, in _sweepIndirectReferences
    self._sweepIndirectReferences(externMap, realdata)
  File "C:\Python\PDF\PyPDF2\PyPDF2\pdf.py", line 548, in _sweepIndirectReferences
    value = self._sweepIndirectReferences(externMap, value)
  File "C:\Python\PDF\PyPDF2\PyPDF2\pdf.py", line 589, in _sweepIndirectReferences
    newobj = self._sweepIndirectReferences(externMap, newobj)
  File "C:\Python\PDF\PyPDF2\PyPDF2\pdf.py", line 548, in _sweepIndirectReferences
    value = self._sweepIndirectReferences(externMap, value)
  File "C:\Python\PDF\PyPDF2\PyPDF2\pdf.py", line 548, in _sweepIndirectReferences
    value = self._sweepIndirectReferences(externMap, value)
  File "C:\Python\PDF\PyPDF2\PyPDF2\pdf.py", line 589, in _sweepIndirectReferences
    newobj = self._sweepIndirectReferences(externMap, newobj)
  File "C:\Python\PDF\PyPDF2\PyPDF2\pdf.py", line 548, in _sweepIndirectReferences
    value = self._sweepIndirectReferences(externMap, value)
  File "C:\Python\PDF\PyPDF2\PyPDF2\pdf.py", line 557, in _sweepIndirectReferences
    value = self._sweepIndirectReferences(externMap, data[i])
  File "C:\Python\PDF\PyPDF2\PyPDF2\pdf.py", line 575, in _sweepIndirectReferences
    if data.pdf.stream.closed:
AttributeError: 'PdfFileWriter' object has no attribute 'stream'

Офлайн

#10 Июнь 16, 2017 12:33:12

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9749
Репутация: +  843  -
Профиль   Отправить e-mail  

Разбить PDF документ на страницы

SunIsUp
Пробовал уже делать то, что вы советуете, вот что выходит:
Напиши сам код, который ты сделал.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version