PyPDF4 - слишком большой размер экспортированного файла PDF - PullRequest
2 голосов
/ 06 января 2020

У меня есть файл PDF около 7000 страниц и 479 МБ. Я создал скрипт python, используя PyPDF4 для извлечения только определенных c страниц, если страницы содержат определенные c слова. Сценарий работает, но новый PDF-файл, хотя он содержит всего 650 страниц из исходного 7000, теперь имеет больше МБ, чем исходный файл (точнее 498 МБ).

Есть ли способ уменьшить размер файла нового PDF?

Сценарий, который я использовал:

from PyPDF4 import PdfFileWriter, PdfFileReader
import os
import re


output = PdfFileWriter()

input = PdfFileReader(open('Binder.pdf', 'rb')) # open input

for i in range(0, input.getNumPages()):
    content = ""
    content += input.getPage(i).extractText() + "\n"


    #Format 1
    RS = re.search('FIGURE', content)
    RS1 = #... Only one search given as example. I have more, but are irrelevant for the question.
    #....

    # Format 2
    RS20 = re.search('FIG.', content)
    RS21 = #... Only one search given as example. I have more, but are irrelevant for the question.
    #....

    if (all(v is not None for v in [RS, RS1, RS2, RS3, RS4, RS5, RS6, RS7, RS8, RS9]) or all(v is not None for v in [RS20, RS21, RS22, RS23, RS24, RS25, RS26, RS27, RS28, RS29, RS30, RS30])):
        p = input.getPage(i)
        output.addPage(p)

#Save pages to new PDF file
with open('ExtractedPages.pdf', 'wb') as f:
    output.write(f)

1 Ответ

4 голосов
/ 07 января 2020

После долгих поисков нашел несколько решений. Единственная проблема с экспортированным файлом PDF заключалась в том, что он был без сжатия . Поэтому мне нужно было решение для сжатия PDF-файла:

  1. PyPDF2 и / или PyPDF4 не имеют возможности сжимать PDF-файлы. В PyPDF2 был метод compressContentStreams () , , который не работает .

  2. Нашел несколько других решений, которые утверждают, что сжимают PDF-файлы, но Ни один из них не работал для меня (добавив их здесь на всякий случай, если они работают для других): pylovepdf ; pdfsizeopt ; pdf c

  3. Первое решение, которое сработало для меня, - Adobe Acrobat professional. Размер уменьшен с 498 МБ до 2,99 МБ.

  4. [Лучшее решение] В качестве альтернативы, работающего решения с открытым исходным кодом, я нашел coherentpdf . Для Windows вы можете скачать готовый инструмент PDF squeezer. Затем в cmd:

    cpdfsqueeze.exe input.pdf output.pdf

Это фактически сжало PDF даже больше, чем Adobe Acrobat. От 498 МБ до 2,48 МБ. Сжатый до 0,5% от оригинала. Я думаю, что это лучшее решение, так как оно может быть добавлено к вашему Python коду.

Редактировать: Нашел другое бесплатное решение, которое также имеет GUI. PDFsam . Вы можете использовать функцию объединения в одном файле PDF, а в дополнительных настройках убедитесь, что у вас установлен флажок «Сжать вывод». Это сжато с 498 до 3,2 МБ. enter image description here
...