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

298

У меня есть файл в формате 72.9MB, который мне нужно сжать до менее 500 КБ.

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

    
задан tamimym 16.03.2012 в 17:12
источник

20 ответов

119

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

Вот несколько вариантов сценариев и командной строки. Используйте, как сочтете нужным.

ответ дан v2r 16.03.2012 в 17:28
источник
416

Используйте следующую команду 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 «Оптимизация печати» ( 300 dpi )
  • -dPDFSETTINGS=/default выбирает вывод, предназначенный для использования в самых разных целях, возможно, за счет большего выходного файла
ответ дан Michael D 15.02.2013 в 13:53
123

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

ps2pdf input.pdf output.pdf

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

    
ответ дан don.joey 16.01.2013 в 09:18
106

Если у вас есть 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 ).

    
ответ дан someonr 19.05.2014 в 17:39
31

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

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

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

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

    
ответ дан mlitty 19.01.2014 в 06:25
24

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

    
ответ дан Oli 31.08.2010 в 20:29
17

Я обычно использую 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))
    
ответ дан Javier Rivera 01.09.2010 в 07:26
13
  1. Я использую LibreOffice Draw , чтобы открыть pdf.
  2. Затем я экспортирую в формате pdf
  3. И установите «качество сжатия JPEG» на 50% и «разрешение изображения» на 150 т / д

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

    
ответ дан Marius4674 14.06.2016 в 09:59
6

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

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

рассматривает

    
ответ дан oxidworks 21.04.2016 в 11:03
5

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

    
ответ дан user179584 29.07.2013 в 21:13
3

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

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

convert -compress Zip input.pdf output.pdf
    
ответ дан mbroshi 13.02.2014 в 12:32
3

В конце я написал свой собственный скрипт bash для его решения, он использует mogrify , convert и gs , чтобы извлечь pdf-страницы в виде png, изменить их размер, преобразовать в 1-бит bmp и затем перестроить их как pdf. Уменьшение размера файла может превышать 90%. Доступно по адресу Ссылка .

    
ответ дан scoobydoo 21.09.2016 в 12:15
2

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

#!/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}
    
ответ дан user525719 02.04.2016 в 04:11
1

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

Преобразование PDF в файлы jpg с использованием pdfimages -j

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

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

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

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

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

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

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

    
ответ дан student 11.09.2011 в 08:43
1

загрузите изображение или даже файл pdf в файл inkscape.

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

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

    
ответ дан ape 28.07.2013 в 20:45
1

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

К сожалению, ни одно из вышеперечисленных решений не работало :( Тогда я понял, что где-то в процессе сканера > jpeg- > pdf размер страницы раздувался в 4 раза. Документы, которые я просматривал были все буквы размера, но в формате 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.

    
ответ дан Kalpit 20.03.2016 в 11:56
0

Векторизация всех шрифтов поможет. Не вставляйте шрифты в файл.

Используйте небольшое разрешение изображения: большую часть времени вы действительно не нуждаетесь в HD-изображениях. Будьте осторожны с программным обеспечением изображения, таким как Gimp, он может сделать очень большой сжатый файл (остерегайтесь, как вы его сжимаете). Я не люблю проприетарное программное обеспечение, но некоторые инструменты сжатия Adobe Photoshop лучше, чем Gimp.

Дополнительно: вам нужно поместить изображение в файл PDF?

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

@Lord of Time прав: переход от 72Mo к 500Ko будет тяжелым, не меняя что-то радикально.

    
ответ дан smonff 31.05.2012 в 01:13
0

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

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

sudo add-apt-repository ppa:jfswitz/released

sudo apt-get update

sudo apt-get install pdf-compressor

Он использует ghostscript.

    
ответ дан John 12.10.2015 в 12:39
0

Недавно я обнаружил и настоятельно рекомендую 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]
    
ответ дан Serge B. 02.03.2018 в 14:37
0

Вы можете попробовать следующее:

$ 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.5MiB.

    
ответ дан SebMa 09.08.2018 в 16:01
-2

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

После слишком большого блуждания по сети я просто не мог найти нужную библиотеку сжатия. Я столкнулся с pdfcompressor.com . Это просто потрясающий сайт. Он сжимает pdf на 95% (15 Мбайт файлов). Поэтому я использовал селен и Tor для автоматизации сжатия. Оформить заказ на репозиторий Github. [GITHUB] ( Ссылка )

    
ответ дан Prince 08.05.2018 в 11:10