Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/69: Рейтинг темы: голосов - 69, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 16.06.2017
Сообщений: 3

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

16.06.2017, 09:57. Показов 14271. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане. Пришёл к вам за советом: необходим скрипт, который бы разбивал PDF документ на отдельные страницы (т.е. на входе hello.pdf, состоящий из 10 страниц, на выходе hello_1.pdf, hello_2.pdf и т.д., состоящие из 1 страницы каждый). Написал я вот такой скриптик:

Python
1
2
3
4
5
6
7
8
9
10
11
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()
Но на выходе получается так, что в hello_1.pdf записывается 1 страница, в hello_2.pdf 1 и 2 страницы, в hello_3.pdf 1,2,3 страницы и т.д....
Подскажите, как сделать так, чтоб по одной странице (соответствующей номеру документа) было в конечных документах?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.06.2017, 09:57
Ответы с готовыми решениями:

Как разбить 1-ин pdf документ на множество pdf файлов в соответствии с регулярным выражением ?
Есть документ представляющий собой сборник статей тезисов (c рисунками) в двух формате pdf, задача получить из многостраничного документа...

Разбить Docx документ на страницы
Приветствую, многоуважаемые! Прошу помочь с решением задачи. Необходим скрипт, позволяющий разбивать docx документ на отдельные...

Разделить документ Word на отдельные страницы с конвертацией в PDF
Добрый день! В Word, при помощи рассылки были созданы сертификаты участников. Далее, их необходимо разделить на страницы (одна страница -...

10
 Аватар для RunningMan
278 / 186 / 75
Регистрация: 12.04.2017
Сообщений: 1,088
Записей в блоге: 2
16.06.2017, 11:08
Цитата Сообщение от SunIsUp Посмотреть сообщение
Подскажите, как сделать так, чтоб по одной странице (соответствующей номеру документа) было в конечных документах?
Нет модуля PyPDF2,
но судя по кодУ,
необходимо создавать новый PdfFileWriter на каждой итерации цикла
Python
1
2
3
for i in range(input_PDF.getNumPages())
    output = PdfFileWriter()
    ....
0
0 / 0 / 0
Регистрация: 16.06.2017
Сообщений: 3
16.06.2017, 11:45  [ТС]
Цитата Сообщение от RuningMan Посмотреть сообщение
необходимо создавать новый PdfFileWriter на каждой итерации цикла
Приходила в голову такая мысль, что нужно как-то очищать его или создавать в цикле, но выдаёт ошибку, когда вставляю в цикл
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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'
0
 Аватар для RunningMan
278 / 186 / 75
Регистрация: 12.04.2017
Сообщений: 1,088
Записей в блоге: 2
16.06.2017, 14:05
SunIsUp,
Интереса ради установил модуль
Запустил скрипт. Без проблем из каждой страницы
создаётся новый одностраничный документ. Ошибок нет.
Python
1
2
3
4
5
6
7
8
9
10
11
12
from  PyPDF2 import PdfFileWriter, PdfFileReader
 
input_PDF = PdfFileReader(open('SomePDF.pdf', 'rb'))
 
for i in range(input_PDF.getNumPages()):
    output = PdfFileWriter()    
    new_File_PDF = input_PDF.getPage(i)
    output.addPage(new_File_PDF)
    output_Name_File = "SomePDF"+str(i+1)+".pdf"
    outputStream = open(output_Name_File, 'wb')
    output.write(outputStream)
    outputStream.close()
0
0 / 0 / 0
Регистрация: 16.06.2017
Сообщений: 3
16.06.2017, 14:31  [ТС]
Цитата Сообщение от RuningMan Посмотреть сообщение
Интереса ради установил модуль
Уточните, пожалуйста, вы в командной строке перешли в папку где лежит модуль, набрали после этого python setup.py install, запустили после этого скрипт и всё заработало?

Добавлено через 6 минут
Вопрос закрыт. Скачал библиотеку с другого сайта - всё работает, видимо битая была предыдущая. Спасибо всем.
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,328
13.01.2021, 16:05
здравствуйте, опробовал код с поста 4
PyPDF2 поставил, но в venv предлагается только PyPDF2table and PyPDF2xml
и как быть? спс

Добавлено через 17 минут
PyPDF2 - на рассмотрел, было оно вверху...

Добавлено через 9 минут
итого:
не ругнулся всё сделал-но файлов то и нету-во всяком случае, там же где был исходный
Python
1
input_PDF = PdfFileReader(open('d:/1.pdf', 'rb'))
то есть на диске ДЭ

Добавлено через 4 часа 32 минуты
апну тему
ну и в перспективе обрезать разбитые страницы как?
а можно сразу не разбивать а извлекать с пдф, как - даешь компьютерное зрение.....))
цель распознавать с кусков пдф текст и сравнивать с текстом оригинала - и иметь представление насколько точно
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,328
17.01.2021, 16:40
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
не ругнулся всё сделал-но файлов то и нету-во всяком случае, там же где был исходный
разобрался, PDF страницы документа сохраняются в папке, откуда запускался файл .py
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
апну тему
ну и в перспективе обрезать разбитые страницы как?
0
67 / 64 / 3
Регистрация: 02.11.2019
Сообщений: 227
21.01.2021, 22:06
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
ну и в перспективе обрезать разбитые страницы как?
Думаю, можно pdf перевести в текст и сравнивать построчно. Или генерировать хэш для каждой страницы.
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,328
22.01.2021, 14:13
пример нашёл
https://newtechaudit.ru/pytesseract-pdf/
но увы проблема с установкой CV2
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
22.01.2021, 16:16
Какое еще компьютерное зрение? Нормальный pdf содержит текст. Установите python-poppler. С помощью poppler'a и на страницы можно разбить и текст извлечь, и , скорее всего, кроп сделать.

Добавлено через 1 час 4 минуты
Добавьте после 7 строки и получите текст:
Python
1
print( new_File_PDF.extractText())
1
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,328
23.01.2021, 07:33
Цитата Сообщение от u235 Посмотреть сообщение
Добавьте после 7 строки и получите текст:
окейно, спс большое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.01.2021, 07:33
Помогаю со студенческими работами здесь

ITextSharp как добавить в создаваемый документ страницы из имеющегося файла PDF
Суть в теме. Если чуть подробнее: в процедуре генерится файл, и в определенный момент в него нужно добавить страницы из файла, который уже...

Как соединить несколько PDF файлов в один документ PDF?
имею распечатку книжки в 45 pdf файлах. как-то неудобно просматривать её. как их все объединить в один pdf файл? Может спец софт необходим?

Qt pdf документ
как можно сгенерировать pdf документ? под шаблон вставлять данные взятые с базы даных ? некрасиво генерирует, на другую страницу одно...

Сохранить документ в PDF
Всем доброго дня у меня есть форма которая заполняется в ручную, при нажатии на кнопку происходит заполнение шаблона документа World ...

Как разбить PDF
Как разбить PDF файл на несколько частей? :help:


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru