En este artículo voy a demostrar cómo convertir un archivo de texto plano a formato PDF desde línea de comandos en GNU/Linux, personalizando fuentes, márgenes, tamaño de página, etc. Existen muchas herramientas para convertir archivos de texto a PDF desde línea de comandos en GNU/Linux, algunos ejemplos son:
- unoconv
- La pseudo-impresora cups-pdf
- cupsfilter
- text2pdf
- paps
- pandoc
- wkhtmltopdf
- txt2pdf
Y muchas, muchas otras más...
Sin embargo, entre las que he probado, mi predilecta es definitivamente GNU Enscript, una herramienta que convierte archivos ASCII a PostScript (lenguaje de descripción de páginas utilizado por la mayoría de las impresoras).
La ventaja que tiene enscript
, respecto a las herramientas anteriormente mencionadas, es que permite personalizar todo tipo de parámetros y opciones del PDF generado, tales como márgenes, fuentes, formato y tamaño de página, etc. Claro que al trabajar con formato PostScript como salida, hace falta una herramienta auxiliar que convierta luego el archivo PS a PDF. Para el caso típicamente se recurre a ps2pdf
(parte del paquete ghostscript
).
Para instalar GNU Enscript y ps2pdf
en Debian y derivados, simplemente ejecutar:
# apt-get install enscript ghostscript
Las opciones más comunes de enscript
son:
-a
: rango de páginas a imprimir, por ejemplo: "1-10".-b
: encabezado de página en formato de texto, por ejemplo "$n %W Página $% de $='".-f
: fuente y tamaño a utilizar, por ejemplo "Times-Roman12".-M
: tamaño de papel, por ejemplo: "A4"-p
: nombre del archivo de salida o "-" para volcar por salida estándar.-r
: modo "landscape" o apaisado.--margins
: márgenes (en puntos).--footer
: pie de página (funciona de manera similar a-b
).
Y decenas de opciones más (ver man enscript
), incluso permite generar un índice o tabla de contenidos (--toc
).
Ejemplo
Supongamos que necesitamos convertir el archivo salida.txt
a formato PDF. Pero además deseamos que la fuente sea "Courier" en tamaño "7", los márgenes sean de apenas 1 punto, y el formato de página o tamaño de papel sea "A4".
Primero se debe convertir el archivo .txt a PS utilizando enscript
con las siguientes opciones:
$ enscript -M A4 --margins=1:1:1:1 -f Courier7 salida.txt -p salida.ps
Luego simplemente convertir el archivo PS generado por enscript
a PDF utilizando ps2pdf
:
$ ps2pdf salida.ps
Veamos directamente una prueba...
Creo un archivo de texto que contenga un listado de directorio:
root@debian:~# ls -l /usr/local/ > salida.txt root@debian:~# cat salida.txt total 36 drwxrwsr-x 2 root staff 4096 dic 29 12:55 bin drwxrwsr-x 2 root staff 4096 dic 9 2016 etc drwxrwsr-x 2 root staff 4096 dic 9 2016 games drwxrwsr-x 2 root staff 4096 dic 9 2016 include drwxr-xr-x 7 root root 4096 dic 21 19:40 lib lrwxrwxrwx 1 root staff 9 dic 9 2016 man -> share/man drwxr-sr-x 6 root staff 4096 sep 25 14:22 pgsql drwxrwsr-x 2 root staff 4096 dic 9 2016 sbin drwxrwsr-x 8 root staff 4096 dic 21 19:40 share drwxrwsr-x 2 root staff 4096 dic 9 2016 src
Convierto el .txt a PS en papel A4, fuente Courier tamaño 8, y márgenes 5/5/10/20 (izquierdo/derecho/superior/inferior):
root@debian:~# enscript -M A4 --margins=5:5:10:20 -f Courier8 salida.txt -p salida.ps [ 1 page * 1 copy ] copiadas en salida.ps
Luego convierto el PS a PDF:
root@debian:~# ps2pdf salida.ps
El archivo PDF generado es el siguiente: salida.pdf
Notar que he utilizado la cabecera por defecto.
Referencias