mercoledì 25 maggio 2011

Estrarre immagini da un pdf

Salve! :)




Ho realizzato un semplice script per estrarre immagini da un file pdf e traformarle nel formato jpg


Mi sono servito di due tool, Pdfimages e convert.

E' necessario installarli; perciò apriamo il terminale e digitiamo

$ sudo apt-get install imagemagick poppler-utils

A proposito di Pdfimages, dovete sapere che se si aggiunge lo switch "-j", esso estrarrà le immagini e li convertirà, in automatico, nel formato jpg; ma non è sempre così.

Infatti nel suo man si legge:

"-j  Normally, all images are written as PBM (for monochrome  images)
              or  PPM  (for  non-monochrome  images) files.  With this option,
              images in DCT format are  saved  as  JPEG  files.   All  non-DCT
              images are saved in PBM/PPM format as usual."

Ragion per cui ho ritenuto opportuno aggiungere, nello script, il comando convert, che mi rende la vita molto più semplice e sorridente :D

Aspettate! Prima di procedere con il post, non posso non ricordare Lui, il grande Lightuono (qui), amico caro. Il caro Light mi ha dato alcune dritte preziose, che saranno debitamente menzionate nel corpo dello script.

Sempre a proposito del caro Light, vi annuncio che ci stiamo organizzando per la realizzazione di un progetto. E' una sorpresa; perciò non aggiungo altro. :D Vi dico solo di aspettarvi, su questo blog, qualcosa di ... :D

Passiamo allo script

#!/bin/bash
#autor: Bit3lux

#name: estrai immagini da pdf in formato jpg
lunghezza=${#1}

if [ $# -gt 1 ]; then
        echo -e "Devi passare un solo file\n\n"
        exit 1
fi

if [ ${1:$lunghezza-4} != ".pdf" ]; then
        echo -e "Devi inserire un file PDF\n\n"
    exit 1
fi

#crea una cartella

mkdir $1_immagini

#estrai le immagini del pdf nella cartella creata.

pdfimages -j $1 $1_immagini/Immagine

#converti eventuali immagini ppm in jpg

convert $1_immagini/*.ppm $1_immagini/Immagine.jpg

#cancella eventuali immagini ppm

rm $1_immagini/*.ppm

exit 0

Copiate il corpo dello script (il testo in blu) su un file di testo, salvatelo e nominatelo estrai.sh

Mettete il file (estrai.sh) nella cartella Documenti. Cartella in cui devono essere presenti i pdf da cui si vuole estrarre le immagini in jpg.

Aprite il terminale e spostatevi nella cartella documenti

$ cd Documenti

da qui diamo i permessi allo script per renderlo eseguibile; perciò digitiamo

$ sudo chmod +x estrai.sh

Poi, restando sempre nella cartella documenti, lanciamo lo script

$ ./estrai.sh nomefile.pdf


Esempio:

Voglio estrarre le immagini dal file guida.pdf, contenuto nella cartella documenti.

Mi sposto in quella cartella con

$ cd Documenti

e lancio lo script

$ ./estrai.sh guida.pdf

In questo modo, nella directory Documenti, verrà creata una cartella che conterrà le immagini.jpg estratte dal pdf.

P.S. Può succedere, in rari casi, che nel terminale ricevete qualche segnale di errore, non preoccupatevi e aspettate che lo script completi il suo lavoro. :))

Ciao :)

7 commenti:

  1. Molto carino e utile! :)

    Come primo controllo non sarebbe male verificare che venga passato un parametro:


    if [ $# -eq 0 ]; then
    echo -e "Devi passare un file!\n\n"
    exit 1
    fi


    Altrimenti in output ti dice vita morte e miracoli di Pdfimages più l'output di errore di convert ecc.

    Ed aspetto trepidante l'annuncio del progetto :D

    RispondiElimina
  2. @Mattux
    Grazie di cuore. :D Correggo immediatamente. Ciao :)

    RispondiElimina
  3. Ma si può fare molto di più :). Esempio:

    1. Trasformare questo script monofile in multifile.

    2. Impedire di eseguire il file come utente ROOT

    3. Verificare che il parametro passato effettivamente è un file e non una directory, link, etc..

    4. Prima di cancellare i file, verificare con una domanda se sul serio si vuole cancellare quei file indicando anche la posizione in cui vi trovate.

    Come vedete molte altre cose si possono fare :)

    RispondiElimina
  4. @Lightuono
    Certo! Scommetto che alcuni punti ti sono pure sfuggiti, vero? :D :D

    Aldo D'Offizi

    :D :D :D

    RispondiElimina
  5. guide sempre utili, grazie bit :D

    RispondiElimina
  6. @picchiopc
    Grazie a te, caro Picchio :)

    RispondiElimina