Utente:Alex brollo/Djvu

Creo qui una "pagina di appunti" sui file djvu; ci metterò soprattutto quello che non avevo capito dando un'occhiata distratta, e che invece ho capito approfondendo un po'.

Ovviamente, non ho alcuna consapevolezza di quello che non ho ancora capito.... e su questo tacerò. :-P

Premessa: NON voglio dimostrare che il formato djvu sia superore ad altri ed in particolare a ePub. Semplicemente, da wikisourciano curioso, stante che il djvu è il formato suggerito per alcuni aspetti del lavoro di source (la fase "proofread", ossia: la correzione del testo con l'immagine della pagina a fronte), voglio capire bene tutte le possibilità di questo formato. Vi sono analogie funzionali fra pdf e djvu; si potrebbe dire che djvu è la "variante opensource" del formato pdf. Non vi sono invece analogie con i formati che - come ePub - sono basati integralmente su XML.

L'immagine di testa
Tengo particolarmente a questa immagine, che riassume da un lato il punto a cui sono arrivato:
 * 1) nell'esplorazione del visualizzatore DjView;
 * 2) nell'esplorazione dell'organizzazione e gestione dei dati contenuti in una pagina djvu.

Chiedo quindi a chi legge di osservarla con molta, molta attenzione. L'immagine è un frammento di screenshot da DjView; è stato aperto un file djvu, è stata visualizzata una pagina, ingrandendone un particolare, ed è stata chiesta la visualizzazione del layer testo. Il layer testo non è quello originale, ma un layer modificato da me, e poi ricaricato nel "text layer". L'immagine dimostra che il caricamento è stato efficace e che il visualizzatore non "sente" alcuna anomalia.

In grigio, sul sottofondo, vedete le immagini delle parole. Si tratta del layer immagine; in realtà ogni pagina è un sandwich di vari elementi sovrapposti; uno è il layer testo, altri sono layer grafici. Giocando con le opzioni display del menu View, gli strati possono essere visualizzati uno a uno, o in combinazione.

In nero, primo piano, vedete la rappresentazione del testo nel cosiddetto "hidden layer".

Notate che l'immagine di ogni parola è perfettamente circoscritta da un rettangolo. Infatti, il file djvu contiene, per ogni parola, le esatte coordinate in pixel all'interno della pagina (origine: angolo in basso a sinistra). Notate che la visualizzazione del testo viene adattata in modo da riempire lo stesso rettangolo. Zoomando su djview, i tre elementi (immagine di sottofondo, testo, sagoma rettangolare) sono perfettamente conservati. Manovrando DjView, potreste selezionare un'area rettangolare dell'immagine e scegliere se copiare il testo oppure l'immagine. Già: se c'è uno strato testo, il testo di un'intera pagina si può acchiappare con un banale copiaincolla. Se c'è un fregio o un'immagine, potete ingrandirla, selezionarla e copincollarla, oppure esportarla direttamente in un file del tipo che volete voi, con il nome che volete voi. Il che mi risolve già un problema sourciano: come preparare rapidamente dei bei file immagine, con dei bei nomi, esplicativi (in genere uso nome del file djvu+numero pagina+numero d'ordine dell'immagine nella pagina, opzionale) da caricare su Commons. :-)

Adesso confrontiamo, nei vari rettangoli, immagine del testo e testo memorizzato.


 * now a file djvu:: notiamo che l'immagine sembra quasi l'ombra del testo. Notiamo che non ci sono spazi all'interno (lo spazio è usato come identificatore delle parole). E se cambiamo il layer testo e inseriamo uno spazio all'interno del rettangolo? Non succede niente di male. :-)

Le cose si fanno interessanti e istruttive nella parola There's. Qui i due strati differiscono radicalmente: nel layer testo (indovinate che c'è il mio zampino...) c'è il codice formalmente corretto di un template en.source. Il programma non batte ciglio. Un OCR si agiterebbe... djvu no. Non ha alcuna possibiltà di "annusare l'imbroglio". Copincollando lo strato testo, esporterei il codice del template perfettamente funzionante. :-) :-)

Idem nelle due parole running algorithm. Qui ho infilato nel testo il noto codice wiki per il grassetto; metà nella prima parola, metà nella seconda. Risultato: il copiaincolla del testo darebbe running algorithm, codice perfettamente funzionante che produrrebbe, dopo upload, un normalissimo grassetto.

Conclusione: in teoria, potrei inserire, nel layer testo,un marckup wiki funzionante. Posso usare la codifica utf-8; l'unica avvertenza è che devo "escappare" le doppie virgolette interne al testo:  \" . E' l'unico carattere riservato per le funzioni interne di parsing, se lavoro sul formato primitivo di djvu. Se invece converto il tutto in XML, suppongo che i caratteri siano almeno quattro:  & \ > <  da gestire con elementi html, altrimenti il parser XML si pianta.

Gira sul mio pc (da ieri sera) un piccolo script python, che uso per le esplorazioni, che, invocando le funzioni DjvuLibre:


 * 1) estrae il layer e lo parsa;
 * 2) costruisce al volo una pagina html in cui i dati sulle cooordinate sono presenti ma invisibili in editing del solo testo;
 * 3) modificato il testo con un editor html wysiwig (grazie a Cristian, ho scoperto KompoZer che va benissimo) e salvata la pagina html, lo script lo ritrasforma in formato testo djvu primitivo e lo ricarica sul file djvu. L'interfaccia utente, al momento, è un banalissimo prompt che chiede solo il numero della pagina su cui agire; dopodichè fa le sue cose, apre KompoZer sulla pagina html giusta, e in uscita finisce il lavoro. Grossolano, ma funzionante.

[fine della prima puntata]

Due ricette facili facili per scaricare e ricaricare testo nei file djvu
Copioincollo da it.source, tanto per fare prima. :-)

Lasciando perdere le complcazioni delle automazioni via python o che altro, vi do una semplice ricetta per scaricare, modificare, ricaricare lo "strato di testo" di un file djvu. Seguite i passi con precisione! e ditemi se qualcosa non è chiaro. La ricetta vale per chi ha Windows XP o inferiore, per chi ha Vista o superiori... non so. djvused miofile.djvu -e "select 1; print-txt" >testo.txt dove il numero 1 è il numero della pagina il cui testo verrà scaricato in testo.txt. Salvate questo file con il nome di scarica.bat. djvused miofile.djvu -e "select 1; set-txt testo.txt; save" e salvatelo come carica.bat. Stessa cosa di prima: se volete agire su una pagina diversa, modificate il numero 1.
 * 1) se non l'avete già fatto, scaricate e installate DjvuLibre. E' un'installazione leggera, non va a rimescolare file di sistema; poco più che una collezione di script autonomi. Installate la cartella in un posto comodo da raggiungere.
 * 2) caricateci dentro un file djvu che provenga da Internet Archive. Per semplicità, e per seguire meglio "la ricetta", rinominatelo miofile.djvu.
 * 3) con Blocco note aprite, nella setssa cartella, un file testo che contenga esattamente questo che segue:
 * 1) Sempre con Blocco note, create un secondo file testo con questo contenuto:
 * 1) A questo punto, se fate doppio click su scarica.bat, dopo un'attesa di qualche attimo comparirà dal nulla, nella cartella, il file testo.txt. Apritelo con Blocco note o il vostro editor preferito. Non lasciatevi impressionare! é facile da modificare se seguite queste due semplici regole:
 * 2) non toccare nulla tranne le parole comprese fra due doppie virgolette (il testo vero e proprio, il resto è codice);
 * 3) non infilare nelle parole che modificherete degli acapo nè dei caratteri doppie virgolette (si può fare ma per ora lasciamo perdere).
 * 4) Salvate il file modificato e fate doppio click sull'altro microprogramma, carica.bat.
 * 5) Se le cose sono andate come devono, il vostro testo modificato è stato infilato nel file djvu. :-)