17 noviembre, 2005

Herramientas para la consola (I)

Hoy en día lo que más utilizo es la consola (terminal, línea de comandos,... o como queráis llamarlo). Por eso se me hace imprescindible tener herramientas que me puedan resolver ciertos problemas en un momento dado.

En esta ocasión voy a explicar cómo utilizar una serie de herramientas para poder leer documentos en consola. Los documentos que vamos a poder leer son los que tengan formato Doc (.doc, formato cerrado propiedad de Microsoft) y formato Pdf (.pdf, formato abierto propiedad de Adobe). Hay muchas herramientas que convierten distintos tipos de archivos a texto plano (catdoc, pdftotext, ...). Pero la navegación por ellos se hace compleja (pierden la estructura) e incluso se pierden los enlaces que pueda contener el documento. Por estas razones nosotros vamos a convertir estos archivos a Html, formato con el que, en la mayoría de los casos, mantienen la estructura y los enlaces.

Para conseguir nuestro propósito necesitaremos las siguientes herramientas:

  • wvWare: Biblioteca para convertir documentos de Word. Nos facilita una serie de herramientas para convertir dicho formato en otros más accesibles: Html, Latex, Ps, Pdf, Dvi, Text, Abiword, Rtf, ... Sus librerías las utilizan entre otros AbiWord para abrir documentos de Word. Para instalarlo en Gnu/Debian:
    $ apt-get install wv
  • pdftohtml: Utilidad que convierte archivos Pdf en html. Para instalarlo en Gnu/Debian:
    $ apt-get install pdftohtml
  • w3m: Navegador web en modo texto. Este navegador tiene la particularidad de que sirve también como paginador, y tiene extensiones para mostrar las imágenes en framebuffer (para lo que tienes que configurar la consola para utilizar framebuffer). Para instalarlo en Gnu/Debian:
    $ apt-get install w3m
    Para poder ver imágenes en consola:
    $ apt-get install w3m-img
Como casi siempre en Linux tenemos varias alternativas para realizar cualquier tarea. Así, para poder visualizar los documentos serviría cualquier navegador en modo texto: lynx, links, ...

wvWare muestra el resultado de convertir el documento en formato Doc por la salida estándar. Los diferentes sabores de wv (wvPdf, wvHtml, ...) no lo hacen así, por lo que habría que pasarles el archivo donde queremos escribir el resultado. Lo único que le tenemos que decir a wvWare es la plantilla a utilizar para realizar la conversión, que se encuentran (en Gnu/Debian) en '/usr/share/wv/', y no son más que archivos xml. Para nuestros propósitos utilizaremos la plantilla que convierte a Html: '/usr/share/wv/wvHtml.xml' (leyendo el man nos damos cuenta de que es la plantilla por defecto). Para conseguir el resultado de la conversión por la salida estándar el comando sería el siguiente:
$ wvWare -x /usr/share/wv/wvHtml.xml nombreArchivo.doc

pdftohtml, si no se le dice lo contrario guarda el resultado en un fichero, pero con la opción '-stdout' le diremos que lo muestre por la salida estándar. Además le pasaremos la opción '-p' para que cambie los enlaces Pdf a enlaces Html. Así, el comando a utilizar sería el siguiente:
$ pdftohtml -p -stdout nombreArchivo.pdf

Ahora que tenemos en la salida estándar un archivo Html lo único que hay que hacer es redirigir esa salida a la entrada estándar de nuestro navegador preferido. En el caso de ser w3m habría que decirle que la entrada que le va a llegar es un Html. Para ello le pasamos el parámetro '-T' diciéndole el tipo del que se trata: 'text/html':
w3m -T text/html
En el caso de ser links, el comando quedaría:
links -force-html

Juntando todo lo que hemos dicho quedarían unas líneas como las siguientes:

  • Para documentos Doc:
    $ wvWare -x /usr/share/wv/wvHtml.xml nombreArchivo.doc | w3m -T text/html
  • Para documentos Pdf:
    $ pdftohtml -p -stdout nombreArchivo.pdf | w3m -T text/html

Si queremos automatizar los procesos simplemente deberíamos crearnos unos scripts. Nada más fácil:

  • viewDoc.sh:
    #!/bin/bash
    wvWare -x /usr/share/wv/wvHtml.xml $1 2>/dev/null | w3m -T text/html
  • viewPdf.sh:
    #!/bin/bash
    pdftohtml -p -stdout $1 2>/dev/null | w3m -T text/html

TODO Hacer un único script que muestre un archivo a partir de su extensión.

Espero que este post os sirva de ayuda. En posteriores envíos explicaré otras herramientas de consola. Para la mentes inquietas es todo un reto realizar las tareas más cotidianas en consola y produce fuertes dosis de satisfacción. Además esto sirve para que se le pueda dar un uso, aunque sea didáctico, a nuestros viejos equipos que no pueden con las X.

Un saludo a todos

P.D. Las herramientas wvWare y w3m las descubrí un día navegando por las páginas de LinuxDevCenter de O'Reilly, exactamente en las páginas de ejemplo de uno de sus libros. Curiosamente es lo mismo que yo hacía con los Pdf (formato que utilizo más a menudo) pero que no encontraba cómo hacerlo con los Doc.