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

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

16.06.2017, 09:57. Показов 14250. Ответов 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,327
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,327
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,327
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,327
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
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru