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

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

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

369
задан 05.03.2015, 01:37

18 ответов

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

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

142
ответ дан 14.09.2019, 11:32
  • 1
    Большое спасибо за Ваши предложения, оболочка ghostscript творившие чудеса и уменьшило его вниз к 460 КБ:) – Anirudh 17.03.2012, 08:56
  • 2
    Это не обязательно верно. Если содержание пошло от изображения до текста, который является больше, чем fessible. [Это предполагает, что текст точно ocred] – spencer.sm 17.05.2015, 09:11
  • 3
    Я рекомендую Вам shrinkpdf.sh сценарий, можно настроить код для использования значения пкс/дюйм, которое Вы хотите (72 по умолчанию) и достигаете точно размера файла, необходимо пожертвовать наименьшим количеством качества. Это сделало меня способным загрузить отсканированный документ 11 МБ с максимум размер 3 МБ, не теряя большое качество. – s2t2 10.04.2016, 11:18
  • 4
    shrinkpdf работает отлично! – mattdlockyer 23.02.2017, 10:14
  • 5
    Где оболочка ghostscript, которую OP отсылает к askubuntu.com/questions/113544/… ? – Aashay Desai 05.03.2018, 18:44

Я использовал приведенные ниже команды, но это существенно не сжало мой файл 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 )

-1
ответ дан 14.09.2019, 11:32

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

$ 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
ответ дан 14.09.2019, 11:32

Для меня опция 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
ответ дан 14.09.2019, 11:32

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

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

sudo add-apt-repository ppa:jfswitz/released

sudo apt-get update

sudo apt-get install pdf-compressor

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

0
ответ дан 14.09.2019, 11:32

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

3
ответ дан 14.09.2019, 11:32

Недавно я обнаружил и настоятельно рекомендую 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]
3
ответ дан 14.09.2019, 11:32
  1. Я использую LibreOffice Draw , чтобы открыть PDF-файл.
  2. Затем я «экспортирую в формате PDF»
  3. И устанавливаю «Качество сжатия jpeg» на 50% и «Разрешение изображения» на 150 dpi

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

16
ответ дан 14.09.2019, 11:32
  • 1
    Худшее возможное решение проблемы! Это полностью испортило мой файл! – Alexander O'Mara 16.01.2018, 04:31

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

5
ответ дан 14.09.2019, 11:32
  • 1
    Это - единственный ответ в этом потоке, который решил мою проблему. Я преуменьшил Simplescan, но это действительно был ответ для меня, вместо того, чтобы бороться против Xsane в том, что, казалось, было бесконечными муками. – Burusothman 01.09.2015, 05:03

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

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

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

1
ответ дан 14.09.2019, 11:32

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

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

С уважением

9
ответ дан 14.09.2019, 11:32
  • 1
    Отличное решение. Легкий помнить и это принесло мой PDF от 32 до 3,5 МБ без разумной потери в удобочитаемости. – Louis Semprini 17.03.2018, 21:57
  • 2
    Мне понравился второй путь pdf2ps input.pdf temp.ps && ps2pdf14 temp.ps output.pdf && rm temp.ps – codeforester 07.11.2018, 09:16

Если преобразование в 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 вы должны перейти в смешанный режим и иногда выбирать цветные изображения вручную.

1
ответ дан 14.09.2019, 11:32

Я столкнулся с той же проблемой и был рад найти эту ветку. В частности, у меня был 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.

2
ответ дан 14.09.2019, 11:32

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

ps2pdf input.pdf output.pdf

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

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

ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf 
156
ответ дан 14.09.2019, 11:32
  • 1
    Это - очень простой и эффективный способ сделать это. Я был удивлен видеть, насколько этот метод сжал файлы. Благодарит Вас! – Fancy John 09.04.2013, 02:59
  • 2
    Несмотря на то, что этот подход стал моим любимым решением сжать файлы PDF, это разбивает URL-адреса, которые документ может иметь (которого не происходит с @Michael D' s подход). Кроме этого, ужасность - все, что я могу думать о выполнении этого отрывка! (: – Mester Hassan 07.12.2013, 00:01
  • 3
    А-ч @Rubens. Не знал о том, что это повреждает URL-адреса. Спасибо за добавление этого. – escape008 07.12.2013, 01:19
  • 4
    Это обходит защиту паролем... просто sayin' – Alex 07.01.2015, 08:28
  • 5
    ps2pdf возьмет pdfs в качестве исходных данных, таким образом, можно будет сделать это за один шаг: ps2pdf intput.pdf output.pdf – David 02.09.2016, 08:19

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

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

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

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

41
ответ дан 14.09.2019, 11:32
  • 1
    +1 для того, чтобы вниз выбрать изображения, но сохранить текст как векторы. Имевший огромное значение в стороне, не делая мой текст пикселизировано. – patriques 08.12.2014, 20:34
  • 2
    Фантастический, что можно настроить разрешение с этой командой - это дало мне лучшие результаты, чем просто использование dPDFSETTINGS =\screen – Charles 13.05.2019, 23:04

Контроль качества сжатия:

#!/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
ответ дан 14.09.2019, 11:32
  • 1
    ... так оба ВВОДА И ВЫВОДА тот же аргумент? Вы могли бы хотеть добавить инструкции по использованию. – Sinux 03.04.2016, 00:46
  • 2
    Отметьте shift. Первый параметр является входным файлом, второй выходной файл, и отдых параметров будет передан gs, как. – Ani Menon 14.05.2016, 01:53
  • 3
    Я думаю, что Вы хотите/HSample s и/VSample s, не/HSample и/VSample. Посмотрите, например, ps2pdf документы или справочник языка PostScript. Также, возможно, стоящий замечания, что позволенный диапазон QFactor от 0 до 1,000,000 и нижние значения, производят более высокое качество. – Robert Brax 02.08.2017, 21:31

Вот скрипт для переписывания отсканированных 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-файлом и загрузите его в терминал.

29
ответ дан 14.09.2019, 11:32
  • 1
    Работы обработка, Oli спасибо. You' ve, которому отвечают в значительной степени все I' ve, относительно которого спрашивают здесь до сих пор:-D – HenioJR 01.09.2010, 22:15
  • 2
    Это - хороший ответ, но в моем случае, по крайней мере, он берет партия из времени для преобразования несколько большого (> 10 МБ) файл PDF (больше чем минута). – Axoren 13.06.2013, 09:20
  • 3
    I' m не уверенный, что происходит, но PDF на 30 МБ результаты файл на 68 МБ. Вместо сокращения это увеличивается. Тот же вывод при использовании непосредственно ps2pdf, как указано в следующем ответе. – X_Trust 24.06.2013, 08:08
  • 4
    @EdVillegas, которым единственная вещь, которая я могу думать (для объяснения такого увеличения) состоит в том, что изображения имеют более низкое разрешение, чем те сгенерированные (72 точки на дюйм). Или так или иначе встраивание шрифтов впитывает весь шрифты. – afaller 25.06.2013, 21:31

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

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

convert -compress Zip input.pdf output.pdf
3
ответ дан 14.09.2019, 11:32
  • 1
    Я предполагаю, что это - то, что Вы подразумевали под " немного fuzzy" но просто для уточнения, convert -compress Zip, казалось, растеризировал все векторы. – Aashay Desai 22.02.2015, 15:39

Теги

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