martedì 21 aprile 2009

Ottenere l'icona della prima pagina di un pdf

la stada più documentata è l'uso di imagemagick.

sudo apt-get install imagemagick

convert -thumbnail 300x300 test.pdf test.png
convert -thumbnail 300x300 test.pdf[0] test.png


massimo santi nel suo blog
propone il comando per estrarre la thubnail di una intera cartella di pdf

FOR %i IN (*.pdf) DO convert -thumbnail 30000@ "%i"[0] -strip -quality 95 PNG8:"%i".png

purtroppo la versione 6.3.7 che viene installata attualmente non funziona correttamente, provabilmente un bug.

la seconda possibilità prevede l'uso del programma GhostScript.

l'ottimo Jed’s fridge nel suo blog condivide uno script che fa uso di gs

allo stesso scopo.

aggiunto il parameto necessario per convertire solo la prima pagina lo script fa esattamente quello che cercavo

#!/bin/bash

if [ $# -ne 2 ];then
echo “Usage: $0 target.pdf outfile”
exit
fi

TARGET=$1

# -dFirstPage=1 -dLastPage=1 => serve a convertire solo la prima pagina!
#-sDEVICE=png16m
OUTFILE=$2
gs \
-dSAFER \
-dBATCH \
-dNOPAUSE \
-sDEVICE=jpeg \
-r150 \
-dTextAlphaBits=4 \
-dGraphicsAlphaBits=4 \
-dMaxStripSize=8192 \
-dFirstPage=1 \
-dLastPage=1 \
-sOutputFile=${OUTFILE}_%d.jpg \
${TARGET}

il passo successivo è scrivere il codice php necessario a sfruttare questa potente applicazione nel vostro progetto:

la mia prima proposta è molto semplice

function pdf_get_thumbnail($pdf){
$pdf = escapeshellarg($pdf);
$OUTFILE = $pdf.'.jpg';
$cmd = "gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r150 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dMaxStripSize=8192 -dFirstPage=1 -dLastPage=1 -sOutputFile=$OUTFILE $pdf";

exec($cmd, $output, $return_var );
return ( $return_var == 0 ? true : false)

}

$output = pdf_get_thumbnail($TARGET);
echo "
$output
";


a seconda delle esigenze applicative è possibile gestire ulteriori parametri, come il percorso
e il nome e il formato del file in output, le dimensioni dell'anteprima e molto altro.

man gs

per ulteriori ispirazioni.

0 commenti: