Mini guida alla conversione di formato nei documenti.
unoconv è un piccolo programma che permette di convertire un documento da un formato ad un altro, Ad esempio la conversione di un file DOCX al formato DOC.
Per funzionare richiede Python e LibreOffice.
È un programmino ideale per automatizzare conversioni massive ed è disponibile per tutti i sistemi operativi.
Vediamo come funziona.
Ipotizziamo di lavorare da un computer Linux, di voler convertire il file Word "esempio.docx" nel formato OpenDocument "esempio.odt".
Inoltre ipotizziamo di avere nella directory "esempi" un migliaio di file Word DOCX da convertire nel formato OpenDocument ODT.
Conversione semplice
Procediamo con la conversione diretta del file "esempio.docx"
unoconv -f odt esempio.docx
In questa sintassi:
-f odt
: questa opzione istruisce unoconv a convertire la sorgente in formato OpenDocument ODT;esempio.docx
: è il file origine da convertire.
Otterremo come risultato il file esempio.odt.
Se vogliamo convertire il file in formato HTML possiamo usare la seguente sintassi:
unoconv -f html esempio.docx
La lista completa dei formati gestiti da unoconv
si possono trovare in questa pagina:
http://dag.wiee.rs/home-made/unoconv/
Conversione più avanzata
Rivisitiamo la sintassi sopra usata introducendo una variante dove istruiamo unoconv
per generare un file di output con un nome diverso dal file sorgente.
Rivisitando la sintassi sopra usata desidero che il file di output si chiami "miofile1"
unoconv -f odt -o miofile1 esempio.docx
La sintassi è intuitiva, lineare e semplice. L'estensione al nuovo file viene applicata automaticamente. Volendo possiamo specificarla nella riga di comando.
Complichiamo leggermente la sintassi indicando anche una diversa directory di output. In questo caso se non esiste la directory unoconv
la creerà
unoconv -f odt -o out/miofile1 esempio.docx
Facciamo un'ulteriore passo in avanti ipotizzando che il file sorgente si trova in un directory diversa da quella da cui invochiamo unoconv
:
unoconv -f odt -o out/miofile1 inp/esempio.docx
All'occorrenza possiamo indicare i path assoluti come, ad esempio, /opt/doc/inp
sia per l'opzione -o
sia per il file sorgente.
Conversioni massive
Vogliamo ora convertire i 1000 file Word nel formato OpenDocument.
Abbiamo 2 possibilità:
- diamo il comando secco;
- lanciamo un'istanza server di
unoconv
e poi diamo il comando secco.
Per comando secco intendo l'istruzione:
unoconv -f odt -o out/0000.docx esempi/0000.docx
Questa via è perfettamente funzionante, ma poco performante. Infatti per ogni file da convertire unoconv
avvierà LibreOffice, farà la conversione, chiuderà LibreOffice.
Per avere un'idea della differenza significa che con il comando secco impiegherà circa 5 secondi per convertirlo. Se invece creiamo un'istanza server la conversione richiederà circa 1 secondo.
Quando convertiamo migliaia di file c'è una bella differenza!
Comando secco
Operando con il comando secco possiamo usare la seguente sintassi
unoconv -f odt -o out esempi/*.docx
dove:
-f odt
: converti nel formato OpenDocument-o out
: i file di output scrivili dentro la directory outesempi/*.docx
: i file sorgente prendili da dentro la directory ``esempi`` e prendi tutti i file che hanno estensione DOCX.
Comando con server
Per sfruttare una migliore efficienza grazie ad una istanza server dobbiamo dare 2 comandi in ambiente Linux, Mac e Unix in generale:
unoconv -l &
unoconv -f odt -o out esempi/*.docx
Il comando unoconv -l &
avvia un'istanza di unoconv
che funzionerà dietro le quinte. In realtà lancia LibreOffice, senza l'interfaccia GUI e resta in ascolto per gestire sui file che gli vengono passati secondo le opzioni che indichiamo.
Uso in ambiente Windows e Mac
Per sistemi diversi da Linux ci sono i porting.
Rimando alle documentazioni ufficiali per installare la versione specifica per il proprio sistema operativo.
Le sintassi sopra esposte cambiano a seconda delle regole del proprio sistema operativo. Ad esempio in ambiente Windows il carattere ``/`` è invece ``\``.
Opportunità e limiti
Per prima cosa esistono comode GUI (=interfacce grafiche) che aiutano e permettono di lavorare come Dio comanda in ambienti come Windows o per utenti che non sono sistemisti o programmatori.
Altresì PHP e molti altri linguaggi offrono ai programmatore librerie che semplificano l'uso del tool all'interno di applicazioni.
Accanto a queste due prime considerazioni va tenuto presente che unoconv
ha molte altre opzioni e permette grandi potenzialità, ben oltre a quanto esposto in queste poche righe. Per tutto questo rimando alla documentazione ufficiale. Il link si trova qui in calce. In rete ci sono svariati esempi.
Va anche fatta un'osservazione su alcuni limiti. Il primo è che le conversioni non sono 1:1, cioè il file convertito non è sempre identico all'originale. Il problema è complesso da spiegare. A volte non è possibile la conversione. Nella maggior parte dei casi entrano in gioco disturbi come i font, diverse metriche, ecc...
Una seconda nota riguarda l'ambiente Linux. Al comando quando si invoca unoconv
si ottiene anche questo messaggio:
/usr/bin/unoconv:19: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives
from distutils.version import LooseVersion
Si tratta di un warning, non di un problema o di un errore.
Ci sono dei workaround per aggiustare la cosa all'origine. Se non vogliamo complicarci la vita possiamo usare, per gli ambienti *nix, un reindirizzamento del warning:
unoconv -f odt esempio.docx 2>&1 /dev/null
Siti di riferimento
uniconv: Automated conversion and styling using LibreOffice, https://github.com/unoconv/unoconv
unoconv, https://github.com/unoconv
unoconv, https://pypi.org/project/unoconv/
http://dag.wiee.rs/home-made/unoconv/