Как я могу уменьшить размер отсканированного файла PDF?

У меня есть PDF-файл размером 72,9 МБ, который мне нужно сжать до 500 КБ.

Файл представлял собой изображение в формате JPEG, которое я отсканировал, а затем преобразовал в pdf.

561
задан 4 March 2015 в 16:37

21 ответ

aking1012 прав. С дополнительной информацией о возможных встроенных изображениях, гиперссылках и т. Д. Было бы намного проще ответить на этот вопрос!

Вот пара сценариев и решений для командной строки. Используйте по своему усмотрению.

0
ответ дан 4 March 2015 в 16:37

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

  1. gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf $INPUTFILE

  2. "ps2pdf -dPDFSETTINGS=/ebook %s %s" % (input_file_path, out_file_path)

После слишком большого блуждания по сети I просто не смог найти подходящую библиотеку сжатия. Я наткнулся pdfcompressor.com. Это просто потрясающий сайт. Он сжимает PDF на 95% (15 МБ файлов). Поэтому я использовал селен и Tor для автоматизации сжатия. Оформить заказ на мой репозиторий Github. [GITHUB] ( https://github.com/gugli28/PdfCompressor )

0
ответ дан 4 March 2015 в 16:37

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

Преобразовать pdf в jpg файлы, используя pdfimages -j

. вместо файлов, вы должны выполнить промежуточный шаг:

for FILENAME in $(ls *.pbm); do convert $FILENAME ${FILENAME%.*}.jpg ;done

Команда convert из пакета imagemagick.

Затем используйте скантейлер , чтобы сделать из него tif.

На последнем шаге вы переходите к директории скантейлеров вне (где расположены tif) и применяете djvubind к этому каталогу.

Это должно резко уменьшить размер файла без большой потери качества текста. Если вы хотите более точный контроль над ocr-backend, вы можете попробовать djvubind --no-ocr и использовать ocrodjvu, чтобы добавить слой ocr впоследствии.

Если у вас есть цвет в вашем документе, все становится немного сложнее. Вместо djvubind вы можете использовать didjvu , а в scantailor вы должны перейти в смешанный режим и иногда выбирать цветные изображения вручную.

0
ответ дан 4 March 2015 в 16:37

В конце я написал свой собственный bash-скрипт для решения этой проблемы, он использует mogrify, convert и gs для извлечения pdf-страниц в виде png, изменения их размера, преобразования их в 1-битный bmp и последующей их перестройки в формате pdf. Уменьшение размера файла может быть более 90%. Доступно на http://www.timedicer.co.uk/programs/help/pdf-compress.sh.php .

0
ответ дан 4 March 2015 в 16:37

Вы можете попробовать это:

$ time pdftk myFile.pdf output myFile__SMALLER.pdf compress
GC Warning: Repeated allocation of very large block (appr. size 16764928):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 8384512):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 11837440):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 8384512):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 33525760):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 7254016):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 34041856):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 33525760):
    May lead to memory leak and poor performance.

real    0m23.677s
user    0m23.142s
sys     0m0.540s
$ du myFile*.pdf
108M    myFile.pdf
74M     myFile__SMALLER.pdf

Это быстрее, чем gs, но сжимает до 30% в этом случае для входного файла 107,5 МБ.

0
ответ дан 4 March 2015 в 16:37

Управляйте качеством сжатия:

#!/bin/sh
INPUT=$1; shift
OUTPUT=$1; shift
GS_BIN=/usr/bin/gs
QFACTOR="0.40"

# Image Compression Quality
#
# Quality HSamples VSamples QFactor
# Minimum [2 1 1 2] [2 1 1 2] 2.40
# Low     [2 1 1 2] [2 1 1 2] 1.30
# Medium  [2 1 1 2] [2 1 1 2] 0.76
# High    [1 1 1 1] [1 1 1 1] 0.40
# Maximum [1 1 1 1] [1 1 1 1] 0.15 

${GS_BIN} -dBATCH -dSAFER -DNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=${OUTPUT} -c "<< /ColorImageDict << /QFactor ${QFACTOR} /Blend 1 /HSample [1 1 1 1] /VSample [1 1 1 1] >> >> setdistillerparams" -f ${INPUT}
4
ответ дан 4 March 2015 в 16:37

Для меня опция gs screen была слишком плохой, а опция ebook слишком большой.

Мой оригинальный документ содержал текст в виде цветных и черно-белых изображений (в зависимости от страницы).

Лучшее решение, которое я нашел, было:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true -dDownsampleGrayImages=true -dDownsampleMonoImages=true -dColorImageResolution=130 -dGrayImageResolution=130 -dMonoImageResolution=130 -r130 -dNOPAUSE  -dBATCH -sOutputFile=output_lr.pdf input.pdf

Обратите внимание, что уровень сжатия не является линейным. в моем случае) максимальное разрешение, которое обеспечивает сжатие.

0
ответ дан 4 March 2015 в 16:37

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

К сожалению, ни одно из вышеуказанных решений не сработало :(. Тогда я понял, что где-то в сканере-> jpeg-> pdf обрабатывает размер страницы, раздутой с коэффициентом aprx 4. Все документы, которые я отсканировал, были размером Letter, но pdf имел размер

identify -verbose doc_orig.pdf | grep "Print size"
 Print size: 35.4167x48.7222

Я наконец получил желаемые результаты с помощью команды «convert», которая выполняла как изменение размера, так и этапы сжатия за один раз:

convert -density 135x135 -quality 70 -compress jpeg -resize 22.588% doc_orig.pdf doc_lowres.pdf

Обратите внимание, что doc_orig имел плотность 72x72 dpi.

0
ответ дан 4 March 2015 в 16:37

Лучшим для меня было

convert -compress Zip -density 150x150 input.pdf output.pdf

Другие способы:

#### gs
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf $INPUTFILE

### pdf2ps && ps2pdf
pdf2ps input.pdf output.ps && ps2pdf output.ps output.pdf

### Webservice
http://compress.smallpdf.com/de

С уважением

0
ответ дан 4 March 2015 в 16:37

Супер простой инструмент для сжатия PDF: GitHub page.

Установка в Ubuntu:

sudo add-apt-repository ppa:jfswitz/released

sudo apt-get update

sudo apt-get install pdf-compressor

Используется ghostscript.

0
ответ дан 4 March 2015 в 16:37

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

0
ответ дан 4 March 2015 в 16:37
  1. Я использую LibreOffice Draw , чтобы открыть PDF-файл.
  2. Затем я «экспортирую в формате PDF»
  3. И устанавливаю «Качество сжатия jpeg» на 50% и «Разрешение изображения» на 150 dpi

Это будет иметь хороший результат.

0
ответ дан 4 March 2015 в 16:37

Я обычно использую ps2pdf для этого (упрощенный синтаксис), что-то вроде этого:

ps2pdf -dPDFSETTINGS=/ebook BiggerPdf SmallerPDF

Я использую следующий скрипт на python, чтобы уменьшить размер всех файлов pdf в директории на производственном сервере. (8,04). Так что должно работать.

#!/usr/bin/python

import os

for fich in os.listdir('.'):
        if fich[-3:]=="pdf":
                os.system("ps2pdf -dPDFSETTINGS=/ebook %s reduc/%s" % (fich,fich))
0
ответ дан 4 March 2015 в 16:37

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

Я использовал комбинацию приведенной ниже команды ghostscript и команды из другого потока.

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true \
-dColorImageResolution=150 -dNOPAUSE  -dBATCH -sOutputFile=output.pdf input.pdf

Это уменьшило разрешение изображения до 150 точек на дюйм, уменьшив размер моего файла вдвое. Глядя на документ, заметных потерь качества изображения практически не было. Текст все еще отлично читается на моем Nexus7 2012 года.

0
ответ дан 4 March 2015 в 16:37

Вот скрипт для переписывания отсканированных PDF-файлов:

#!/bin/sh

gs  -q -dNOPAUSE -dBATCH -dSAFER \
    -sDEVICE=pdfwrite \
    -dCompatibilityLevel=1.3 \
    -dPDFSETTINGS=/screen \
    -dEmbedAllFonts=true \
    -dSubsetFonts=true \
    -dColorImageDownsampleType=/Bicubic \
    -dColorImageResolution=72 \
    -dGrayImageDownsampleType=/Bicubic \
    -dGrayImageResolution=72 \
    -dMonoImageDownsampleType=/Bicubic \
    -dMonoImageResolution=72 \
    -sOutputFile=out.pdf \
     $1

Вы можете настроить его немного, чтобы сделать его более пригодным для повторного использования, но если у вас есть только один PDF, вы можете просто заменить $1 с вашим pdf-файлом и загрузите его в терминал.

0
ответ дан 4 March 2015 в 16:37

Мой любимый способ сделать это - преобразовать PDF в PS и обратно. Это не всегда работает, хотя, но когда это работает, результаты хороши:

ps2pdf input.pdf output.pdf

Это также напрямую работает с PDF, как это предлагается в комментариях.

Некоторые пользователи также сообщают о большем успехе при использовании настроек электронной книги следующим образом:

ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf 
0
ответ дан 4 March 2015 в 16:37

Используйте следующую команду ghostscript :

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
  • -dPDFSETTINGS=/screen низкое качество, меньший размер. ( 72 dpi )
  • -dPDFSETTINGS=/ebook для лучшего качества, но немного больше PDF-файлов. ( 150 dpi )
  • -dPDFSETTINGS=/prepress аналогично настройке Acrobat Distiller «Prepress Optimized» ( 300 dpi )
  • -dPDFSETTINGS=/printer выбирает выход аналогично настройке Acrobat Distiller «Print Optimized» ( 300 dpi )
  • -dPDFSETTINGS=/default выбирает выход, предназначенный для использования в широком спектре применений, возможно за счет большего выхода файл
0
ответ дан 4 March 2015 в 16:37

Если у вас есть PDF с отсканированными изображениями , вы можете использовать convert для создания PDF с сжатием JPEG (Вы можете использовать этот метод на любом PDF, но вы ' потеряю всю текстовую информацию).

Например:

convert -density 200x200 -quality 60 -compress jpeg input.pdf output.pdf

Настройте плотность (например, 100x100) и качество в соответствии со своими потребностями.

В зависимости от входного значения JPEG сжатие может быть не лучшим выбором из-за артефактов сжатия. У вас есть выбор между BZip, Fax, Group4, JPEG, JPEG2000, Lossless, LZW, RLE или Zip в качестве альтернативных методов сжатия (некоторые разрешают только ч / б изображения). Подробнее см. здесь .

Мне удалось добиться отличных коэффициентов сжатия для отсканированных / сфотографированных документов (в зависимости от настроек). В зависимости от источника документа может потребоваться уменьшить глубину цвета (аргумент -depth).

0
ответ дан 4 March 2015 в 16:37

Так как эта ссылка была первой для меня, когда я искал в Google, я решил добавить еще одну возможность. Ни одно из вышеперечисленных решений не работало для меня на PDF, экспортированном из Inkscape (15 МБ), но я наконец смог уменьшить его до 1 МБ, открыв его в GIMP и снова экспортировав в pdf.

Еще одним вариантом, который был близок (но текст был немного нечетким), была утилита преобразования ImageMagick:

convert -compress Zip input.pdf output.pdf
0
ответ дан 4 March 2015 в 16:37

Недавно я обнаружил и настоятельно рекомендую pdfsizeopt .

Это гораздо более эффективно, чем любое из предыдущих программ CLI и GUI, которые я пробовал (включая convert, gs, pdftk и т. Д.) - хотя, возможно, медленнее с активированным pngout - и не имеет некоторых проблем (нет сильно пикселизированных / ухудшенных изображений, нет потери закладок и т. Д.).

Я рекомендую универсальную установку Unix :

  1. Установите все необходимые зависимости:

  2. Скачать и установить исполняемый файл:

    curl -L -o https://raw.githubusercontent.com/pts/pdfsizeopt/master/pdfsizeopt.single
    cp pdfsizeopt.single /usr/local/bin/pdfsizeopt
    

Использование:

pdfsizeopt original.pdf [compressed.pdf]
0
ответ дан 4 March 2015 в 16:37

загрузить изображение или даже файл PDF в Inkscape.

Из inkscape: Сохранить в векторном формате (как родной .svg).

Импортируйте векторные файлы в Scribus, редактируйте макет и экспортируйте / сохраняйте как .pdf оттуда

0
ответ дан 4 March 2015 в 16:37

Другие вопросы по тегам:

Похожие вопросы: