herramientas

You are currently browsing articles tagged herramientas.

De vez en cuando es necesario rellenar algún formulario que está en formato pdf. Esto puede ser todo un problema si el pdf no ha sido creado como un formulario interactivo que se pueda editar o si el creador se olvidó de marcar la opción de «Rellenar los campos de formulario» como permitida (cosa absurda pero más común de lo que pueda parecer). Además, muchas veces ocurre que este tipo de formularios hay que rellenarlos con urgencia.

En Linux hay un programa muy sencillo que permite escribir texto sobre un documento pdf. Se llama flpsed. La interfaz de usuario no es muy llamativa pero el programa hace justo lo que promete que es escribir texto sobre el pdf para después poder guardarlo en otro pdf o imprimirlo.

El programa flpsed acaba de pasar a mi caja de herramientas para manipular pdfs junto con pdfjam o qpdf.

Vía: http://bioinformatiquillo.wordpress.com/2008/10/09/flpsed-escribir-sobre-pdfs/

Tags: ,

Hace un tiempo explicaba como dividir un archivo de texto usando sed. El problema de este método es que no sirve para archivos binarios y que hay que hacer una estimación a ojo de la longitud del corte. En esta entrada se explica un método mejor para dividir cualquier tipo de archivo o directorio de forma automática. Este método funciona directamente en sistemas operativos tipo UNIX, como Mac OS X o Linux, donde vienen instalados por defecto tar y split.

Como explicábamos antes, el tamaño máximo de archivo en un sistema FAT32 es de 4GiB. Si queremos transportar un archivo de tamaño mayor en un disco duro o una memoria USB formateada con este sistema de ficheros, necesitaremos dividirlo.

División del archivo

El archivo se empaqueta y comprime usando tar y se divide en trozos de 4000 MB usando split. Finalmente se copia en el dispositivo de destino:

tar -cvpz /ruta/archivo | \
split -d -a 3 -b 4000m - /mnt/disco_fat32/archivo.tar.gz.

Se irán generando trozos del archivo comprido identificados por un número de serie como sufijo (archivo.tar.gz.000; archivo.tar.gz.001; etc). La compresión es opcional –parámetro z del comando tar– pero puede ahorrar bastante espacio según el caso. En lugar de un archivo de entrada podemos indicar un directorio para empaquetar todo su contenido. Los parámetros de split usados indican:

  • -d → que use números como sufijo en lugar de letras.
  • -a 3 → que use 3 cifras. Apropiado para unos 1000 trozos (unos 4 TB tras comprimir).
  • -b 4000m → que separe en trozos de 4000 MB.
  • – → que se use como entrada la entrada estándar stdin.

Recuperación del archivo

Para volver a unir los trozos y obtener de nuevo el archivo o el directorio comprimido en el lugar que elijamos se usa lo siguiente:

cat /mnt/disco_fat32/archivo.tar.gz.* | (cd /ruta_elegida/; tar zxv)

Los trozos son unidos y extraídos por tar en el directorio que hemos denominado ruta_elegida.

Tags: , , ,

En alguna ocasión he necesitado dividir un archivo de texto plano en varias partes. En un momento dado, por ejemplo, necesitaba copiar a un disco formateado en FAT un archivo con comandos SQL que tenía un tamaño de 6.3 GiB. Como mi disco, formateado en FAT, solo acepta archivos de hasta 4 GiB, es necesario dividir el archivo de texto en dos partes. Decidí usar herramientas sencillas (wc, sed y cat) y evitar usar dd. El comando dd es muy versátil y potente; tan potente que puede causar estragos al más mínimo error (parece que en broma se dice que dd es el acrónimo de «destructor de datos»).

División del archivo

En mi caso sé que casi todas las líneas del archivo de texto tienen la misma longitud. Una forma de dividir el archivo sería introducir la primera mitad de las líneas en un nuevo archivo y la segunda en otro. Primero contamos el número de líneas usando wc:

wc sql_data.sql 
   5557603  455721539 6882254952 sql_data.sql

Se puede ver que el archivo tiene 5.557.603 líneas. Introduciré las 2.800.000 primeras líneas en el primer archivo y el resto en el segundo. Para esto se puede usar sed:

sed -n 1,2800000p sql_data.sql > sql_data1.sql
sed -n 2800001,5557603p sql_data.sql > sql_data2.sql

Para volver a juntar las dos partes se puede usar directamente cat:

cat sql_data1.sql sql_data2.sql > sql_data_check.sql

El resultado final son dos archivos con un tamaño inferior a 4GiB:

-rw-r--r--  1 jsm users 3553315243 Jul 31 12:10 sql_data1.sql
-rw-r--r--  1 jsm users 3328939709 Jul 31 12:12 sql_data2.sql
-rw-r--r--  1 jsm users 6882254952 Jul 31 12:17 sql_data_check.sql
-rw-r--r--  1 jsm users 6882254952 Jul 24 16:19 sql_data.sql

Comprobación

Sí quisiéramos comprobar que todo está bien podemos comparar el hash MD5 del archivo inicial con el del archivo recuperado usando cat:

md5sum sql_data.sql 
  13e934907ab22b8b6e0bd2c1b3bb29d0  sql_data.sql
md5sum sql_data_check.sql
  13e934907ab22b8b6e0bd2c1b3bb29d0  sql_data_check.sql

Como se puede ver los dos archivos tienen el mismo hash, indicándonos (en este caso) que son iguales.

Tags: , , ,

A veces es muy útil imprimir varias páginas en una página, para poder hacerse una idea de la estructura de un documento sin tener que desperdiciar papel o para crear patrones más complejos que permitan la impresión de un cuadernillo por ejemplo.
Teniendo el documento preparado en formato pdf existen algunos métodos para manipularlo como gv, pdf2ps, etc, pero suelen requerir de un conocimiento avanzado del comando y muchas veces los resultados no son los deseados. Sin embargo hay una herramienta muy útil y sencilla de usar llamada pdfjam.

pdfjam

La herramienta pdfjam funciona en sistemas tipo UNIX como Linux y Mac y es posible que se pueda instalar en Windows usando algo como cygwin. Permite manipular documentos pdf de muchas maneras de forma muy sencilla. Estos documentos se pueden imprimir luego directamente sin pérdida de calidad, así que teniendo uno o varios documentos en formato pdf, podemos combinarlos y manipularlos a nuestro gusto para obtener el documento impreso final que deseamos. El único inconveniente es que funciona en línea de comandos pero esto le da también parte de su potencia.

Unir dos documentos

Se pueden unir varios documentos pdf en uno con el comando pdfjoin. En un terminal se pondría:

pdfjoin   <doc1.pdf> <doc2.pdf> <doc3.pdf>

y se obtiene como salida un documento llamado doc3-joined.pdf que es la unión de los tres documentos anteriores. Evidentemente se le pueden indicar también dos o más de tres documentos.

Imprimir varios páginas en una página

Para imprimir varias páginas en una página se usa el comando pdfnup. Se escribe en un terminal:

pdfnup --nup 2x4 <doc.pdf>

y la salida es un documento llamado doc-2x4.pdf en el que cada página contiene cuatro páginas del documento original.
Esta funcionalidad es muy útil para imprimir varias transparencias de una presentación en una sola página.

Otras funcionalidades

Con pdfjam-pocketmod se crea una impresión de 8 páginas en una página combinada de manera que doblando y recortando la página según las instrucciones se obtiene un librito de bolsillo. Hay algunos comandos más para rotar, invertir páginas (como en un espejo) o crear un documento tipo cuadernillo, descritos en la página de pdfjam.
Estos métodos no los he encontrado en la instalación por defecto de Debian Lenny. Sin embargo es posible que se encuentren disponibles en las distribuciones más modernas directamente. Si no, siempre existe la opción de compilar el programa desde el código fuente si se requiere alguno de los comandos más exóticos.

Tags: , , ,