Cómo procesar ficheros PDF

Cómo procesar ficheros PDF

Introducción

PDF (Portable Document Format) es un formato de ficheros muy utilizado para guardar documentos que contengan texto formateado e imágenes. Fue creado por Adobe Systems en 1993 y se liberó como un estándar abierto en 2008.

Aquí trataremos de cómo extraer información de este tipo de documentos para que pueda ser usada por aplicaciones informáticas.

Un ejemplo del uso de las tecnicas que se explican aquí es la aplicacion Empresas que descarga PDFs del BORME, les extrae información y usa los datos para crear grafos.

Logos del formato PDF

Buenos usos del formato PDF

Recuerdo cuando estaba haciendo el proyecto fin de carrera, la gente que entregaba el suyo en formato Microsoft Word para imprimir se solía llevar desagradables sorpresas al ver índices mal alineados, tablas descolocadas o imágenes descentradas. Los que lo llevaban en PDF nunca tenían ese problema. Éste es un buen uso del PDF porque conserva el formato exacto.

Es decir, si se quiere llevar un documento a imprimir el formato PDF es una buena opción para no llevarte sustos. El resultado es idéntico a lo que se muestra por pantalla.

La propiedad de los PDFs de conservar el formato entre distintos dispositivos nos da una idea de otros posibles buenos usos.

Otro buen uso es la entrega de planos de distinta índole, como arquitectura, maquinaria o circuitos electrónicos, a gente que no los va a modificar y no posee el programa con el que se crearon.

Malos usos del formato PDF

Hay algunos usos para los que el formato PDF no es el más apropiado y su uso causa molestias innecesarias.

PDF no es apropiado para documentos que se vayan a leer en dispositivos electrónicos ya que debido a que conserva el formato no se ajusta a los distintos tamaños de pantalla, ésto hace que para leerlo en una pantalla pequeña haya que estar continuamente modificando el zoom y haciendo scroll. Para leer en pantalla es mejor utilizar otros formatos como HTML, EPUB u OEB.

PDF tampoco es apropiado para distribuir información en Internet. Hoy en día la información de Internet se consume tanto por personas como por robots. Los robots no entienden PDF, si antes no se realiza un costoso procesado, además este procesado no nos garantiza que el resultado sea cien por cien correcto.

El problema para procesar PDFs automáticamente

El modelo de PDF explicado a continuación es un modelo simplificado con el único propósito de que se entienda el problema a la hora de procesarlo.

El formato PDF indica en un documento qué elementos contiene y dónde se posicionan estos elementos en el plano para formar el documento. Los elementos son letras, números, símbolos y gráficos. Así, simplificando, un PDF nos puede indicar:

  1. Hay una letra ‘H’ tipo ‘SansSerif’ y tamaño 8 en la posición (x1, y1).
  2. Hay una letra ‘o’ tipo ‘SansSerif’ y tamaño 8 en la posición (x1 + m, y1).
  3. Hay una letra ‘l’ tipo ‘SansSerif’ y tamaño 8 en la posición (x1 + 2m, y1).
  4. Hay una letra ‘a’ tipo ‘SansSerif’ y tamaño 8 en la posición (x1 + 3m, y1).
  5. Hay una letra ‘t’ tipo ‘SansSerif’ y tamaño 8 en la posición (x1 + 5m, y1).
  6. Hay una letra ‘í’ tipo ‘SansSerif’ y tamaño 8 en la posición (x1 + 6m, y1).
  7. Hay una letra ‘o’ tipo ‘SansSerif’ y tamaño 8 en la posición (x1 + 7m, y1).

El programa lector de PDFs, Adobe Reader por ejemplo, va leyendo los distintos elementos y posicionándolos. Siguiendo el ejemplo anterior formaría “Hola tío” y la persona que lo quisiera leer lo procesa visualmente y se da cuenta de que se trata de dos palabras. Hay que entender que este formato no tiene noción de lo que es una palabra, por ejemplo, el espacio entre “Hola” y “tío” se puede representar situando la “t” más lejos de la letra anterior en vez de usar un elemento espacio.

Debido a que el formato PDF sólo se ocupa del posicionamiento de elementos en el plano es necesario procesar de manera visual el documento para distinguir las distintas partes, poder etiquetarlas y crear un documento estructurado que será procesado más fácilmente.

Este procesado visual no es tan crudo como si se tratase de una fotografía o el escaneado de un documento, ya que, de ser así también habría que distinguir las letras. Por suerte PDF nos dice que letra está en cada posición y que formato tiene ésta.

Lo que PDF no indica es si un conjunto de letras es un título o un párrafo, ni siquiera nos dice si se trata de una palabra o de dos distintas. Es decir, hay que calcular cuanto mide la separación entre palabras, que formato de letra tiene cada parte del texto, hay que tener en cuenta los saltos de línea y los saltos de página…

Todo esto no es necesario cuando se usan formatos estructurados como XML o JSON que son los que se suelen usan para mandar información entre máquinas.

Resumiendo, el problema no es fácil porque, en un PDF, el texto no es continuo sino muchos pequeños grupos de caracteres posicionados en la página de manera absoluta. El objetivo del formato PDF es conservar la disposición de elementos intacta.

Herramientas

Las aplicaciones que transforman datos crudos, documentos PDF en este caso, en datos estructurados, cómo puede ser JSON o XML, se llaman parsers.

Ahora se enumerarán algunos programas útiles para procesar PDFs automáticamente.

Extraer metadatos

  • pdfinfo: Es una herramienta que permite extraer metadatos. Ejemplo:
pdfinfo BORME-A-2013-238-15.pdf

Title:          Actos de A CORUÑA del BORME núm. 238 de 2013
Subject:        BORME-A-2013-238-15
Keywords:       BORME-A-2013-238-15;BORME 238 de 2013;A CORUÑA;13/12/2013
Author:         Registro Mercantil
Creator:        eBOE
Producer:       iText 2.1.4 (by lowagie.com)
CreationDate:   Wed Dec 11 13:41:25 2013
ModDate:        Wed Dec 11 14:47:32 2013
Tagged:         yes
Pages:          2
Encrypted:      no
Page size:      595 x 842 pts (A4)
File size:      151969 bytes
Optimized:      no
PDF version:    1.4

Extraer contenido

Si no queremos conservar el formato del documento:

  • pdftotext: Transforma PDF en texto plano. Para muchos problemas es la solución más sencilla y se obtienen buenos resultados.

Si queremos tener información del formato:

  • pdftohtml: Transfoma PDF en HTML o XML.
  • Inkscape: Convierte una página PDF en un archivo SVG. Si quieres convertir todas las páginas del documento se puede usar este script: pdf2svg
  • PDFMiner: Librería para Python muy potente. Centrada en obtener texto para analizarlo. Es más complicada que otras herramientas pero muy útil en casos difíciles.
  • <

    Cómo procesar ficheros PDF