У меня есть файл PDF размером 72,9 МБ, который мне нужно уменьшить до менее 500 КБ.
Файл представлял собой изображение в формате JPEG, которое я отсканировал, а затем преобразовал в PDF.
aking1012 прав. Имея дополнительную информацию о возможных встроенных изображениях, гиперссылках и т. Д., Было бы намного легче ответить на этот вопрос!
Вот несколько сценариев и решений для командной строки. Используйте по своему усмотрению.
Можете попробовать :
$ 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.
Это даст хороший результат.
Я использую эту функцию zsh для сжатия отсканированных документов:
pdf-compress-gray () {
local input="${1}"
local out="${2:-${input:r}_cg.pdf}"
local dpi="${pdf_compress_gray_dpi:-90}"
gs -q -dNOPAUSE -dBATCH -dSAFER -sProcessColorModel=DeviceGray -sColorConversionStrategy=Gray -dDownsampleColorImages=true -dOverrideICC -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dColorImageDownsampleType=/Bicubic -dColorImageResolution=$dpi -dGrayImageDownsampleType=/Bicubic -dGrayImageResolution=$dpi -dMonoImageDownsampleType=/Bicubic -dMonoImageResolution=$dpi -sOutputFile="$out" "$input"
}
Использование:
[pdf_compress_gray_dpi=100] pdf-compress-gray input.pdf [output.pdf]
Сверхпростой инструмент для сжатия PDF: GitHub page.
Установка на Ubuntu:
sudo add-apt-repository ppa:jfswitz/released
sudo apt-get update
sudo apt-get install pdf-compressor
Она использует ghostscript.
Обычно я просто использую
gs -dQUIET -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -dPDFSETTINGS=/printer \
-sOutputFile=output.pdf input.pdf
Я ответил на множество вопросов, один из которых - как уменьшить размер PDF-файла на AskUbuntu, Stack Overflow и Unix & Linux SE, и мне было интересно, что все эти варианты предложены в ответах, подразумеваемых.
Некоторые из них Параметры, связанные с взаимодействием :
-dQUIET
-dBATCH
-dNOPAUSE
Некоторые из них Параметры выбора устройства и выхода :
-sDEVICE
-sOutputFile
Некоторые из них Общие элементы управления и особенности , характерные для устройства PDFWRITE:
-r<resolution>
-dCompressFonts
Этот важный предварительно устанавливает «Параметры Distiller» , задокументированные параметры Adobe для управления преобразованием в PDF, на одну из четырех предустановленных настроек (экран, электронная книга, принтер , допечатная подготовка)
-dPDFSETTINGS
Все перечисленные ниже автоматически устанавливаются согласно -dPDFSETTINGS
, согласно этой таблице . Для проверки этих значений можно использовать команду, предложенную Куртом Пфайфлом . Вы можете настроить их, если хотите:
-dCompatibilityLevel
-dAutoRotatePages
-dEmbedAllFonts
-dSubsetFonts
-sColorConversionStrategy
-dDownsampleColorImages
-dDownsampleGrayImages
-dDownsampleMonoImages
-dColorImageResolution
-dGrayImageResolution
-dMonoImageResolution
-dColorImageDownsampleType
-dGrayImageDownsampleType
-dMonoImageDownsampleType
Ссылаясь на этот ответ и этот ответ , попробовав несколько ответов здесь и проведя кучу исследований и экспериментов, я ' Мы пришли к следующему. Обратите внимание, что я удалил часть команды -dCompatibilityLevel = 1.4
, использовавшуюся здесь в некоторых других ответах, потому что эта таблица указывает, что 1.5
или 1.7
автоматически используются для этого параметра сегодня (27 декабря 2020 г.), и нет необходимости изменять эти значения.
gs
) для сжатия input.pdf
] в output.pdf
3 основных уровня сжатия:
Примечание: вы также можете добавить -dQUIET
для подавления всего вывода в стандартный вывод. См: https://www.ghostscript.com/doc/current/Use.htm .
gs -sDEVICE = pdfwrite -dPDFSETTINGS = / printer -dNOPAUSE -dBATCH \
-sOutputFile = output.pdf input.pdf
gs -sDEVICE = pdfwrite -dPDFSETTINGS = / ebook -dNOPAUSE -dBATCH \
-sOutputFile = output.pdf input.pdf
gs -sDEVICE = pdfwrite -dPDFSETTINGS = / screen -dNOPAUSE -dBATCH \
-sOutputFile = output.pdf input.pdf
Вы также можете добавить время
перед командой, чтобы увидеть, сколько времени она займет (это работает с любой командой Linux). Пример вывода:
$ time gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dBATCH -sOutputFile=out.pdf in.pdf
GPL Ghostscript 9.50 (2019-10-15)
Copyright (C) 2019 Artifex Software, Inc. All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
Processing pages 1 through 15.
Page 1
Loading NimbusSans-Regular font from /usr/share/ghostscript/9.50/Resource/Font/NimbusSans-Regular... 5205104 3852122 2872760 1487237 3 done.
Page 2
Page 3
Page 4
Page 5
Page 6
Page 7
Page 8
Page 9
Page 10
Page 11
Page 12
Page 13
Page 14
Page 15
real 0m1.326s
user 0m1.142s
sys 0m0.048s
Если вы добавите -dQUIET
в команду, отобразится none вывода Ghostscript, и вы получите это (при использовании времени
в front):
$ time gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dBATCH -dQUIET -sOutputFile=out.pdf in.pdf
real 0m1.018s
user 0m0.976s
sys 0m0.040s
Вы также можете использовать ps2pdf
, который является оболочкой вокруг gs
и дает очень похожие, но не совсем идентичные результаты. Я предпочитаю напрямую использовать gs
, однако, как показано выше.
ps2pdf -dPDFSETTINGS = / принтер input.pdf output.pdf
ps2pdf -dPDFSETTINGS = / электронная книга input.pdf output.pdf
ps2pdf -dPDFSETTINGS = / screen input.pdf output.pdf
При тестировании приведенных выше команд gs
на выходе из моего pdf2searchablepdf
скрипта здесь я вижу следующее:
gs
) Документация: Для всех -d
(« d
efine») PDFSETTINGS
доступны, см. Здесь: https://www.ghostscript.com/doc/current/VectorDevices.htm#PSPDF_IN . Я процитировал этот раздел ниже, за исключением того, что я добавил значения DPI для каждого параметра, выделенные жирным шрифтом , как взяты из этой таблицы . Вы можете обратиться к этой таблице, чтобы увидеть десятки настроек нижнего уровня, выбранных gs
для каждой опции PDFSETTINGS
.
Элементы управления и функции, относящиеся к вводу PostScript и PDF
-dPDFSETTINGS = конфигурация
Задает для «параметров дистиллятора» одно из четырех предопределенных значений:
/ экран
(72 dpi) выбирает вывод с низким разрешением, аналогичный настройке Acrobat Distiller (до версии X) «Оптимизированный экран»./ ebook
(150 dpi) выбирает вывод со средним разрешением, аналогичный Acrobat Distiller (до версия X) параметр «Электронная книга»./ printer
(300 dpi) выбирает вывод, аналогичный настройке Acrobat Distiller «Оптимизированная печать» (до версии X)./ prepress
(300 dpi) выбирает вывод, аналогичный настройке Acrobat Distiller "Prepress Optimized" (до версии X)./ default
(72 dpi) выбирает вывод, предназначенный для использования в самых разных использования, возможно, за счет более крупного выходного файла.
Вы также можете увидеть определения различных параметров на этой странице: https://www.ghostscript.com/doc/current/Use.htm [118 4280]:
-dNOPAUSE
Отключает подсказку и паузу в конце каждой страницы. Обычно это следует использовать (вместе с-dBATCH
) при выводе на принтер или в файл; это также может быть желательно для приложений, где другая программа «управляет» Ghostscript.
-dBATCH
Вызывает завершение Ghostscript после обработки всех файлов, названных в командной строке, вместо того, чтобы переходить в интерактивный цикл чтения команд PostScript. Эквивалентно помещению-c quit
в конец командной строки
-dQUIET
Подавляет стандартные информационные комментарии в стандартный вывод. В настоящее время это необходимо при перенаправлении вывода устройства на стандартный вывод.
Мне нужно было уменьшить размер PDF-файла, который содержал полноцветные сканирования документа. Каждая из моих страниц представляла собой полноцветное изображение в том, что касается файла. Это были изображения страниц, содержащих текст и изображения, но они создавались путем сканирования на изображение.
Я использовал комбинацию нижеприведенной команды ghostscript и одну из них из другого потока.
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true \
-dColorImageResolution=150 -dNOPAUSE -dBATCH -sOutputFile=output.pdf input.pdf
Это позволило уменьшить разрешение изображения до 150 точек на дюйм, уменьшив размер моего файла пополам. Глядя на документ, я почти не заметил потери качества изображения. Текст по-прежнему отлично читается на моем 2012 Nexus7.
Для меня параметр экрана gs
тоже был плохо, а электронная книга
слишком велика.
Мой исходный документ содержал текст в виде цветных и черно-белых изображений (в зависимости от страницы).
Лучшее решение, которое я придумал, было:
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
Обратите внимание, что уровень сжатия не является линейным ... если я указывал 135, он не сжимал, я обнаружил, что 130 (в моем случае) является максимальным разрешением, при котором достигается сжатие.
Я настоятельно рекомендую pdfsizeopt .
Это гораздо более эффективно с точки зрения уменьшения размера, чем любое из предыдущих программ CLI и GUI, которые я пробовал (включая convert
, gs
, pdftk
и т. Д.) - хотя, возможно, медленнее с активированным pngout
, и не имеет некоторых из их проблем (без сильно пиксельных / деградированных изображений, без потери метаданных, например таблицы содержания и т. д.).
Теперь, если вам нужно достичь определенного размера, какими бы ни были последствия (в том числе ухудшение качества изображений до точки нечитаемости), это может быть не тот инструмент, который вам нужен, а как всегда работающий готовое решение для уменьшения ненужных больших размеров в PDF-файлах без потери читабельности, информации и приемлемого качества изображения, я думаю, что это лучшее t вариант. (Примечание: я обычно использую его после того, как впервые выполнил векторизацию-OCR в Adobe Acrobat [функция, которая раньше называлась «CleanScan»], которая может иметь огромное влияние на размер некоторых отсканированных текстовых документов.)
Я рекомендую общая установка Unix :
Загрузите и установите исполняемый файл:
curl -L -o https://raw.githubusercontent.com/pts/pdfsizeopt/master/pdfsizeopt.single
chmod + x pdfsizeopt.single
cp pdfsizeopt.single / usr / local / bin / pdfsizeopt
Использование:
pdfsizeopt original.pdf [compressed.pdf]
Примечание для пользователей mac , нашедших это сообщение (или пользователей Linuxbrew): существует формула установки Homebrew:
brew install --HEAD pts/utils/pdfsizeopt
Так как эта ссылка была первой для меня, когда я искал в Google, я подумал, что добавлю еще одну возможность. Ни одно из вышеперечисленных решений не работало для меня на pdf, экспортированном из Inkscape (15 mb), но мне наконец-то удалось уменьшить его до 1 mb, открыв его в GIMP и экспортировав снова как pdf.
Другой вариант, который был близок (но текст был немного нечетким), это утилита ImageMagick's convert:
convert -compress Zip input.pdf output.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
С уважением
Управление качеством сжатия:
#!/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}
Я столкнулся с той же проблемой, и был рад найти эту ветку. В частности, у меня был PDF-файл, созданный из отсканированных изображений, и мне нужно было уменьшить его размер в байтах в 6 раз.
К сожалению, ни одно из вышеперечисленных решений не помогло :(. Затем я понял, что где-то в процессе сканер-> jpeg-> pdf размер страницы увеличился примерно в 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.
അവസാനം ഞാൻ സ്വന്തമായി എഴുതി ഇത് പരിഹരിക്കുന്നതിന് ബാഷ് സ്ക്രിപ്റ്റ്, പിഡിഎഫ് പേജുകൾ പിഎൻജി ആയി എക്സ്ട്രാക്റ്റുചെയ്യാനും വലുപ്പം മാറ്റാനും 1 ബിറ്റ് ബിഎംപിയായി പരിവർത്തനം ചെയ്യാനും മൊഗ്രിഫൈ
, പരിവർത്തനം
, ജിഎസ്
എന്നിവ ഉപയോഗിക്കുന്നു. അവയെ പിഡിഎഫ് ആയി പുനർനിർമ്മിക്കുക. ഫയൽ വലുപ്പം കുറയ്ക്കൽ 90% കവിയുന്നു. http://www.timedicer.co.uk/programs/help/pdf-compress.sh.php എന്നതിൽ ലഭ്യമാണ്.
Вот скрипт для перезаписи сканированных pdfs:
#!/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-файл со сканированными изображениями , вы можете использовать convert
(ImageMagick) для создания PDF-файла со сжатием jpeg (Вы можете использовать этот метод для любого PDF-файла, но вы потеряете всю текстовую информацию.)
Например:
convert -density 200x200 -quality 60 -compress jpeg input.pdf output.pdf
Настройте параметры в соответствии с вашими потребностями
Мне удалось добиться отличных коэффициентов сжатия для отсканированных / сфотографировал документы (в зависимости от настроек). В зависимости от источника документа может потребоваться уменьшить глубину цвета (аргумент -depth
).
Мой любимый способ сделать это - преобразовать PDF в ps и обратно. Это не всегда работает, но когда это работает, результаты хорошие:
ps2pdf input.pdf output.pdf
Это также работает напрямую с PDF-файлами, как предлагается в комментариях.
Некоторые пользователи также сообщают о большем успехе при использовании настроек электронной книги следующим образом:
ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf
Используйте следующую команду ghostscript :
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook \
-dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
Резюме -dPDFSETTINGS
:
-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
выбирает вывод, предназначенный для использования в самых разных целях, возможно при расходы на выходной файл большего размера Ссылка: https://www.ghostscript.com/doc/current/VectorDevices.htm#PSPDF_IN :
Элементы управления и функции, характерные для ввода PostScript и PDF
-dPDFSETTINGS = конфигурация
Предварительно устанавливает «параметры дистиллятора» на одно из четырех предопределенных значений:
/ screen
выбирает низкий-разрешение вывода аналогично настройке Acrobat Distiller (до версии X) «Оптимизированный экран»./ ebook
выбирает вывод со средним разрешением, аналогичный настройке Acrobat Distiller (до версии X) «eBook»./ printer
выбирает вывод, аналогичный настройке Acrobat Distiller «Оптимизированная печать» (до версии X)./ prepress
выбирает вывод, аналогичный настройке Acrobat Distiller «Prepress Optimized» (до версии X) ./ default
выбирает вывод, предназначенный для широкого спектра применений, возможно, за счет более крупного файла вывода.
Показаны точные настройки для каждого из них, включая их значения DPI. в десятках вариантов в этой таблице: https://www.ghostscript.com/doc/current/VectorDevices.htm#distillerparams .
Я только что столкнулся с этой проблемой. Если вы используете простое сканирование, выберите текстовый режим для сканирования с низким разрешением, и вам не придется беспокоиться о материалах командной строки. Просто говорю.
Если преобразование в djvu также будет нормальным и если в нем нет цветов, вы можете попробовать следующее:
Преобразовать pdf в jpg файлы, используя pdfimages -j
Если вместо них вы получаете pbm файлы, вы должны сделать промежуточный шаг:
для FILENAME в $(ls *. pbm); сделайте преобразование $FILENAME ${FILENAME%.*}.jpg ;done
Команда преобразования находится в пакете imagemagagick.
Затем используйте scantailor, чтобы сделать из него tif.
На последнем шаге Вы переходите к scantailors out direcory (где находятся файлы tif) и применяете djvubind к этому каталогу. Это должно значительно уменьшить размер файлов без большой потери качества текста. Если вам нужен более тонкий контроль над ocr-бэкэндом, вы можете попробовать djvubind --no-ocr
и использовать ocrodjvu, чтобы добавить слой ocr после этого.
Если в вашем документе есть цвет, все немного усложнится. Вместо djvubind вы можете использовать didjvu, а в скантейлере вам придется перейти в смешанный режим и выбирать иногда цветные изображения вручную.
Для этого я обычно использую ps2pdf (более простой синтаксис), что-то вроде этого:
ps2pdf -dPDFSETTINGS=/ebook BiggerPdf SmallerPDF
я использую следующий питоновый скрипт для уменьшения размера всех pdf-файлов в dir на производственном сервере (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 в inkscape.
Из inkscape: Сохранить в векторном формате (как собственный .svg).
Импортировать векторные файлы в scribus, отредактировать макет и экспортировать / сохранить оттуда как .pdf
Я использовал следующие команды, но он не сильно сжал мой PDF-файл. Иногда после сжатия часть участка почернела.
gs -sDEVICE = pdfwrite -dCompatibilityLevel = 1.4 -dPDFSETTINGS = / ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile = output.pdf $ INPUTFILE
"ps2pdf -dPDFSETTINGS_file (входной_файл%, spath) out_file_path)
После долгого блуждания по сети я просто не смог найти нужную библиотеку сжатия. Я наткнулся на pdfcompressor.com
. Это просто потрясающий сайт. Сжимает pdf на 95% (15 Мб файлов). Поэтому я использовал селен и Tor для автоматизации сжатия. Проверьте мой репозиторий Github.
[GITHUB] ( https://github.com/gugli28/PdfCompressor )