aking1012 прав. С дополнительной информацией о возможных встроенных изображениях, гиперссылках и т. Д. Было бы намного проще ответить на этот вопрос!
Вот пара сценариев и решений для командной строки. Используйте по своему усмотрению.
Я использовал приведенные ниже команды, но это существенно не сжало мой файл PDF. Несколько раз часть была почерневшей после сжатия.
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf $INPUTFILE
"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 )
Вы можете попробовать это:
$ 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 МБ.
Для меня опция 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
Обратите внимание, что уровень сжатия не является линейным. в моем случае) максимальное разрешение, которое обеспечивает сжатие.
Супер простой инструмент для сжатия PDF: GitHub page.
Установка в Ubuntu:
sudo add-apt-repository ppa:jfswitz/released
sudo apt-get update
sudo apt-get install pdf-compressor
Используется ghostscript.
В конце я написал свой собственный bash-скрипт для решения этой проблемы, он использует mogrify
, convert
и gs
для извлечения pdf-страниц в виде png, изменения их размера, преобразования их в 1-битный bmp и последующей их перестройки в формате pdf. Уменьшение размера файла может быть более 90%. Доступно на http://www.timedicer.co.uk/programs/help/pdf-compress.sh.php .
Недавно я обнаружил и настоятельно рекомендую pdfsizeopt .
Это гораздо более эффективно, чем любое из предыдущих программ CLI и GUI, которые я пробовал (включая convert
, gs
, pdftk
и т. Д.) - хотя, возможно, медленнее с активированным pngout
- и не имеет некоторых проблем (нет сильно пикселизированных / ухудшенных изображений, нет потери закладок и т. Д.).
Я рекомендую универсальную установку Unix :
Установите все необходимые зависимости:
Скачать и установить исполняемый файл:
curl -L -o https://raw.githubusercontent.com/pts/pdfsizeopt/master/pdfsizeopt.single
cp pdfsizeopt.single /usr/local/bin/pdfsizeopt
Использование:
pdfsizeopt original.pdf [compressed.pdf]
Это будет иметь хороший результат.
Я только что столкнулся с этой проблемой сам. Если вы используете простое сканирование, выберите текстовый режим для сканирования с низким разрешением, и вам не придется беспокоиться о командной строке. Просто говорю.
Лучшим для меня было
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
С уважением
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 вы должны перейти в смешанный режим и иногда выбирать цветные изображения вручную.
Я столкнулся с той же проблемой и был рад найти эту ветку. В частности, у меня был 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.
Мой любимый способ сделать это - преобразовать PDF в PS и обратно. Это не всегда работает, хотя, но когда это работает, результаты хороши:
ps2pdf input.pdf output.pdf
Это также напрямую работает с PDF, как это предлагается в комментариях.
Некоторые пользователи также сообщают о большем успехе при использовании настроек электронной книги следующим образом:
ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf
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 года.
Контроль качества сжатия:
#!/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}
shift
. Первый параметр является входным файлом, второй выходной файл, и отдых параметров будет передан gs
, как.
– Ani Menon
14.05.2016, 01:53
Вот скрипт для переписывания отсканированных 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-файлом и загрузите его в терминал.
Так как эта ссылка была первой для меня, когда я искал в Google, я решил добавить еще одну возможность. Ни одно из вышеперечисленных решений не работало для меня на PDF, экспортированном из Inkscape (15 МБ), но я наконец смог уменьшить его до 1 МБ, открыв его в GIMP и снова экспортировав в pdf.
Еще одним вариантом, который был близок (но текст был немного нечетким), была утилита преобразования ImageMagick:
convert -compress Zip input.pdf output.pdf
convert -compress Zip
, казалось, растеризировал все векторы.
– Aashay Desai
22.02.2015, 15:39