Pred nekaj dnevi sem dobil od sostanovalke eno zanimivo nalogo – zmanjšati velikost pdf dokument-a. Ker je njen pdf dokument bil prevelik in ga ni mogla naložit na “moodle” sistem me je prosila, če ji pomagam čimbolj zmanjšati velikost samega pdf dokument-a in pri tem ohraniti slike in besedilo v dokumentu kvalitetne v takšni meri, da bo kvaliteta še vedno primerna za samo prezentacijo na projektorju. Po nekaterih neuspelih poizkusih z raznimi “online pdf konverterji” sem le našel zelo luštno skripto.
Sama skripta je napisana v bashu in jo je zelo enostavno uporabit v konzoli. Tistim, ki imate torej pdf dokument nad 10Mb ali še celo več enostavno uporabite spodnjo skripto, ki vam bo velikost pdf dokument-a zelo zmanjšala, in kar je še najboljše pri tem, sama kvaliteta slik in besedila bo ostala na visokem nivoju.
Najprej moramo še namestit poppler-utils in ghostscript in sicer vpišemo komando:
sudo apt-get install poppler-utils ghostscript
Nato pa spodnjo skripto prekopirajte v urejevalnik, npr. beležnico in jo shranite kot optimize_pdf.sh in jo na to le v konzoli enostavno zaženite kot ./pot/do/datoteke optimize_pdf.sh -s stari.pdf -o novi.pdf
#!/bin/bash DPI=150 PDF_DESTINATION="" help() { echo "optimize_pdf help" echo "-h : show this help" echo "-d : (optional) output pdf document resolution, by default : 150" echo "-s : pdf source file, this file must exist" echo "-o : pdf output file" } full_path() { if [ -z $1 ]; then exit; else if [ `expr substr ${1:-a} 1 2` != "/" ]; then FULL_FILE=`pwd`"/"$1 fi fi echo $FULL_FILE } isNumeric(){ echo "$@" | grep -q -v "[^0-9]" ;} while getopts "s:o:d:h" flag do case $flag in #Source : source file "s") PDF_FILE=`full_path $OPTARG` if [ ! -e $PDF_FILE ]; then echo "Please provide a valid source file" exit=1 fi ;; #Output : output file "o") PDF_DESTINATION=$OPTARG ;; #Dpi : desired resolution "d") if [ -z `isNumeric $OPTARG` ]; then DPI=$OPTARG else echo "Please provide a numeric value for your DPI" exit=1 fi ;; "h") exit=1 ;; esac done #Is there a target file? if [ -z $PDF_DESTINATION ]; then echo "Please provide a file name for output" exit=1 fi #At least one error, we're not going any further if [ $exit ]; then help exit fi pdftops \ -paper match \ -nocrop \ -noshrink \ -nocenter \ -level3 \ -q \ "$PDF_FILE" - \ | ps2pdf14 \ -dEmbedAllFonts=true \ -dUseFlateCompression=true \ -dOptimize=true \ -dProcessColorModel=/DeviceRGB \ -dUseCIEColor=true \ -r72 \ -dDownsampleGrayImages=true \ -dGrayImageResolution=$DPI \ -dAutoFilterGrayImages=false \ -dGrayImageDownsampleType=/Bicubic \ -dDownsampleMonoImages=true \ -dMonoImageResolution=$DPI \ -dMonoImageDownsampleType=/Bicubic \ -dDownsampleColorImages=true \ -dColorImageResolution=$DPI \ -dAutoFilterColorImages=false \ -dColorImageDownsampleType=/Bicubic \ -dPDFSETTINGS=/prepress \ - "$PDF_DESTINATION"
P.S.: Sostanovalki je ta skripta zmanjšala velikost PDF dokument-a iz 12,3 MB na 1,4 MB.