altre destinazioni

vedi anche

ultimi post

ultimi commenti

tag principali

categorie

archivi

powered by

  • WPFrontman + WP

friends

copyright

  • © 2004-2011
    Ludovico Magnocavallo
    tutti i diritti riservati

Vita con il Droide / convertire pdf in cbz

19 febbraio 2011

0 commenti

tag

categorie

Come saprà chi ha letto il mio ultimo post, qualche tempo fa ho preso un cellulare con sistema operativo Android. Uno dei motivi per cui volevo un apparecchio moderno era per poter finalmente leggere — grazie allo schermo ad alta risoluzione — vecchi libri e manuali di pubblico dominio, di cui esistono solo versioni in pdf create scansionando i testi senza OCR. Il che, tradotto in parole comprensibili anche ai non geek, significa dover gestire testi che non posso essere reimpaginati automaticamente per adattarli a uno schermo piccolo, e che sono poi in genere anche molto pesanti, sia per l’occupazione di spazio che per le risorse di elaborazione necessarie a visualizzarli.

Speravo che con un dispositivo moderno, potente, con uno schermo ad alta risoluzione, e la disponibilità di parecchie applicazioni per la visualizzazione di PDF, sarei stato finalmente in grado di leggere i testi che mi interessano da tempo. Le cose si sono rivelate come al solito meno semplici del previsto.

Prima di tutto, lo schermo ha sì una ottima risoluzione (800×480) ma è piccoletto, troppo per visualizzare i PDF a pagina intera. Occorre quindi impostare uno zoom sulla larghezza della pagina, cosa fattibile in quasi tutti i programmi che non bloccano però lo scorrimento orizzontale, rendendo la lettura parecchio scomoda: invece di avere uno scorrimento verso il basso continuo, la pagina “galleggia” nello schermo e basta un tocco poco preciso per perdere uno dei margini laterali.

Altro e più serio problema, la visualizzazione a schermo e ancora più la navigazione con questo tipo di documenti, sono lentissime: i programmi devono infatti rigenerare delle immagini da una descrizione (quella contenuta nel file PDF) adattandole alle dimensioni dello schermo e allo zoom scelto, con un dispendio di risorse enorme che introduce pause a volte anche molto lunghe che rendono la lettura poco fluida, e che ha inoltre come effetto collaterale non trascurabile di consumare un sacco di batteria.

In sintesi, un PDF creato da scansioni senza riconoscimento dei caratteri è sì un modo comodo per mettere a disposizione un testo in un formato ormai universalmente accettato su qualsiasi piattaforma, ma è anche un formato profondamente inefficiente soprattutto su dispositivi che — per quanto potenti siano diventati — sono sempre limitati. Per fortuna, tra gli “smanettoni” si è diffuso negli ultimi anni un formato per la condivisione di fumetti (comics), che nasce proprio per gestire testi creati da scansioni, e che oltre ad essere efficiente e facilissimo da creare, ha un ampio supporto di programmi spesso davvero ben fatti e molto più user friendly (e veloci, ovviamente) dei lettori di PDF. Vediamo quindi come fare per convertire un file PDF in file cbz, in modo da poterlo usare con i programmi per la lettura dei fumetti (io uso Droid Comic Viewer, ovviamente gratuito).

La conversione è abbastanza semplice: il formato cbz altro non è che un file zip, contenente una immagine per ogni pagina di un testo, numerata in ordine progressivo. I programmi che useremo (su Linux, ma esistono probabilmente anche sui sistemi operativi più scarsi) sono tre: pdftoppm, gimp, e convert (una delle utility di ImageMagick). Per fare una prova, potete scaricare uno dei vecchi manuali sulla teoria e la pratica dell’amplificazione valvolare che trovate qui, ad esempio questo che sto appundo leggendo e ho convertito ieri.

La prima operazione è creare una cartella dove finiranno le nostre immagini convertite. Fatto questo, convertiamo un paio di pagine del testo, per capire con che dimensioni di immagine abbiamo a che fare, e se e dove posizionare il riquadro di ritaglio che ci permetterà di minimizzare lo spazio bianco, soprattutto ai lati.

mkdir "Norman Crowhurst - Basic Audio - Vol. 1"
cd Norman Crowhurst - Basic Audio - Vol. 1/
pdftoppm -f 14 -l 15 -gray ../crowhurst_basic_1.pdf test

Le opzioni che abbiamo passato a pdftoppm sono: la pagina di partenza (-f, from), la pagina finale (-l, last), il tipo di immagine (- gray, in toni di grigio), il nome del file pdf, e il nome da usare per i file generati. Ho scelto due pagine a caso, l’unica cosa importante è che siano una pagina pari e una dispari, dato che a volte i margini sono differenti. Nella nostra cartella troveremo quindi ora due immagini estratte dal file PDF.

A questo punto, apriamo i file con gimp, scegliamo lo strumento per creare una selezione, e selezionamo la parte di testo dell’immagine verificando che i margini siano corretti sia per le pagine pari che per le dispari. Nei dettagli dello strumento selezione dovremo a questo punto leggere la dimensione del riquadro, e la sua posizione sull’immagine. Se l’immagine ha una risoluzione simile a quella del nostro device, possiamo scegliere un riquadro con larghezza uguale alla risoluzione massima del nostro schermo, ed evitarci di rimpicciolire l’immagine quando la generiamo, o di farla rimpicciolire al programma che useremo per legger eil testo. Nel mio caso, gli 800 pixel del lato lungo del mio schermo sono sufficienti per contenere tutto il testo in larghezza. Trovate le misure del riquadro di ritaglio (e l’eventuale rapporto di riduzione, esercizio che lascio fare a voi se necessario), proviamo a generare qualche immagine di prova.

pdftoppm -f 14 -l 21 -W 800 -H 1230 -x 244 -y 92 -gray ../crowhurst_basic_1.pdf test2

Le opzioni che abbiamo passato a pdftoppm definiscono le dimensioni del riquadro (-W, -H) e la sua posizione (-x, -y) e sono impostate con i dati che abbiamo rilevato sopra in gimp. Se le immagini sono corrette, togliamo i parametri che limitano il numero di pagine generate in modo da ottenere un’immagine per ogni pagina. A questo punto, ci resta solo da convertire le immagini in un formato compresso e supportato dal lettore che useremo (nel mio caso png)

for f in $(ls *pgm); do convert $f $(echo $f |sed s/.pgm/.png/); done

cancelliamo i file pgm che non ci servono più

rm *pgm

e impacchettiamo il tutto nel file cbz che copieremo sul device per la lettura

cd ..
zip -r Norman Crowhurst - Basic Audio - Vol. 1.cbz Norman Crowhurst - Basic Audio - Vol. 1

Sul lettore, io blocco la visualizzazione in orizzontale e lo zoom a fit width. Semplice, no?