У меня есть PDF-файл размером 72,9 МБ, который мне нужно сжать до 500 КБ.
Файл представлял собой изображение в формате JPEG, которое я отсканировал, а затем преобразовал в pdf.
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 )
Если преобразование в 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 вы должны перейти в смешанный режим и иногда выбирать цветные изображения вручную.
В конце я написал свой собственный bash-скрипт для решения этой проблемы, он использует mogrify
, convert
и gs
для извлечения pdf-страниц в виде png, изменения их размера, преобразования их в 1-битный bmp и последующей их перестройки в формате pdf. Уменьшение размера файла может быть более 90%. Доступно на http://www.timedicer.co.uk/programs/help/pdf-compress.sh.php .
Вы можете попробовать это:
$ 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 МБ.
Управляйте качеством сжатия:
#!/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}
Для меня опция 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-файл, сгенерированный из отсканированных изображений, и мне нужно было уменьшить его размер в байте в 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.
Лучшим для меня было
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
С уважением
Супер простой инструмент для сжатия PDF: GitHub page.
Установка в Ubuntu:
sudo add-apt-repository ppa:jfswitz/released
sudo apt-get update
sudo apt-get install pdf-compressor
Используется ghostscript.
Я только что столкнулся с этой проблемой сам. Если вы используете простое сканирование, выберите текстовый режим для сканирования с низким разрешением, и вам не придется беспокоиться о командной строке. Просто говорю.
Это будет иметь хороший результат.
Я обычно использую 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))
Мне нужно было уменьшить размер PDF-файла, который содержал полноцветное сканирование документа. Каждая из моих страниц была полноцветным изображением. Это были изображения страниц, содержащие текст и изображения, но они были созданы путем сканирования изображения.
Я использовал комбинацию приведенной ниже команды ghostscript и команды из другого потока.
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true \
-dColorImageResolution=150 -dNOPAUSE -dBATCH -sOutputFile=output.pdf input.pdf
Это уменьшило разрешение изображения до 150 точек на дюйм, уменьшив размер моего файла вдвое. Глядя на документ, заметных потерь качества изображения практически не было. Текст все еще отлично читается на моем Nexus7 2012 года.
Вот скрипт для переписывания отсканированных 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-файлом и загрузите его в терминал.
Мой любимый способ сделать это - преобразовать PDF в PS и обратно. Это не всегда работает, хотя, но когда это работает, результаты хороши:
ps2pdf input.pdf output.pdf
Это также напрямую работает с PDF, как это предлагается в комментариях.
Некоторые пользователи также сообщают о большем успехе при использовании настроек электронной книги следующим образом:
ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf
Используйте следующую команду 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
выбирает выход, предназначенный для использования в широком спектре применений, возможно за счет большего выхода файл Если у вас есть 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
).
Так как эта ссылка была первой для меня, когда я искал в Google, я решил добавить еще одну возможность. Ни одно из вышеперечисленных решений не работало для меня на PDF, экспортированном из Inkscape (15 МБ), но я наконец смог уменьшить его до 1 МБ, открыв его в GIMP и снова экспортировав в pdf.
Еще одним вариантом, который был близок (но текст был немного нечетким), была утилита преобразования ImageMagick:
convert -compress Zip input.pdf output.pdf
Недавно я обнаружил и настоятельно рекомендую 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]
загрузить изображение или даже файл PDF в Inkscape.
Из inkscape: Сохранить в векторном формате (как родной .svg).
Импортируйте векторные файлы в Scribus, редактируйте макет и экспортируйте / сохраняйте как .pdf оттуда