Сжать размер файла PDF с текстом?

Вопрос или проблема

У меня есть PDF, созданный с помощью PDF Sandwich. Каждая страница PDF содержит фоновое изображение и некоторый текст на переднем плане.

Я хочу уменьшить размер файла (не разрешение) фонового изображения и сохранить возможность выделения текста.

  • Использование convert от ImageMagick уменьшает размер, но удаляет текст.
  • ps2pdf не существенно уменьшает размер файла.
  • gs -sDEVICE=pdfwrite -dPDFSETTINGS=/screen … уменьшает разрешение, но кажется, что не пере сжимает изображения.
  • qpdf --compress-streams=y --recompress-flate --optimize-images in.pdf out.pdf дает лишь незначительное изменение.

Если я извлеку фоновое изображение и использую pngquant или подобное, размер файла сокращается значительно. Но у меня нет возможности использовать это новое изображение для замены старого.

Есть ли способ сжать изображения в PDF, сохранив текст нетронутым?


Как предложено в комментариях, выполнение pdfimages -list output.pdf

дает:

страница   номер  тип   ширина высота цвет комп бцп  кодировка интерполяция  ID объекта x-ppi y-ppi размер соотношение
--------------------------------------------------------------------------------------------
   1     0 изображение    3483  4800  rgb     3   8  jpeg   нет        11  0   300   300 1147K 2.3%
   2     1 изображение    3483  4800  rgb     3   8  jpeg   нет        24  0   300   300  397K 0.8%
   3     2 изображение    3483  4800  rgb     3   8  jpeg   нет        37  0   300   300 1441K 2.9%
   4     3 изображение    3483  4800  rgb     3   8  jpeg   нет        50  0   300   300 1880K 3.8%
   5     4 изображение    3483  4800  gray    1   8  jpeg   нет        63  0   300   300 1050K 6.4%
…

qpdf имеет режимы для пере сжатия потоков данных и особенно изображений в PDF.

Итак, что-то вроде

qpdf --compress-streams=y --recompress-flate --optimize-images in.pdf out.pdf

ocrmypdf – изначально разработанный для применения OCR (tesseract) к PDF предлагает способ оптимизации размера PDF с использованием кодировщика JBIG2 и pngquant под капотом. Это может быть недостающим звеном для вас, чтобы использовать pngquant и действительно заменить изображения.

Вот пример генерации PDF (не архивного PDF). В моем случае он уменьшил размер скана на 75%:

ocrmypdf [-l eng] --output-type pdf --optimize 3 input.pdf output.pdf

Обратите внимание, что у него есть очевидный побочный эффект – извлечение текста из вашего документа. Вы можете отключить это, используя параметры --tesseract-timeout=0 --skip-text (что также ускоряет процесс).

Ответ или решение

Чтобы уменьшить размер файла PDF, содержащего текст на фоне изображения, важно учитывать несколько аспектов. Ваша задача состоит в том, чтобы сохранить текст в формате PDF доступным для выделения, при этом эффективно значительно сжимая размеры изображений. Рассмотрим основные методы и инструменты, которые могут помочь в этом процессе.

1. Инструменты для работы с PDF

PDF Sandwich — это мощное средство, но Для конкретной задачи по оптимизации файла нам необходимо использовать другие инструменты, так как методы, такие как ImageMagick и ps2pdf, работают не всегда оптимально, так как они могут удалить текст или не дать нужного эффекта сжатия.

2. Исследование содержимого PDF

Первым шагом к успешному сжатию PDF является анализ его содержимого с помощью команды:

pdfimages -list yourfile.pdf

Это позволит вам получить информацию о всех изображениях на страницах PDF, включая их размер, формат и сжатие. У вас есть изображения в формате JPEG, которые занимают большую часть объема файла.

3. Оптимизация изображений

В случае, если вы хотите использовать улучшенные алгоритмы сжатия изображений, вам следует рассмотреть использование инструмента pngquant для преобразования изображений в PNG формата с лучшей компрессией. Имейте в виду, что извлечение изображений из PDF и последующая их замена может быть трудоемким процессом.

4. Использование OCRmyPDF

Рекомендуется использовать ocrmypdf для достижения желаемого результата. Этот инструмент имеет возможность не только проводить оптическое распознавание текста, но также оптимизировать PDF файлы, применяя алгоритмы сжатия.

Пример команды для оптимизации файла:

ocrmypdf [-l eng] --output-type pdf --optimize 3 input.pdf output.pdf

Параметры команды:

  • -l eng — указывает язык для распознавания, если необходимо.
  • --output-type pdf — устанавливает вывод в формате PDF.
  • --optimize 3 — максимизирует сжатие, используя передовые методы, такие как JPEG 2000, JBIG2 и сжатие PNG через pngquant.

Если вы хотите сохранить исходный текст без распознавания, вы можете добавить следующие опции для ускорения процесса:

--tesseract-timeout=0 --skip-text

Эти параметры позволят игнорировать встраивание текста, что сэкономит время обработки.

Заключение

Оптимизация размеров PDF-файла с текстом и изображениями может быть выполнена с помощью различных инструментов. Используя ocrmypdf, вы можете быстро и эффективно уменьшить размер файла, сохраняя текст в доступном для выделения формате. Это решение позволяет сохранить качество, избежать удаления текста и достичь необходимых результатов по сжатию.

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

Оцените материал
Добавить комментарий

Капча загружается...