Windows. Documenti elettronici

Esistono sostanzialmente due formati per memorizzare, archiviare e distribuire dei documenti elettronici: PDF e DjVu. Mentre il PDF è un formato all porpouse cioè adatto a tanti tipi di documento (può contenere sia elementi vettoriali che raster), il DjVu è specifico per i documenti raster, cioè primi fra tutti i documenti scannerizzati.

Mi sono interessato a capire qualcosa di più su questi due formati perché avere documenti di buona qualità e di dimensioni ragionevoli è molto comodo. Nella mia biblioteca di articoli infatti compaiono sia gli articoli scientifici scaricati direttamente dai siti delle riviste sia articoli scannerizzati, fatti da me prima fotocopiando i documenti originali e poi scannerizzando le fotocopie. La scelta dei formati e della qualità della scannerizzazione e la seguente trasformazione in pdf non è una operazione banale ed infatti le prime volte producevo dei file di dimensioni enormi! :)

In questa sezione parlerò prima di tutto di come scannerizzare al meglio gli articoli scientifici datati, quindi con testo ed immagini in bianco e nero o al massimo in gradazione di grigio. Dopodiché parlerò di come creare dei buoni PDF e dei buoni DjVu.

Scannerizzare documenti in bianco e nero

Gli scanner moderni supportano due protocolli per "parlare" con il pc: TWAIN e WAI. Il primo lo supportano praticamente tutti mentre il secondo lo si trova negli scanner più recenti. Siccome le specifiche di questi protocolli sono aperte, chiunque può realizzare dei programmi più o meno sofisticati che acquisiscano le immagini dallo scanner. Infatti esistono molti software su internet senza contare gli strumenti di default dei vari sistemi operativi (Ad esempio Raccolta Foto di Windows in Windows Vista italiano oppure FastScanner).

Usando uno strumento qualsiasi acquisite le immagini in formato tiff o pbm (no bmp) ad una risoluzione di 400dpi in maniera monocromatica. Se ci sono delle immagini in scala di grigi usate sempre tiff o pbm, una risoluzione di 300 dpi e la scala di grigi a 8 bit (256 gradazioni di grigio). Nel primo caso diminuite leggermente la luminosità nel secondo aumentate il contrasto.

Le immagini così ottenute potranno essere processate con GIMP. Ad esempio selezione testo importante, inverti selezione (C-I), cancella (DEL), inverti selezione (C-I), sposta selezione (C-A-mouse), ancora il layer e salva.

Una piccola panoramica sul PDF

PDF: Adobe

Alcuni programmi utili. Acrobat Reader, PDF Tools, ConcatPDF, PrimoPDF, Cute PDF Writer, PDFtk, pdfcrop, PDFedit, Xpdf and tools, PDFill.

Una piccola panoramica sul DjVu

DjVu: AT&T, DjVuLibre, Lizardtech e Celartem, djvu.org. Lettori: WinDjVu. Uno degli strumenti più potenti è Any2DjVu un convertitore ed OCR online.

Facciamo l'esempio di una pagina a 600 dpi monocromatica con molto testo. Il pdf di tale immagine comprensivo di OCR è poco più di 100 kB. Il DjVu, sempre comprensivo di OCR, ha una dimensione minore di 20 kB.

Dalle immagini scannerizzate al PDF

La semplice istruzione "convert -monochrome -adjoin *.tiff pippo.pdf" purtroppo crea grandi problemi di menoria. Attualmente la via più breve è creare un pdf per ogni tiff (vedi sezione immagini in LaTeX) e poi unire i pdf con pdfsam. Ecco il codice di pdfsam per il SendTo:

@echo off
@rem   *********************************************************
@rem   BATCH SCRIPT TO JOIN SEVERAL PDF IN A FOLDER
@rem   Dependencies:
@rem   pdfsam
@rem   *********************************************************
echo Converting...
pdfsam -o ./joined_pdf.pdf -d %1 -compress -overwrite concat

Date il comando sulla cartella dove si trovano i pdf.

Dalle immagini scannerizzate al DjVu

Ci sono pochi strumenti liberi disponibili. Capire la differenza tra djvu bundled (documento tipico) e indirect (documento per il web). Prima bisogna trasformare ogni singola immagine tiff o pbm in djvu con cjb2 (potete togliere lossylevel; usate una risoluzione uguale a quella a cui avete scannerizzato) e poi assemblare tutti i djvu così prodotti in un unico djvu con djvm. Se volete aggiungere uno strato testo tramite un OCR, usate Any2DjVu.

cjb2 -losslevel 150 -dpi 400 scan_1.tiff scan_1.djvu
djvm -c output.djvu pagina1.djvu pagina2.djvu ...

Se avete delle immagini bmp e volete convertirle in tiff o pbm usate ImageMagick:

mogrify -format tiff *.bmp

Infine ecco gli scriptini da mettere nel SendTo:

rem CJB2
cjb2 path completa. Problema della risoluzione e della compressione.
Soluzione: chiedere di volta in volta e suggerire con ImageMagick image info.

rem DJVM
djvm path completa. Problema dell'ordinamento alfabetico.
Workaround: script solo su cartella. 
Poi Fare un for sul risultato di dir /B /ON *.djvu

Dal PDF al DjVu e viceversa

Per trasformare un PDF in un DjVu ci sono sostanzialmente due strumenti: pdf2djvu e djvudigital. Il primo è un progetto a sé stante, mentre il secondo è un eseguibile del progetto DjVuLibre.

Sebbene djvudigital è più "ufficiale" rispetto a pdf2djvu, io consiglio sicuramente quest'ultimo. Primo perché funziona benissimo, secondo perché djvudigital non è compreso nell'installer per Windows del pacchetto DjVuLibre.

Ecco un esempio d'uso (fare uno script per il SendTo è banale ma bisogna richiedere alcune info! dpi, monochrome e lossy level)

rem Usare la path completa dell'eseguibile!
C:\Program Files\pdf2djvu\pdf2djvu.exe -o output.djvu --dpi=400
     --monochrome --loss-level=150 input.pdf

Esistono anche delle interfacce a queste strumenti ma le sconsiglio perché mancano di alcune opzioni fondamentali che invece si possono dare da riga di comando.

Ora la domanda è: quanto si riduce la dimensione del file trasformandolo da PDF a DjVu? Ho fatto qualche test su un documento monocromatico. Partendo da un PDF già abbastanza ottimizzato, il DjVu, creato con qualità esattamente uguale al PDF (600 dpi senza perdita), ha una dimensione di circa la metà (0.5) rispetto al PDF di partenza. Utilizzando la stessa risoluzione ma attivando l'algoritmo con perdita (lossy-level=150) si ottiene un DjVu con dimensione pari a circa il 20% (0.25) di quello inziale. Se invece di trasformare il PDF in DjVu si parte dalle immagini originali creando il DjVu direttamente (con perdita), si ottiene una dimensione pari a circa il 15% (0.15) del PDF.

PDF e OCR

Non esistono software gratuiti per aggiungere uno strato testo tramite OCR al pdf, cioè che con un semplice click del mouse rendano i pdf cercabili. Uno dei software più promettenti è Tesseract ma è un semplice OCR da linea di comando che deve essere accoppiato a tutta un'altra serie di strumenti per rendere un PDF effettivamente cercabile. Strumenti che non sono riuscito a reperire in rete. Esistono altri software OCR simili ma inferiori a Tesseract.

Anche gli strumenti forniti con gli scanner stessi producono risultati abbastanza scarsi ma comunque accettabili. La migliore affidabilità l'ho vista con ScanSoft OmniPage che però è a pagamento. Un altro strumento interessante (solo per Linux) è ClassNotes.

Riassumento se avete un pdf non cercabile ve lo tenete così. Se invece state scannerizzando delle pagine di testo, solitamente durante la generazione del pdf, gli strumenti forniti con gli scanner permettono l'OCR delle immagini e l'inserimento dello strato testo nel pdf.

DjVu e OCR

Per il djvu la situazione è molto migliore rispetto ai pdf. Innanzitutto esiste Any2DjVu, il convertitore online di cui abbiamo già parlato sopra, che permette anche di aggiungere uno strato OCR a un documento djvu preesistente. Purtroppo il riconoscimento del testo funziona solo per l'inglese.

Se volete o dovete fare tutto sul vostro pc potete usare varie strade. La più semplice (e infatti l'unica che ho mai usato) è quella di installare il programmino TiffDjvuOcr. È una semplice interfaccia per alcuni strumenti che devono essere preinstallati sul pc. Per funzionare ha bisogno della libreria DjVuLibre e del software OCR di Google Tesseract.

Scaricate il pacchetto di TiffDjvuOcr, scompattatelo e mettetelo manualmente in una cartella apposita dentro la directory dei programmi. La prima volta che lo eseguite vi chiederà di inserire i percorsi degli strumenti di cui necessita (DjVuLibre e Tesseract). Una volta specificate queste informazioni potete usarlo.

Per aggiungere lo strato OCR a un documento DjVu sarà sufficiente trascinare il documento dentro l'apposita icona di TiffDjvuOcr. Alla fine del processo (circa 10 secondi a pagina in un computer discretamente recente) il vostro file sarà aumentato di dimensione e conterrà lo strato testo. Di default viene usata la lingua inglese ma Tesseract supporta moltissime lingue (è sufficiente installarle e lo si può fare anche durante la prima installazione in automatico). Per dire a TiffDjvuOcr di usare Tesseract con un'altra lingua si è obbligati a usarlo da riga di comando.

Esistono altri software OCR ma in quel caso dovete reperire in rete o scrivervi da soli uno script che faccia tutto il necessario, cioè prende il djvu o le immagini scannerizzate, estragga il testo con il sotware OCR e lo reinserisca nel djvu con gli strumenti di DjVuLibre. Io non ne vedo la necessità dato che Tesseract funziona benissimo. Comunque eccone una lista. Al primo posto sicuramente c'è CUNEIFORM. Altri gratuiti ma scadenti sono TopOCR e SimpleOCR.

Filtri di ricerca per Windows

Foxit PDF IFilter, DjVu IFilter

Consigli Finali

Spesso la migliore soluzione è fornita dai software inclusi con lo scanner stesso.

Ad esempio io ho uno scanner CANON (stampante/scanner MP160). Si scarica l'ultima versione dei driver dal sito della CANON insieme all'ultima versione di MP Navigator, il loro software per la scansione. A volte questo software non funziona e riporta "Scansione non riuscita". Per risolvere il problema è sufficiente aggiungere alla PATH di Windows il percorso C:\Windows\Twain32\MP160 (o analogo), che sarebbe il percorso del driver dello scanner (ci ho messo giorni per risolvere il problema!). Questa soluzione non funziona se si fa partire il programma, anziché con il classico doppio click, con il bottone scan del vostro scanner.

MP Navigator permette di effettuare la scansione e fare piccole modifiche all'immagine, come il crop. Le immagini scansionate possono poi essere salvate oppure trasformate direttamente in PDF. Durante questa operazione è anche possibile attivare l'OCR (purtroppo non c'è la possibilità di modificare il testo così trovato, al contrario di OmniPage. Questa funzione sarebbe molto importante perché la qualità dell'OCR è abbastanza scadente). Non sarà potente come quello di OmniPage, ma se l'immagine è ben scannerizzata e le righe sono belle orizzontali, il risultato sarà soddisfacente.

Le pecche di MP Navigator. Sebbene MP Navigator permetta di gestire immagini già presenti sul PC, queste devono essere per forza in jpg e devono essere state create con MP Navigator stesso. Pertanto se dovete modificare pesantemente le immagini scannerizzate non potrete farlo con gli strumenti che più vi piacciono, altrimenti non sarete più in grado di usare l'OCR ma solo di creare il pdf. Un'altra pecca è che nelle semplici operazioni di modifica dell'immagine manca la possibilità di ritagliare la parte interessante ma lasciare l'intorno bianco e di dimensioni, ad esempio, pari ad un foglio A4. Inoltre, come già detto, MP Navigator non permette di rivedere manualmente il risultato dell'OCR prima di produrre il PDF.

Se vi interessa l'OCR quindi l'unica possibilità è quella di usare MP Navigator per la scansione e ritaglio dell'immagine, rinunciando quindi alla creazione di un formato di pagina comune tra i vari pdf (ad esempio A4). Per questa operazione scannerizzate le immagini a 400dpi o 600dpi come "TESTO (OCR)" e non come Immagine in bianco e nero. Mi raccomando. Alla fine delle scannerizzazioni, fate il crop e create il pdf selezionando nelle impostazioni OCR con la lingua corretta. Purtroppo non ho capito come cambiare la luminosità (cosa invece banale usando lo strumento predefinito di Windows in cui è possibile creare anche dei profili personalizzati).

Tra i software più famosi e potenti c'è invece OmniPage che spesso viene fornito con il software ufficiale dello scanner. Essendo una operazione commerciale viene distribuito in versioni molto vecchie che non supportano il layer testuale del pdf.