ESCOLA TÈCNICA SUPERIOR D’ENGINYERIA ELECTRÒNICA I INFORMÀTICA LA SALLE

PROJECTE FI DE CARRERA

ENGINYERIA EN INFORMÀTICA

PDFLab

ALUMNE PROFESSOR PONENT

Yuri González Azín Mª Antonia Mozota Coloma

ACTA DE L'EXAMEN DEL PROJECTE FI DE CARRERA

Reunit el Tribunal qualificador en el dia de la data, l'alumne

D. Yuri González Azín va exposar el seu Projecte de Fi de Carrera, el qual va tractar sobre el tema següent:

PDFLab

Acabada l'exposició i contestades per part de l'alumne les objeccions formulades pels Srs. membres del tribunal, aquest valorà l'esmentat Projecte amb la qualificació de

Barcelona,

VOCAL DEL TRIBUNAL VOCAL DEL TRIBUNAL

PRESIDENT DEL TRIBUNAL

Abstract Este proyecto se ha encargado de desarrollar la herramienta PDFLab. PDFLab es una herramienta capaz de leer ficheros PDF y generar una estructura intermedia para implementar cualquier otro tipo de aplicaciones. En este documento se puede apreciar todo el estudio que ha sido necesario para desarrollar este proyecto. Así como, un estudio de las aplicaciones que existen en el mercado. Y documentación técnica sobre las etapas del desarrollo, tales como, Análisis, Diseño e Implementación.

i

A mi padre porque este trabajo es tanto suyo como mío.

iii

Resumen En este proyecto se ha desarrollado PDFLab, una herramienta capaz de leer ficheros PDF y generar una estructura intermedia para implementar cualquier otro tipo de aplicaciones. En el desarrollo se comprende el estudio de la estructura interna de los ficheros PDF, estudio de las técnicas de desarrollo, tanto metodológicas como de diseño, toma de requerimientos, análisis de requerimientos, diseño orientado a objetos, implementación, pruebas y mantenimiento. En el capítulo de Introducción se proporciona el ámbito general del sistema PDFLab. En el capítulo de Portable Documento Format se presenta el estudio en el que se centra todo el proyecto: El Formato de Documento Portátil (PDF). En el capítulo Técnicas de compilación se presentan un conjunto de temas de la teoría del diseño e implementación de lenguajes de programación que han sido usados a lo largo de este proyecto. En el capítulo Estado del arte se estudia el mercado para localizar herramientas que trabajen con PDF. Éstas se han clasificado en diferentes categorías según su aplicación y uso del fichero PDF. En el capítulo Metodología se presenta la metodología de desarrollo que ha sido utilizada a lo largo de este proyecto: Programación Extrema. En el capítulo Requerimientos se define la Especificación de Requisitos Software (ERS) para el proyecto: PDFLab. Esta especificación se ha estructurado inspirándose en las directrices dadas por el estándar “IEEE Recomended Practice for Software Requeriments Specification ANSI/IEEE 830 1998”. En el capítulo Planificación se presenta el conjunto de iteraciones resultantes en el desarrollo del proyecto. En el capítulo Análisis Orientado a Objetos se analizan los requerimientos y se definen: El modelo estático, que identifica los objetos del sistema, y el modelo dinámico, que establece la colaboración de los objetos del sistema. En el capítulo Diseño Orientado a Objetos se presentan las tecnologías utilizadas para implementar el proyecto y los diagramas de clases de las clases principales del proyecto PDFLab. En el capítulo Implementación se facilitan los diagramas de paquetes de la implementación del proyecto. En el capítulo Estudio económico se ha realizado el estudio económico del coste del desarrollo del proyecto PDFLab En el capítulo Conclusiones concluye el proyecto dejando reflejadas las conclusiones y sensaciones que han ido surgiendo a lo largo del desarrollo de este proyecto. Y por último las Líneas de futuro donde se indican que progresión tendrá el proyecto y que posibilidades futuras se pueden implementar para aprovechar todo su potencial.

v

Índice

1 INTRODUCCIÓN ...... 3

2 PORTABLE DOCUMENT FORMAT (PDF) ...... 7 2.1 DEFINICIÓN ...... 7 2.2 HISTORIA ...... 7 2.3 VERSIONES PDF ...... 11 2.4 ESTÁNDARES ISO ...... 12 2.5 ISO 32000-1 ...... 17

3 TÉCNICAS DE COMPILACIÓN ...... 33 3.1 EXPRESIONES REGULARES ...... 33 3.2 SINTAXIS LIBRE DE CONTEXTO ...... 34 3.3 GRAMÁTICA DE ATRIBUTOS ...... 35

4 ESTADO DEL ARTE ...... 39 4.1 HERRAMIENTAS ...... 39 4.2 CLASIFICACIÓN ...... 45 4.3 PDFLAB ...... 46

5 METODOLOGÍA ...... 51 5.1 MANIFIESTO ÁGIL ...... 51 5.2 PROGRAMACIÓN EXTREMA ...... 52

6 REQUERIMIENTOS ...... 55

7 PLANIFICACIÓN DEL PROYECTO ...... 61

8 ANÁLISIS ORIENTADO A OBJETOS ...... 65 8.1 MODELO ESTÁTICO ...... 65 8.2 MODELO DINÁMICO ...... 66

9 DISEÑO ORIENTADO A OBJETOS ...... 69 9.1 TECNOLOGÍAS ...... 69 9.2 ARQUITECTURA DEL SISTEMA Y DIAGRAMA DE DESPLIEGUE...... 70 9.3 DIAGRAMA DE CLASES ...... 71

10 IMPLEMENTACIÓN ...... 75 10.1 DIAGRAMAS DE PAQUETES ...... 75 10.2 PRUEBAS / TESTING: ...... 79 10.3 MANTENIMIENTO ...... 82

11 ESTUDIO ECONÓMICO ...... 85

12 CONCLUSIONES ...... 89

13 LÍNEAS DE FUTURO...... 93

14 BIBLIOGRAFÍA ...... 97

15 ANEXO ...... 101

vii

Introducción

En este capítulo se introduce y se proporciona el ámbito general del sistema PDFLab.

1 Introducción

En mi trabajo final de carrera tuve el placer de estudiar qué y cómo son los Spiders, y de cómo adquieren, a fuerza bruta, cualquier texto plano que se encuentre entre etiquetas HTML. Ahora bien, no cualquier información substancial, se encuentra en este formato. Como he ido encontrando a lo largo de estos años, mucha de esta información fundamental está contenida en un formato de documento portátil o, comúnmente conocido, PDF. Así pues, a lo largo de todo este proyecto se centrarán todos los esfuerzos en lograr acceder a los documentos PDF y recopilar la información contenida en éstos y generar una estructura de objetos que contenga toda la información y contenido del PDF.

PDFLab

 Análisis lexicográfico.  Análisis sintáctico.  Traducción dirigida por sintaxis.  Desencriptación.  Decodificación. Documento PDF Estructura de Objetos

Una vez especificada la función principal de este sistema, antes de diseñarlo e implementarlo se debe:

 Realizar un estudio exhaustivo del estado del arte para reafirmar el porqué del proyecto.  Estudiar la estructura interna de los ficheros PDF.  Analizar la estructura sintáctica de la estructura interna de los ficheros PDF.  Definir la estructura de datos que se puede generar a partir de un PDF.

3

Portable Document Format

En este capítulo se presenta el estudio en el que se centra todo el proyecto. El Formato de Documento Portátil (PDF). Este capítulo introduce históricamente los acontecimientos importantes sucedidos a lo largo del tiempo relacionados con PDF y centra el estudio en la especificación de su implementación interna, basada en la actual norma ISO 32000-1:2008.

2 Portable Document Format (PDF)

2.1 Definición

PDF (acrónimo del inglés Portable Document Format, formato de documento portátil) es un formato de almacenamiento de documentos, desarrollado por la empresa Adobe Systems.

2.2 Historia

John Warnock, cofundador de Adobe Systems, esboza el sistema ‘Camelot’. El 1991 objetivo de Camelot es básicamente:

 Capturar eficazmente documentos de cualquier aplicación.  Enviar versiones electrónicas de estos documentos a cualquier parte.  Ver e imprimir dichos documentos en cualquier equipo.

1992

Adobe libera la primera versión de PDF, nombre en clave ‘Carousel’, en Comdex, debutando y ganando el galardón “Best of Comdex”.

1993

El 15 de Mayo de 1993, aparecen las primeras herramientas para crear y ver documentos PDF, Acrobat y Acrobat Reader.

1994

Adobe Systems lanza Acrobat 2.0 junto con la versión PDF 1.1

7 1995

Adobe Systems lanza Acrobat 2.1 junto con la versión PDF 1.1

1996

Adobe Systems lanza Acrobat 3.0 junto con la versión PDF 1.2

1997

1998

1999 Adobe Systems lanza Acrobat 4.0 junto con la versión PDF 1.3

Adobe Systems lanza Acrobat 4.05

2000

8

2001

Adobe Systems lanza Acrobat 5.0 junto con la versión PDF 1.4

ISO 15930‐1:2001 (PDF/X‐1:2001 y PDF/X‐1a:2001) basada en PDF 1.3

2002 ISO 15929:2002 (Actualmente retirada)

ISO 15930‐3:2002 (PDF/X‐3:2002) basada en PDF 1.3

2003

Adobe Systems lanza Acrobat 6.0 junto con la versión PDF 1.5

ISO 15930‐4:2003 (PDF/X‐1a:2003) basada en PDF 1.4

ISO 15930‐5:2003 (PDF/X‐2:2003) basada en PDF 1.4

ISO 15930‐6:2003 (PDF/X‐3:2003) basada en PDF 1.4 2004

Adobe Systems lanza Acrobat 7.0 junto con la versión PDF 1.6

2005 En Mayo de 2005, PDF obtiene el mayor reconocimiento cuando la ISO aprueba PDF/A (subconjunto de PDF basado en PDF 1.4) como formato estándar para archivar y preservar registros electrónicos.

2006

Adobe Systems lanza Acrobat 8.0 junto con la versión PDF 1.7

9 El 29 de Enero de 2007, Adobe Systems Incorporated anuncia la intención de 2007 publicar la especificación completa de PDF 1.7 al Instituto Nacional Estadounidense de Estándares (ANSI) y la Asociación para la Gestión del Contenido Empresarial (AIIM), con el propósito de publicación del estándar por la Organización Internacional para la Estandarización (ISO).

ISO 19005‐1:2007/Cor 1:2007 (PDF/A‐1:2007) basada en PDF 1.4

En Enero de 2008, el comité técnico de la ISO aprueba la documentación final * 2008 revisada para PDF 1.7 como el estándar internacional ISO 32000‐1 . En Julio de 2008, el documento ISO‐Standard: 32000‐1: Document management‐ Portable document format es puesto a la venta en la web de la ISO (www.iso.org)

Adobe Systems lanza Acrobat 9.0 junto con la Extensión de Nivel 3 de ISO 32000‐1*

ISO 24517‐1:2008 (PDF/E‐1:2008) basada en PDF 1.6

ISO 15930‐7:2008 (PDF/X‐4:2008) basada en PDF 1.6 2009 * ISO/AWI 14289‐1 (PDF/UA) basada en ISO 32000‐1 . Actualmente, en desarrollo.

Adobe Systems lanza Acrobat 9.0 junto con la Extensión de Nivel 5 de ISO 32000‐1*

2010

ISO 16612‐2:2010 (PDF/VT‐1:2010 y PDF/VT‐2:2010) basada en PDF 1.6

* ISO/DIS 19005‐2.2 (PDF/A‐2) basada en ISO 32000‐1 . Actualmente, en desarrollo.

* Se observa que una vez publicada, en 2008, la ISO 32000-1, la versión de PDF 1.7 pasa a tener el mismo nombre que la norma ISO 32000-1. Además, al existir una norma de estandarización ISO 32000-1 Adobe Systems no ha producido ninguna otra versión superior a ésta. No obstante, Adobe si ha continuando generando características extendidas y publicando documentos que las especifican haciendo extensión a la norma ISO 32000-1 (PDF 1.7) y que son soportadas por sus productos recién liberados.

10

2.3 Versiones PDF

En la siguiente tabla se pueden apreciar las diferentes versiones de PDF que Adobe ha ido publicando de PDF y su correspondiente versión del lector.

Año Mes Versión PDF Versión Lector Nombre en clave 1991 IPS (Interchange PostScript) Camelot 1992 PDF 1.0 Carousel 1993 Acrobat 1994 PDF 1.1 Acrobat 2.0 1995 PDF 1.1 Acrobat 2.1 1996 PDF 1.2 Acrobat 3.0 Amber 1999 Abril PDF 1.3 Acrobat 4.0 Stout 1999 Junio PDF 1.3 Acrobat 4.05 2001 Mayo PDF 1.4 Acrobat 5.0 Brazil 2003 Abril PDF 1.5 Acrobat 6.0 NewPort 2005 Enero PDF 1.6 Acrobat 7.0 Vegas 2006 Octubre PDF 1.7 Acrobat 8.0 Atlas 2008 Junio ISO 32000‐1 Extension Level 3 Acrobat 9.0 Nova 2009 ISO 32000‐1 Extension Level 5 Acrobat 9.1

11 2.4 Estándares ISO

El formato PDF se ha convertido en un estándar de facto para el intercambio de información desde que Adobe publicó la especificación completa de PDF en año 1993. Desde 1995, Adobe ha participado en varios grupos de trabajo en la ISO. Hoy en día, PDF para Archivo (PDF/A) y PDF para Intercambio (PDF/X) ya son estándares de la ISO, y PDF para Ingenieros (PDF/E) y PDF para Acceso Universal (PDF/UA) son propuestas de estándares. Adicionalmente, PDF para Sanidad (PDF/H) es una propuesta de Buenas Prácticas de la AIIM. A continuación, se indican todos los estándares que han sido propuestos por Adobe Systems a lo largo de los años y aceptados por el comité técnico de la ISO.

ISO 15930‐1:2001

Lanzamiento: 2001 Última Actualización: 30/08/2006 Versión PDF: PDF 1.3 Denominación PDF: PDF/X‐1:2001 y PDF/X‐1a:2001 Denominación ISO: ISO 15930‐1:2001 Graphic technology ‐‐ Prepress digital data exchange ‐‐ Use of PDF ‐‐ Part 1: Complete exchange using CMYK data

Descripción: ‐‐‐

ISO 15929:2002

Lanzamiento: 2002 Última Actualización: 17/03/2008 Retirado Versión PDF: ‐‐‐ Denominación PDF: ‐‐‐ Denominación ISO: ISO 15929:2002 Graphic technology ‐‐ Prepress digital data exchange ‐‐ Guidelines and principles for the development of PDF/X standards

Descripción: ISO 15929:2002 especifica los principios que sirven de base para el desarrollo de las partes de la norma ISO 15930 que define el uso del Formato de Documento Portátil (PDF) en diferentes aplicaciones de la tecnología gráfica.

ISO 15930‐3:2002

Lanzamiento: 2002 Última Actualización: 07/09/2007 Versión PDF: PDF 1.3 Denominación PDF: PDF/X‐3:2002 Denominación ISO: ISO 15930‐3:2002 Graphic technology ‐‐ Prepress digital data exchange ‐‐ Use of PDF ‐‐ Part 3: Complete exchange suitable for colour‐managed workflows

Descripción: ISO 15930‐3:2002 especifica el uso del Formato de Documento Portátil (PDF) para la difusión de los datos digitales completos, que contienen todos los elementos necesarios para la reproducción de impresión final. Gestión de color y CMYK son soportados.

12

ISO 15930‐4:2003

Lanzamiento: 2003 Última Actualización: 07/10/2009 Versión PDF: PDF 1.4 Denominación PDF: PDF/X‐1a:2003 Denominación ISO: ISO 15930‐4:2003 Graphic technology ‐‐ Prepress digital data exchange using PDF ‐‐ Part 4: Complete exchange of CMYK and spot colour printing data using PDF 1.4

Descripción: ISO 15930‐4:2003 especifica el uso del Formato de Documento Portátil (PDF) Versión 1.4 para la difusión de los datos digitales completos, que contienen todos los elementos necesarios para la reproducción de impresión final. Soportan cualquier combinación de CMYK y datos spot‐colour.

ISO 15930‐5:2003

Lanzamiento: 2003 Última Actualización: 07/10/2009 Versión PDF: PDF 1.4 Denominación PDF: PDF/X‐2:2003 Denominación ISO: ISO 15930‐5:2003 Graphic technology ‐‐ Prepress digital data exchange using PDF ‐‐ Part 5: Partial exchange of printing data using PDF 1.4

Descripción: ISO 15930‐5:2003 especifica el uso del Formato de Documento Portátil (PDF) Versión 1.4 para la difusión de los datos digitales, donde todos los elementos necesarios para la reproducción de impresión final están incluidos o se prevén para la identificación única. Soportan cualquier combinación de CMYK y datos spot‐colour.

ISO 15930‐6:2003

Lanzamiento: 2003 Última Actualización: 07/10/2009 Versión PDF: PDF 1.4 Denominación PDF: PDF/X‐3:2003 Denominación ISO: ISO 15930‐6:2003 Graphic technology ‐‐ Prepress digital data exchange using PDF ‐‐ Part 6: Complete exchange of printing data suitable for colour‐managed workflows using PDF 1.4

Descripción: ISO 15930‐6:2003 especifica el uso del Formato de Documento Portátil (PDF) Versión 1.4 para la difusión de los datos digitales completos, que contienen todos los elementos necesarios para la reproducción de impresión final. Soportan gestión del color, CMYK, Escala de grises, RGB y datos spot‐colour.

13 ISO 19005‐1:2005

Lanzamiento: 2005 Última Actualización: 22/07/2010 Versión PDF: PDF 1.4 Denominación PDF: PDF/A‐1:2005 Denominación ISO: ISO 19005‐1:2005 Document management ‐‐ Electronic document file format for long‐ term preservation ‐‐ Part 1: Use of PDF 1.4

Descripción: ISO 19005‐1:2005 especifica cómo usar el Formato de Documento Portátil (PDF) 1.4 para la conservación a largo plazo de documentos electrónicos. Es aplicable a los documentos que contengan combinaciones de caracteres, rasterizaciones y datos vectoriales.

ISO 16612‐1:2005

Lanzamiento: 2005 Última Actualización: 10/12/2008 Versión PDF: PDF 1.4 Denominación PDF: ‐‐‐ Denominación ISO: ISO 16612‐1:2005 Graphic technology ‐‐ Variable printing data exchange ‐‐ Part 1: Using PPML 2.1 and PDF 1.4

Descripción: ISO 16612‐1:2005 especifica los métodos para el uso del Lenguaje de Marcado de Impresión Personalizado (PPML) y el Formato de Documento Portátil (PDF) para el intercambio o la identificación de todos los elementos necesarios para reproducir un trabajo de imagen de datos variables según lo previsto por el remitente.

ISO 19005‐1:2005/Cor 1:2007

Lanzamiento: 2007 Última Actualización: ‐‐‐ Versión PDF: PDF 1.4 Denominación PDF: PDF/A‐1:2007 Denominación ISO: ISO 19005‐1:2005/Cor 1:2007 Descripción: ‐‐‐

ISO 24517‐1:2008

Lanzamiento: 2008 Última Actualización: 14/05/2008 Versión PDF: PDF 1.6 Denominación PDF: PDF/E‐1:2008 Denominación ISO: ISO 24517‐1:2008 ‐ Document management ‐‐ Engineering document format using PDF ‐ ‐ Part 1: Use of PDF 1.6

Descripción: ISO 24517‐:2008 especifica el uso del Formato de Documento Portátil (PDF) Versión 1.6 para la creación de documentos utilizados en los flujos de trabajo de ingeniería.

14

ISO 32000‐1:2008

Lanzamiento: 2008 Última Actualización: 01/07/2008 Versión PDF: PDF 1.7 Denominación PDF: PDF 1.7 Denominación ISO: ISO 32000‐1:2008 Document management ‐‐ Portable document format ‐‐ Part 1: PDF 1.7

Descripción: ISO 32000‐1:2008 especifica un formato digital para la representación de documentos electrónicos para permitir a los usuarios intercambiar y consultar los documentos electrónicos independientes del entorno de trabajo en el que fueron creados o el entorno de trabajo en el que son vistos o impresos. Está dirigida a los desarrolladores de software que crean archivos PDF (escritores conformes), a un software que lea archivos PDF e interprete su contenido para su visualización e interacción (lectores conforme) y a productos PDF que lean y/o escriban archivos PDF para una variedad de otros fines (productos conformes).

ISO 15930‐7:2008

Lanzamiento: 2008 Última Actualización: 16/07/2008 Versión PDF: PDF 1.6 Denominación PDF: PDF/X‐4:2008 Denominación ISO: ISO 15930‐7:2008 Graphic technology ‐‐ Prepress digital data exchange using PDF ‐‐ Part 7: Complete exchange of printing data and partial exchange of printing data with external profile reference using PDF 1.6

Descripción: ISO 15930‐7:2008 especifica el uso del Formato de Documento Portátil (PDF) Versión 1.6 para la difusión de los datos digitales completos, que contienen todos los elementos necesarios para la reproducción de la impresión final. Soportan gestión del color, CMYK, escala de grises, RGB y datos spot‐colour, como también transparencia y contenido opcional. Los ficheros pueden ser preparados para ser usados con caracterización de impresión de escala de grises, RGB, y CMYK.

ISO 15930‐8:2008

Lanzamiento: 2008 Última Actualización: 16/07/2008 Versión PDF: PDF 1.6 Denominación PDF: PDF/X‐5:2008 Denominación ISO: ISO 15930‐8:2008 Graphic technology ‐‐ Prepress digital data exchange using PDF ‐‐ Part 8: Partial exchange of printing data using PDF 1.6

Descripción: ISO 15930‐7:2008 especifica el uso del Formato de Documento Portátil (PDF) Versión 1.6 para la difusión de los datos digitales, donde todos los elementos necesarios para la reproducción de impresión final están incluidos o se prevén para la identificación única. Soportan gestión del color, CMYK, escala de grises, RGB y datos spot‐colour, como también transparencia y contenido opcional. Los ficheros pueden ser preparados para ser usados con caracterización de impresión de escala de grises, RGB, CMYK y n‐ colorante.

15 ISO/AWI 14289‐1 :2009

Lanzamiento: 2009 Última Actualización: 20/05/2009 En desarrollo Versión PDF: ISO 32000‐1 Denominación PDF: PDF/UA‐1 Denominación ISO: ISO/AWI 14289‐1 Document management applications ‐‐ Electronic document file format enhancement for accessibility ‐‐ Part 1: Use of ISO 32000‐1

Descripción: La misión de PDF/UA es desarrollar estándares técnicos y de otro tipo para la edición, corrección y validación de contenido en formato PDF para garantizar la accesibilidad para las personas que utilizan la tecnología de asistencia tales como lectores de pantalla para usuarios ciegos.

ISO 16612‐2:2010

Lanzamiento: 2010 Última Actualización: 30/07/2010 Versión PDF: PDF 1.6 Denominación PDF: PDF/VT‐1:2010 y PDF/VT‐2:2010 Denominación ISO: ISO 16612‐2:2010 Graphic technology ‐‐ Variable data exchange ‐‐ Part 2: Using PDF/X‐ 4 and PDF/X‐5

Descripción: ISO 16612‐2:2010 define el formato de documento PDF/VT y métodos que permitan el intercambio de documentos fiables para la impresión de datos variables y transaccionales (VT). Utiliza el Formato de Documento Portátil (PDF) Versión 1.6, restringida por PDF/X‐4 y PDF/X‐5, para la representación de dichos documentos.

ISO/DIS 19005‐2.2

Lanzamiento: 2010 Última Actualización: 18/08/2010 En desarrollo Versión PDF: ISO 32000‐1 Denominación PDF: PDF/A‐2 Denominación ISO: ISO/DIS 19005‐2.2 Document management ‐‐ Electronic document file format for long‐ term preservation ‐‐ Part 2: Use of ISO 32000‐1

Descripción: ISO 19005‐2.2 especifica cómo usar el Formato de Documento Portátil (PDF) ISO 32000‐ 1 para la conservación a largo plazo de documentos electrónicos.

Actualmente, el comité de la ISO está trabajando en las especificaciones de PDF 2.0 (Document management—Portable document format—Part 2: PDF 2.0). Se espera que este estándar se publique en el 2012. Al parecer será un refinamiento de menor importancia de las actuales especificaciones PDF 1.7. Se ha comentado que PDF 2.0 no incorporará ninguna idea del proyecto nombre en clave ‘Mars’. ‘Mars’ era un proyecto de Adobe que se centraba en usar XML como formato de datos interno dentro de documentos PDF. La principal ventaja de utilizar XML como el formato interno de los archivos PDF sería que los programadores podrían utilizar el gran número de herramientas XML y tecnologías que están disponibles en el mercado para crear o procesar archivos PDF.

16

2.5 ISO 32000‐1

Todo el estudio de este proyecto se basa, principalmente, en el estándar ISO 32000- 1:2008 Document management -- Portable document format -- Part 1: PDF 1.7, que según se ha podido ver en su descripción está dirigida a los desarrolladores de software que crean archivos PDF –que no sería el caso de este proyecto-, un software que lea archivos PDF e interprete su contenido para su visualización e interacción –que tampoco es de lo que este proyecto trataría- y productos PDF que lean y/o escriban archivos PDF para una variedad de otros fines –que es, efectivamente, el caso de PDFLab.

A partir del estudio y análisis en profundidad de este estándar, se ha podido comprender, extraer y definir formalmente, entre otros aspectos:

 La estructura interna física de un fichero PDF.  La estructura interna lógica de un fichero PDF.  Los objetos que componen un PDF.  La Sintaxis del PDF.

17 2.5.1 Estructura Interna

Para facilitar el total entendimiento de la funcionalidad del proyecto es necesaria la total comprensión, hasta el más mínimo detalle de la estructura interna del PDF, ya que la labor principal de este proyecto es, finalmente, reconocer (leer) un PDF. No obstante, sin entrar mucho en detalle y, así, facilitar la comprensión general, en resumidas cuentas, la estructura general de un fichero PDF básico (sin actualizaciones incrementales) es la siguiente:

Header ‐ Una cabecera que identifica la versión de PDF a la que el archivo se ajusta

Body ‐ Un cuerpo que contiene los objetos que conforman el documento contenido en el fichero.

‐ Una tabla de referencias cruzadas que contiene la información sobre XRef Table los objetos indirectos en el fichero

‐ Un rastreador que da la localización de la tabla de referencias cruzadas Trailer y unos objetos especiales específicos en el cuerpo del fichero.

A continuación, un ejemplo de un fichero PDF en la cual se pueden ver cada una de las 4 regiones antes mencionadas:

%PDF−1. 7 Header

11 0 obj << /Type /Font /Subtype /TrueType ...otras entradas... /FontDescriptor 12 0 R >> endobj

12 0 obj << /Type /FontDescriptor /Ascent 891 ...otras entradas... /FontFile2 22 0 R >> endobj

13 0 obj << /Type /Font /Subtype /Type0 ...otras entradas... /ToUnicode 10 0 R >> endobj Body

18

8 0 obj Body 77 endobj

22 0 obj << /Length 413 /C 588 /Filter /FlateDecode /I 610 /O 572 /S 495 >> stream ÀÇÀÌÀçXÀÀä60À¨$EûD6Noçp{RYû…S•,ÝL<»ëȘ¦Äu¢^9ÃÔxëñ:©7QŽµ‡LöÌœí~XIeÂǯn /$ßt3^açQHÈuÜÎbÆgc$°¯¹Ž/ÃòÃûÛѹ»nç^»·íöZ0*Ývd3³2Ûá‰ën<ŸS|¢\H°ÄãÅÄ‹Ê‹Ü ]ú:ùŒüœ'²+ñ¹ÈtX)-ó)Uxåx¥y%{ß‹“Ù}OdOXO(WxçÜ3ãÄ'Ç'Í'Ù'ñ«ÈyØLx¬¶ÍvBµÂ7Ç7 endstream endobj

23 0 obj << /Length 8 0 R >> stream BT /F1 12 Tf 72 712 Td ( Un Stream de texto sin codificar ) Tj ET endstream endobj

xref 0 2 0000000003 65535 f 0000000017 00000 n 11 3 0000000081 00000 n XRef Table 0000000000 00007 f 0000000331 00000 n 0000000331 00000 n 22 2 0000025518 00002 n 0000025635 00000 n

… trailer << /Size 22 /Root 2 0 R /Info 1 0 R /ID [ < 81b14aafa313db63dbd6f981e49f94f4 > Trailer < 81b14aafa313db63dbd6f981e49f94f4 > ] >> startxref 18799 %%EOF

19 Si ya en este punto la complejidad del tratamiento de un fichero es sumamente complicada, el estándar ISO 32000 especifica que los contenidos de un documento PDF pueden ser actualizados incrementalmente sin la necesidad de reescribir el fichero entero. Es decir, cuando se actualiza un PDF incrementalmente, los cambios se añaden al final del fichero, dejando el contenido original intacto. Complicando con creces el tratamiento de los ficheros PDF. Como se puede ver a continuación, así resultaría un PDF con incrementos (que resulta ser el formato habitual):

Header

Body ‐ El Fichero Original se deja intacto. Fichero Original

XRef Table

Trailer

Cambios en el Body Primer Incremento Actualización XRef ‐ En el Cuerpo incremental sólo están los objetos nuevos, o los que sobrescriben (reemplazando o actualizando) a los objetos del Cuerpo original. Trailer

‐ Una tabla de referencias cruzadas incremental sólo contiene entradas para los objetos que han sido cambiados, reemplazados o borrados. Cambios en el Body

Último Incremento Actualización XRef

Trailer

20

2.5.2 Estructura lógica

Un documento PDF, a nivel lógico, tiene muchos niveles de abstracción. Se puede mirar un PDF desde diferentes perspectivas, cada una con sus ventajas y desventajas. Desde un nivel de abstracción inferior, donde el PDF contiene los datos del documento en bruto, hasta un nivel de abstracción superior, donde el PDF contiene construcciones jerárquicas como Anotaciones o Páginas. Pasando por niveles de abstracción donde el PDF solo contiene objetos simples, o niveles de abstracción donde el PDF contiene objetos simples organizados en forma de árbol para formar conjuntamente estructuras compuestas como Fuentes e Imágenes. Este proyecto centra sus esfuerzos, en una primera aproximación, en reconocer ficheros PDF, por lo tanto, es fundamental que a nivel sintáctico el nivel de abstracción sea lo más básico posible: El documento PDF contiene objetos simples. En el Cuerpo y Trailer del PDF residen los Objetos. Estos se distinguen en 3 categorías:

 Objetos Indirectos  Objetos Directos  Referencias

Los Objetos Indirectos son declaraciones explícitas de objetos. Es decir, es una etiqueta a un objeto directo para ser posteriormente referenciado.

Sintaxis(1):

+ + “obj” “endobj” Indirectos

Ejemplo:

40 0 obj …objeto… endobj

Los Objetos Directos son apariciones implícitas de objetos tipo simples o Directos compuestos.

Las Referencias hacen referencia a Objetos Indirectos previamente definidos.

Sintaxis(2):

Referencias + + “R”

Ejemplo:

40 0 R

1 Siendo cualquier dígito y la sintaxis que reconoce cualquier Tipo de Objeto. 2 Siendo cualquier dígito.

21 Los tipos de los Objetos Directos se pueden clasificar en:

 Tipos Simple  Tipos Compuesto

Los Tipos Simple son los siguientes:

Los objetos de tipo Boolean representan los valores lógicos cierto y falso. Boolean Aparecen en el PDF usando las palabras clave: true y false

Los objetos de tipo Integer representan números enteros matemáticos. Un número entero aparece en el PDF como uno o más dígitos precedido, opcionalmente por un signo.

Sintaxis(3): Integer ( + | ‐ | ε )

Ejemplo:

123 43445 +17 ‐98 0

Los objetos Real representan números reales matemáticos. Un número real aparece en el PDF como uno o más dígitos precedido, opcionalmente por un signo y precediendo, finalizando o embebido un punto decimal (.).

Sintaxis(4): Real

( + | ‐ | ε ) ( * ’.’ + |+ ’.’ * |+ ’.’ +)

Ejemplo:

34.5 ‐3.62 +123.6 4. ‐.002 0.0

Un Objeto de tipo Name es un símbolo atómico únicamente definido por una secuencia de cualquier carácter (8 bit) excepto el carácter nulo. Únicamente definido significa que dos objetos con la misma secuencia de caracteres denotan el mismo objeto. Atómico significa que un nombre no tiene estructura interna.

Sintaxis(5): Name ‘/’ ( ‐ [ ‘ ‘ , ‘\0’] )*

Ejemplo:

/Name1 /Con*car^act.ere,s

3 Siendo cualquier dígito. 4 Siendo cualquier dígito. 5 Siendo cualquier carácter representado con 8 bits.

22

Un Objeto de tipo String puede aparecer de forma hexadecimal, lo cual es útil para incluir arbitrariamente datos binarios en un fichero PDF. Los objetos de tipo Hexadecimal String aparecen como una secuencia de dígitos hexadecimales (0‐9 y A‐F o a‐f) codificados en caracteres ASCII y encerrados en ángulos (‘<’ y ‘>’) String Hexadecimal Sintaxis:

‘<’ [ (0..9) | (A..F) ]* ‘>’

Ejemplo:

<34345BCC345BDE7D5A8B94A64>

Un Objeto de tipo String consisten en una serie de cero o más bytes. Los objetos de tipo Literal String aparecen como un número arbitrario de caracteres cerrado en paréntesis. Cualquier carácter puede aparecer en un String excepto paréntesis no balanceados (‘(‘ y ‘)’) y la contrabarra (\).

Sintaxis:

String literal  ‘(‘ Contenido() ‘)’ String Literal Contenido  ( ( | String literal() )* | ε )

Ejemplo:

(Esto es un String) (Los string pueden contener Retornos de carro) (Los string pueden contener paréntesis balanceados () y Caracteres especiales (*!&}^% y demás). )

Un objeto de tipo Null tiene un tipo y un valor que no son iguales a cualquier otro Null objeto. Los objetos de tipo Null aparecen en el PDF usando la palabra clave: null

23 Los Tipos Compuesto son los siguientes:

Un Objeto de tipo Dictionary es una tabla asociativa que contiene parejas de objetos, también conocidas como entradas de diccionario. El primer elemento de cada entrada es la clave y el segundo elemento es el valor. Las claves aparecen como un Objeto de tipo Name. Los valores pueden ser Objetos de cualquier tipo incluyendo otro Dictionary. Los objetos Dictionary aparecen como una secuencia de parejas clave‐valor encerradas en doble angulos (‘<<’ y ‘>>’ )

Sintaxis(6):

Dictionary  ‘<<‘ keyvalue() more() ‘>>’ keyvalue  key() value() more  ( keyvalue() | ε ) key  value  Dictionary

Ejemplo:

<< /Tipo /Ejemplo /Subtipo /EjemploDiccionario /Version 0.01 /Entero 12 /String1 /String2 (un string) /Subdiccionario << /Item1 0.4 /Item2 true /UltimoItem (fin) >> >>

Un Objeto de tipo Array es una colección unidimensional de objetos dispuestos secuencialmente. A diferencia de los arrays en muchos otros lenguajes de programación, los Array de PDF pueden ser heterogéneos. Es decir, los elementos de un array pueden ser cualquier combinación de números, strings, diccionarios, o cualquiera otro objeto, incluyendo otros arrays. Los Objetos de tipo Array aparecen como una secuencia de objetos encerrados en corchetes (‘[’ , ’]’).

Sintaxis(7): Array ‘[‘ * ‘]‘

Ejemplo:

[ 543 3.141592654 (String) /Name] [[1 2 3][4 5 6][7 8 9]] [/a (b) [/c (d) 2.72] [(f) [/g (hi)] ] <>]‐1 <1AB2C3>] []

6 Siendo la sintaxis del Tipo de Objeto Name Siendo la sintaxis que reconoce cualquier Tipo de Objeto. 7 Siendo la sintaxis que reconoce cualquier Tipo de Objeto.

24

Un Objeto de tipo Stream, como un objeto string, es una secuencia de bytes. Además, un stream puede ser de longitud ilimitada, mientras que un string está sujeto al límite de implementación. Por esta razón, los objetos que contendrán, potencialmente, una gran cantidad de datos como imágenes y descripciones de páginas, serán representados por stream. Los Objetos de tipo Stream aparecen como un diccionario seguido de 0 o más bytes entre las palabras clave stream y (retorno de carro)endstream. El diccionario en cuestión debe tener como entrada una Length que indica cuantos bytes del PDF son usados para los datos del stream.

Sintaxis(8): Stream “stream” * ‘\n’ “endstream”

Ejemplo:

<< /Filter /Filtro /Lenght 321 >> stream …cero o más bytes… endstream

8 Siendo la sintaxis que reconoce el Tipo Dictionary.

25 A continuación, un ejemplo de un documento PDF localizando sus objetos:

%PDF−1. 7 Leyenda: Header Indirecto Referencia 13 0 obj << /Type /Font Directo: /Subtype /Type0 ...otras entradas... Boolean /ToUnicode 10 0 R >> Integer endobj Real Name 10 0 obj << /Text (aAbBcCdDeEfF) String /Seek -43.4 Dictionary /Contents [ Array 22 0 R 23 0 R Stream ] >> endobj

8 0 obj 77 endobj

22 0 obj << /Length 413 /Save true /Filter /FlateDecode /X (bo) /O 572 /S 495 >> stream ÀÇÀÌÀçXÀÀä60À¨$EûD6Noçp{RYû…S•,ÝL<»ëȘ¦Äu¢^9ÃÔxëñ:©7QŽµ‡LöÌœí~XIeÂǯn/ $ßt3^açQHÈuÜÎbÆgc$°¯¹Ž/ÃòÃûÛѹ»nç^»•íöZ0*Ývd3³2Ûá‰ën<ŸS|¢\H°ÄãÅÄ‹Ê‹Ü]ú :ùŒüœ'²+ñ¹ÈtX) ó)Uxåx¥y%{ß‹“Ù}OdOXO(WxçÜ3ãÄ'Ç'Í'Ù'ñ«ÈyØLx¬¶ÍvBµÂ7Ç7 endstream endobj

23 0 obj << /Length 8 0 R >> stream BT /F1 12 Tf 72 712 Td ( Un Stream de texto sin codificar ) Tj ET endstream Body endobj …

xref 0 2 0000000003 65535 f 0000000017 00000 n 11 3 0000000081 00000 n 0000000000 00007 f XRef Table 0000000331 00000 n 0000000331 00000 n 22 2 0000025518 00002 n 0000025635 00000 n

trailer << /Size 22 /Root 8 0 R /Info 13 0 R /ID [ < 81b14aafa313db63dbd6f981e49f94f4 > < 81b14aafa313db63dbd6f981e49f94f4 > Trailer ] >> startxref 18799 %%EOF

26

En una segunda aproximación, este proyecto procura interpretar el fichero y generar una estructura de objetos, por lo tanto, a nivel semántico, el nivel de abstracción tiene que ser superior: El documento PDF contiene una estructura arbórea de objetos simples y compuestos.

Contenido

Imágen Página miniatura

... Anotaciones

Arbol de páginas ...

Página ...

Entrada del ... esquema

Esquema ... jerárquico

Entrada del Catálogo esquema

Ítem

Discusión ...

Discusiones del ... Ítem artículo

Destinos con Discusión ... nombre

Formulario interactivo

27 A continuación el contenido de un cuerpo y trailer de un documento PDF indicando sus referencias para generar su estructura:

trailer Leyenda: << /Size 22 /Root 30 0 R Objeto Indirecto /Info 13 0 R /ID [ Referencia < 81b14aafa313db63dbd6f981e49f94f4 > < 81b14aafa313db63dbd6f981e49f94f4 > ] >> startxref 18799 %%EOF Trailer

30 obj << /ViewerPreferences <> /Metadata 31 0 R /Pages 40 0 R /Type/Catalog /PageLabels 32 0 R >> endobj

40 0 obj << /Count 5 /Kids[ 41 0 R 42 0 R 43 0 R ] /Type/Pages >> endobj

41 0 obj << /Count 3 /Kids[ 44 0 R 45 0 R ] /Type/Pages >> endobj

42 0 obj << /Contents 51 0 R /Type /Page /Parent 40 0 R /Rotate 0 /MediaBox [0 0 612 792] /CropBox[0 0 612 792] /Resources 53 0 R /StructParents 0 >> endobj

43 0 obj << /Contents 52 0 R /Type /Page /Parent 40 0 R >> endobj

44 0 obj << /Contents 48 0 R /Type /Page /Parent 40 0 R >> endobj

45 48 51 52 53 Body

28

45 48 51 52 53 Body 45 0 obj << /Count 2 /Kids[ 46 0 R 47 0 R ] /Type/Pages >> endobj

46 0 obj << /Contents 49 0 R /Type /Page /Parent 45 0 R >> endobj

47 0 obj << /Contents 50 0 R /Type /Page /Parent 45 0 R >> endobj

48 0 obj << /Length 187 /Filter /FlateDecode >> stream ÀÇÀÌÀçXEûD6Noçp ... Lx¬¶ÍvBµÂ7Ç7 endstream endobj

49 0 obj << /Length 23 /Filter /FlateDecode >> stream ÀÀä60À¨$hfgh4... Lx¬¶ÍvBµÂ7Ç7 endstream endobj

50 0 obj << /Length 12 /Filter /FlateDecode >> stream ¬¶ÍvBµûD6Noçp ... Lx¬¶ÍvBµÂ7Ç7 endstream endobj

51 0 obj << /Length 67 /Filter /FlateDecode >> stream ûD6N¬¶ EûD6Noçp ... Lx¬¶Ív endstream endobj

52 0 obj << /Length 32 /Filter /FlateDecode >> stream ÀÀä60À¨$EûD6Noçp ... Lx¬¶ÍÂ7Ç7 endstream endobj

53 o obj << /ColorSpace<> /Font<> /ProcSet[/PDF/Text] /ExtGState<> /Properties<> >>

29 Que se interpreta como la siguiente estructura:

Clasificado según el tipo:

Catálogo Objeto #30

Páginas Objeto #40

Objeto #41

Objeto #45

Página Objeto #44 Objeto #47 Objeto #48 Objeto #42 Objeto #43

Contenido Objeto #48 Objeto #49 Objeto #50 Objeto #51 Objeto #52

Recurso Objeto #53

30

Técnicas de Compilación

En este capítulo se presentan un conjunto de temas de la teoría del diseño e implementación de lenguajes de programación que han sido usados a lo largo de este proyecto.

3 Técnicas de Compilación

Una de las principales tareas de este proyecto es la lectura de un fichero PDF. Una vez estudiada a fondo la estructura interna del PDF se ha podido comprobar que ésta se corresponde a un lenguaje libre de contexto, ergo, se le puede definir una gramática libre de contexto que lo genere.

3.1 Expresiones regulares

Algunos de los componentes sintácticos de la estructura interna, responden a una sintaxis o expresión regular.

ó :

1. ó .

2. ó .

3. í , ó .

4. ó , , ó :

(a)

(b)

(c)

5. ó ó 1 4

Una expresión regular representa patrones de cadenas de caracteres. Una expresión regular define un lenguaje regular. Y un lenguaje regular es implementado por un autómata de estados finitos.

33

ó 5 :

,,,, ,

;

;

; : ó ó;

ó.

Así pues, un autómata finito es un reconocedor de un lenguaje regular. Se debe añadir un autómata de estados finitos en PDFLab por cada una de las estructuras sintácticas regulares que contiene. A estas estructuras sintácticas regulares se les llama token. Dichas estructuras son, por lo tanto, los terminales de la gramática libre de contexto que define a la estructura interna del PDF.

3.2 Sintaxis libre de contexto

La estructura interna del PDF puede ser generada por una gramática libre de contexto. Es decir, la estructura interna del PDF es un lenguaje libre de contexto.

á 4 :

,,,

,

. .

: ,

í .

34

Si se quiere reconocer un lenguaje libre de contexto se necesita un parser o analizador sintáctico. Pudiéndose éste construir a partir de la correspondiente gramática. Analizar sintácticamente una sentencia determinada es encontrar para ella un árbol de parser que tenga como raíz el símbolo axioma de la gramática y como hojas la sentencia aplicando reglas de la gramática. Si se puede construir un árbol entonces la sentencia corresponde al lenguaje. Un parser puede reconocer sintácticamente una entrada de dos formas:

 Construyendo el árbol sintáctico empezando por la raíz (análisis sintáctico descendente)  Construyendo el árbol sintáctico empezando por las hojas (análisis sintáctico ascendente). El análisis sintáctico descendente se hace utilizando parser descendentes. También se les llama parser top-down ya que construyen el árbol de arriba a abajo. La construcción descendente equivale a una derivación más a la izquierda. El análisis sintáctico ascendente se hace utilizando parser ascendentes, también conocidos parser bottom-up ya que construyen el árbol de abajo a arriba. La construcción ascendente equivale a una derivación más a la derecha.

3.3 Gramática de atributos

Ahora bien, el analizador sintáctico sólo es capaz de reconocer (leer) el PDF. Se necesita proveer al sistema de un mecanismo que nos permita la generación de una estructura de objetos a partir de la información reconocida. Este mecanismo nos lo ofrece las gramáticas de atributos. Las gramáticas de atributos son un formalismo para escribir acciones semánticas. Una gramática de atributos, que es un caso particular de definición dirigida por sintaxis, es una gramática no contextual en que cada no terminal de la gramática tiene un conjunto de atributos asociados. Durante el análisis sintáctico la gramática de atributos proporciona la información necesaria para llevar a cabo operaciones dependiendo del contexto en el que se encuentre. Dicha información se pasa a través de los denominados atributos. Los atributos pueden ser de dos tipos: heredados y sintetizados. Los atributos heredados permiten transmitir información hacia abajo en el árbol sintáctico, es decir, de padres a hijos. Mientras que, los atributos sintetizados permiten transmitir información hacia arriba en el árbol sintáctico, es decir, de hijos a padres.

35

Estado del arte

En este capítulo se estudia el mercado para localizar herramientas que trabajen con PDF. Éstas se han clasificado en diferentes categorías según su aplicación y uso del fichero PDF.

4 Estado del arte

4.1 Herramientas

A día de hoy existen una gran cantidad de herramientas que tratan ficheros PDF. A continuación, se pueden ver algunas de las cuales se han estudiado y analizado para definir el porqué de este proyecto y en qué tipología de herramienta estaría incluido.

PDF Explorer 1.5.0.58

Web: http://www.rttsoftware.com/

Descripción: PDF Explorer es un software de gestión de ficheros PDF y CHM. Permite la indexación de documentos PFF y CHM en una base de datos usando varios campos metadata, como: Nombre, tamaño, fecha, Titulo, Asunto, Autor, Creador, Productor, Fecha de creación, Fecha de modificación, Número de páginas, y un máximo de 100 campos personalizables para añadir datos personales. Con PDF Explorer se puede fácilmente indexar una gran colección de documentos, ubicados en diferentes discos, sitios de red e incluso contenidos en archivos comprimidos ZIP, RAR y ACE. Se puede buscar a lo largo de todos los ficheros usando expresiones booleanas y expresiones de texto completo, verlos, extraer imágenes, extraer texto, ejecutar scripts, y mucho más. PDF Explorer puede, inclusive, leer documentos de texto o crear ficheros WAV o MP3 para poder escucharlos en otro momento. PDF Explorer incluye un servidor Web, que proporciona acceso remoto a algunas de las funcionalidades del programa usando un simple explorador web.

Características:  Interfaz multilenguage y guía del usuario.  Escanea y CHMs que se encuentran en ZIP, RAR o ACE y discos de red.  Interfaz web, proporcionada por un servidor HTTP embebido.  Indexa metadatos de los documentos y texto de las páginas.  Añade y edita campos metadatos.  Búsquedas de texto completo.  Búsquedas booleanas.  Visor/Editor/Extractor de imágenes raw.  Visor/Extractor de texto.  Herramientas de script para renombrar, extraer imágenes, imprimir, etc.  Lectura de texto, voces SAPI4/5.  Lectura de texto a fichero, formato WAV o MP3.  Resuelve y rastrea números ISBN y DOI.  Asistente en la edición de campos metadatos, QuickPaste y QuickImageOCR.  Herramienta de rotación de Páginas.  Herramienta para borrar todos los rastros de metadatos (anonimizador).  Herramientas para Separar/Extraer y Unir/Unificar páginas PDF.  Añade marca de agua a documentos PDF con texto, imagen y formas geométricas.  Conjunto de opciones de apertura PDF.  Añade, borra y consulta ficheros adjuntos.  Importa y exporta campos de metadatos.  Capa de edición.  Mantenimiento de la base de datos y backup.

Licencias: Licencia individual ...... $60.00 Licencia 5 usuarios ...... $300.00 Licencia 10 usuarios ...... $540.00 Licencia 20 usuarios ...... $960.00 Licencia 50 usuarios ...... $2250.00 Licencia 100 usuarios ...... $3900.00

39 PDF ShellTools 1.5.0.58

Web: http://www.rttsoftware.com/

Descripción: PDFShellTools es un software que extiende el entorno de Windows y proporciona acceso a herramientas para trabajar con documentos PDF desde el entorno. Con éste se pueden realizar muchas tareas comunes con documentos PDF sin necesidad de abrir el u otra aplicación.

Características:  PDF‐InfoTip – Muestra metainformación en globos del sistema.  PDF‐InfoEdit – Hoja de propiedades para editar metainformacion.  Insertar/Añadir/Adjuntar al soltar – Inserta, añade o adjunta documentos en un fichero PDF, arrastrándolos y soltándolos en ese fichero PDF.  Herramientas en el menú contextual ‐ Accesible desde el menú contextual del fichero.  PDF‐Anonymize – Borra los metadatos de los PDF.  PDF‐Rotapáginas – Gira páginas de documentos PDF 90º  PDF‐Separa/Extrae – Extrae páginas, o rango de páginas, a nuevos documentos PDF.  PDF‐Borra paginas – Borra páginas, o rango de páginas, de documentos PDF.  PDF‐Ordena/Reorganiza – Ordena documentos PDF o reorganiza estructuras de directorios de PDF en un nuevo documento PDF.  PDF‐Inserta/Une – Inserta páginas, o rango de páginas antes, o después de un número de página de otro PDF.  PDF‐Adjuntos – Añade, borra, consulta o extrae adjuntos de ficheros PDF.  PDF‐Opciones de Apertura – Configura la vista inicial de documentos PDF.  PDF‐Set/Reset Password – Controla el acceso a los documentos PDF.  PDF‐Sello/Marca de Agua – Estampa texto, imágenes o figures geométricas en páginas.  PDF‐Extractor de texto – Extrae el texto de los documentos PDF.  PDF‐Renombrador – Renombra, y organiza por carpetas, los documentos PDF a partir de su metainformación.

Licencias: Licencia individual ...... $39.95 Licencia 5 usuarios ...... $300.00

Nitro PDF

Web: http://www.nitropdf.com

Descripción: Nitro PDF Professional, la completa alternativa a Adobe Acrobat, permite usar herramientas muy potentes para crear, editar, combinar, proteger, anotar, rellenar formularios, y guardar ficheros PDF 100% estándar para la industria.

Características:  Creación fácil y rápida de PDF.  Edición de PDF intuitiva.  Capacidades de conversión y exportación líder en ámbito industrial.  Reconocimiento de caracteres ópticos (OCR).  Revisión del documento electrónico en línea.  La recopilación de información más fiable con formularios PDF.  Intercambio de información segura.  Fácil integración en el proceso de empresa.  Mantiene a todo el equipo en la misma página.

Licencias: Licencia individual ...... $99.99

40

PDFZilla

Web: http://www.pdfzilla.com/

Descripción: Convierte PDF a Word Convierte PDF a RTF Convierte PDF a TXT Convierte PDF a Imágenes Convierte PDF a HTML Convierte PDF a SWF

Características:  Convierte PDF a Word con todo el texto y gráficos.  Convierte PDF a RTF con todo el texto y gráficos.  Convierte PDF a fichero de texto plano.  Convierte PDF a BMP, JPG, GIF o TIF.  Convierte PDF a Shockwave Flash Animation.  Convierte todas las páginas o rangos.  Fácil uso.

Licencias: Licencia de uso ...... $49.65

Adobe converter

Web: http://www.adobe.com/products/acrobat/access_onlinetools.

Descripción: Frente a tantas herramientas de conversión que han ido apareciendo en el mercado Adobe Systems también se ha querido subir al carro facilitando en su web una herramienta online que te permite realizar la conversión de un documento en PDF a otro en texto gratuitamente.

Características:

Licencias: Gratuito

Total PDF Converter

Web: http://www.coolutils.com/TotalPDFConverter

Descripción: Total PDF Converter convierte ficheros PDF a HTML, DOC, TXT, XLS, PD, CVS o imágenes.

Características:  Puede guardar ficheros Adobe como imágenes y localizarlas a través de una pantalla.  Puede guardar las preferencias para la conversión.  Ofrece la habilidad de renombrar ficheros de salida.  Soporta DPI y Tamaño de papel para TIFF.  Puede convertir múltiples páginas de un fichero PDF a HTML y ubicarlas en ficheros HTML separados.

Licencias: Licencia de uso ...... $49.90

41 Some PDF

Web: http://www.somepdf.com/

Descripción: Ofrece herramientas gratuitas para convertir y extraer a diferentes formatos.

Características:  PDF a documentos Word (Some PDF to Word Converter)  PDF a documentos Text (Some PDF to Word Converter)  PDF a documentos Html (Some PDF to Word Converter)  Extraer imágenes (Some PDF Image Extractor)

Licencias: Gratuito

PDF Image Extraction Wizard 2.0

Web: http://www.rlvision.com/pdfwiz/about.asp

Descripción: Con PDFWiz se pueden extraer imágenes bitmap de documentos PDF y salvarlos como ficheros de imagen individuales. Las imágenes se extraen tal y como se encuentran en el documento PDF sin compresión. Esto quiere decir que las imágenes extraídas tienen la máxima calidad posible, sólo se ve limitado por la calidad original del documento.

Características:  Guarda imágenes contenidas en documentos PDF.  No hay compresión para obtener la máxima calidad.  Fácil uso.  Se puede limitar a páginas específicas.  Extrae todas las imágenes o las grandes o las pequeñas.  Guarda imágenes como JPEG, PNG, BMP o TGA.  Extrae imágenes de PDF protegidos por contraseña.  Rota, voltea y une imágenes.  Omite duplicados Automáticamente

Licencias: Licencia Basic ...... $14.95 Licencia Pro ...... $24.95

A‐PDF Text Extractor 1.3.11

Web: http://www.a‐pdf.com

Descripción: A‐PDF Text Extractor es una utilidad gratuita diseñada para extraer texto de ficheros PDF para usar en otras aplicaciones. Hay tres tipos de salida de texto: PDF Orden, Arreglo Inteligente y con posición.

Características:

Licencias: Gratuito

42

PDFOne .NET

Web: http://www.gnostice.com/PDFOne_dot_Net.asp

Descripción: Gnostice PDFOne .NET es un componente versátil para desarrolladores .NET para implementar tareas relacionadas con PDF en sus aplicaciones. PDFOne .NET puede crear, editar, ver, imprimir, encriptar, desencriptar, unir, separar, reorganizar, marcar, anotar, añadir marca de agua y estampar documentos PDF. PDFOne .NET puede procesar formularios PDF o Acroforms creándolos, editando, rellenando campos de formumulario PDF. PDFOne .NET realiza todas estas tareas sin ningún software externo de PDF, tal como librerías PDF, Adobe Acrobat Profesional o Ghostsscript. Los componentes PDFOne tienen cientos de funciones y propiedades. Esconde la complejidad del formato PDFy permite a los desarrolladores implementar características relacionadas con PDF rápidamente.

Características:  Lee, escribe y mejora ficheros PDF.  Escribe texto formateado.  Renderiza imágenes.  Dibuja formas, tablas.  Inserta texto automático.  Añade cabeceras, y pies de página.  Crea, edita y guarda formularios PDF.  Añade, edita anotaciones.  Añade, edita marcadores.  Añade marcas, comentarios (notas), sellos, marcas de agua.  Une, divide documentos PDF.  Visualiza, imprime documentos PDF.

Licencias: Licencia de uso ...... $350.00

PDFOne Java

Web: http://www.gnostice.com/PDFOne_Java.asp

Descripción: Gnostice PDFOne para la plataforma Java es un componente para programadores Java. Gnostice PDFOne proporciona un conjunto de APIs para crear, editar, ver, imprimir, unir,separar, reorganizar, encriptar, desencriptar, marcar, anotar, añadir marca de agua y estampoar documentos PDF. PDFOne .Java puede procesar formularios PDF o Acroforms creándolos, editando, rellenando campos de formulario PDF. PDFOne Java realiza todas estas tareas sin ningún software externo de PDF, tal como librerías PDF, Adobe Acrobat Profesional o Ghostsscript.

Características:  Lee, escribe y mejora ficheros PDF.  Escribe texto formateado.  Renderiza imágenes.  Dibuja formas, tablas.  Inserta texto automático.  Añade cabeceras, y pies de página.  Crea, edita y guarda formularios PDF.  Añade, edita anotaciones.  Añade, edita marcadores.  Añade marcas, comentarios (notas), sellos, marcas de agua.  Une, divide documentos PDF.  Visualiza, Imprime documentos PDF.

Licencias: Licencia de uso ...... $499.00

43 PDFToolkit VCL v3.0

Web: http://www.gnostice.com/PDFtoolkit_VCL.asp

Descripción: Gnostice PDFtoolkit es un componente para Delphi y C++Builder. Los componentes PDFtoolkit tienen cientos de funciones y propiedades. Esconde la complejidad del formato PDF y permite a los desarrolladores implementar características relacionadas con PDF rápidamente. PDFtoolkit realiza todas estas tareas sin ningún software externo de PDF, tal como librerías PDF, Adobe Acrobat Profesional o Ghostsscript.

Características:  Lee, escribe y mejora ficheros PDF.  Escribe texto formateado.  Renderiza imágenes.  Dibuja formas, tablas.  Inserta texto automático.  Añade cabeceras, y pies de página.  Crea, edita y guarda formularios PDF.  Añade, edita anotaciones.  Añade, edita marcadores.  Añade marcas, comentarios (notas), sellos, marcas de agua.  Une, divide documentos PDF.  Visualiza, Imprime documentos PDF.

Licencias: Licencia de uso ...... $349.00

PDF Decrypter

Web: (http://www.pdfdecrypter.com/

Descripción: PDF Decrypter Pro se puede usar para desencriptar ficheros PDF protegidos, que tienen password. Los ficheros desencriptados se pueden abrir con cualquier visor de PDF sin ninguna restricción – habilitando las funciones de imprimir / copiar / editar. Todas las versiones de PDF son soportadas. PDF Decrypter no se relaciona con ningún software de terceras partes y, por supuesto, Adobe Acrobat y Reader no se requieren.

Características:  Soporta Windows Windows 98, ME, NT, 2000, XP, 2003, Windows Vista y Windows 7.  Borra la configuración de seguridad de un PDF encriptado al instante.  Soporta PDF 1.7  Soporta PDF 1.7, incluyendo encriptación 40‐bit RC4, encriptación RC4 128‐bit, decriptación AES, ficheros comprimidos y metadatos no encriptados.  Soporta encriptación Adobe Standard 40‐bit, Adobe Advanced 138‐bit y AES.  Desencripta ficheros PDF protegidos, borrando restricciones para imprimir, editar y copiar.  Soporta arrastrar y soltar ficheros PDF

Licencias: Licencia personal individual ...... $29.95 Licencia comercial individual ...... $39.95 Licencia 10 usuarios ...... $199.75 Licencia ilimitada ...... $399.50

44

4.2 Clasificación

Una vez vistas algunas de las herramientas, se puede observar que, en definitiva, éstas se pueden clasificar en 6 grandes categorías:

 Visor/Editor de PDF o Permite crear, ver, combinar, proteger o guardar ficheros PDF o Ejemplos: Adobe Acrobat Pro, Adobe Acrobat Reader, Nitro PDF

 Explorador de PDF o Permite gestionar e indexar archivos PDF a través de sus metadatos o Ejemplos: PDF ShellTools 1.5.0.58, PDF Explorer 1.5.0.58

 Conversor de PDF o Permite convertir un fichero PDF en otro formato. o Ejemplos: Some PDF, Total PDF Converter, Adobe converter, PDFZilla

 Extractor de PDF o Permite extraer el contenido o parte de éste de un fichero PDF o Ejemplos: A-PDF Text Extractor 1.3.11, PDF Image Extraction Wizard 2.0, Some PDF

 Decodificador de PDF o Permite eliminar el password de usuario y obtener el PDF original o Ejemplo: PDF Decrypter

 Framework o Componente para framework que implementa funcionalidades sobre PDF. o Ejemplos: PDFToolkit VCL v3.0, PDFOne.NET, PDFOne Java

Se puede apreciar que las herramientas anteriormente vistas han sido clasificadas en una o más de estas 6 categorías según su funcionalidad. Se hace notar que la intención principal ha sido clasificar las herramientas por sus aspectos funcionales para poder categorizar, también, PDFLab en una de éstas. Es por ello que no se ha querido explícitamente comparar dichas herramientas ya que no se ha creído necesario para el desarrollo.

45 4.3 PDFLab

Este proyecto no pertenece a ninguna de las 6 categorías descritas anteriormente, no obstante, puede implementarlas o al menos colaborar en su implementación, o inclusive, si se permite, implementar nuevas herramientas. PDFLab se encarga de, a partir de un documento PDF, navegar por la estructura interna, analizarla y generar una estructura de objetos. Dependiendo de qué backend se le adjunte se puede implementar, con más o menos complejidad, la herramienta que se desee apoyándose de la estructura de objetos generado por PDFLab. Véanse cómo interaccionarían PDFLab y los módulos para generar cada una de las herramientas:

 Visor/Editor de PDF

Backend PDFLab Visor

En el caso de los visores/editores de PDF, cuya funcionalidad es crear, ver, combinar, proteger o guardar ficheros PDF, si se requiere otorgar a PDFLab de esta funcionalidad se debería añadir una interfaz backend capaz de visualizar la estructura de objetos generada por PDFLab.

 Explorador de PDF

Backend PDFLab Explorador

46

En el caso de los Exploradores de PDF, cuya funcionalidad es indexar archivos PDF a través de sus metadatos, si se requiere otorgar a PDFLab de esta funcionalidad, se debería añadir a éste un componente que se encargase de localizar los PDF, aprovechar de la herramienta PDFLab para obtener la información interna e indexarla en una base de datos o semejante para tener un acceso rápido.

 Conversor de PDF

Backend PDFLab Conversor

En el caso de los Conversores de PDF, cuya funcionalidad es convertir de un fichero PDF a otro formato, si se requiere otorgar a PDFLab de esta funcionalidad, se debería añadir a éste un backend que a partir de la estructura de objetos, generada por PDFLab, se obtuviera la información de texto y la formateara para la salida requerida.

 Extractor de PDF

Caminante no hay camino se hace camino al andar Backend PDFLab Extractor

En el caso de los Extractores de PDF, cuya funcionalidad es extraer el contenido o parte de éste de un fichero PDF, si se requiere otorgar a PDFLab de esta funcionalidad, muy semejante a la del caso de los Conversores, se debería añadir a PDFLab un backend que a partir de la estructura de objetos generada por éste se obtuviera el contenido de texto e imágenes, etc.

47  Decodificador de PDF

Backend PDFLab Decodificador

En el caso de los Decodificadores de PDF, cuya funcionalidad es eliminar el password de usuario y obtener el PDF original, si se requiere otorgar a PDFLab de esta funcionalidad se debería añadir a PDFLab un backend que a partir de la estructura de objetos generada regenerase el PDF original.

 Framework

PDFLab Framework

En el caso de los Frameworks de PDF, cuya funcionalidad es proporcionar funcionalidades a un framework que implementa sobre PDF, si se requiere otorgar a PDFLab de esta funcionalidad se deberían implementar funcionalidades sobre PDF apoyándose a la estructura de objetos generada por PDFLab y dichas funcionalidades fueran ofrecidas al framework para poder implementar sobre PDF.

48

Metodología

En este capítulo se presenta la metodología de desarrollo que ha sido utilizada a lo largo de este proyecto: Programación Extrema.

5 Metodología

5.1 Manifiesto Ágil

En los años 90 surgieron nuevas metodologías llamadas ágiles a raíz del descontento con los enfoques “pesados”. Las metodologías ágiles parten de un enfoque iterativo e incremental para la especificación, diseño e implementación del software. Estas metodologías son especialmente importantes, léase útiles, en aquellas aplicaciones cuyos requerimientos son variables durante el proceso de desarrollo. Algunas metodologías ágiles son: Extreme Programming, Scrum, Familia de Metodologías Crystal, Feature Driven Development, Proceso Unificado Rational, Dynamic Systems Development Method, Adaptive Software Development, Open Source Software Development, … En el año 2001, se publicó el llamado manifiesto ágil cuyo lema es el siguiente:

“Estamos descubriendo formas mejores de desarrollar software tanto por nuestra propia experiencia como ayudando a terceros. A través de este trabajo hemos aprendido a valorar: Individuos e interacciones sobre procesos y herramientas Software funcionando sobre documentación extensiva Colaboración con el cliente sobre negociación contractual Respuesta ante el cambio sobre seguir un plan Esto es, aunque valoramos los elementos de la derecha, valoramos más los de la izquierda.”

Manifiesto Ágil, 2001

De todas las metodologías ágiles se ha optado por la Programación Extrema ya que es el más destacado de los procesos ágiles de desarrollo de software.

51 5.2 Programación Extrema

Para el desarrollo del proyecto se ha aplicado una metodología ágil: Programación Extrema. La Programación Extrema es un enfoque de la ingeniería de software formulado por Kent Beck en el año 1999 y, actualmente, es la metodología más destacada de las metodologías ágiles de desarrollo de software. La Programación Extrema, como todas las metodologías ágiles, se diferencia de las metodologías tradicionales principalmente en que pone más énfasis en la adaptación que en la previsión, es decir, se consideran que los cambios de requisitos durante el desarrollo son un aspecto natural, inevitable e incluso deseable del desarrollo de proyectos. Adaptarse a los cambios de requisitos en cualquier punto de la vida del proyecto es mucho mejor y más realista que intentar definir todos los requisitos al comienzo del proyecto e invertir esfuerzos a posteriori en controlar los cambios en los requisitos. En PDFLab, al tratarse de un proyecto I+D, los requisitos son variables a lo largo del ciclo de vida, motivo por el cual se haya optado por aplicar esta metodología. Las características fundamentales de la programación extrema son las siguientes:

 Desarrollo iterativo e incremental.  Pruebas unitarias continuas, frecuentemente repetidas y automatizadas, incluyendo pruebas de regresión.  Programación en parejas: se recomienda que las tareas de desarrollo se lleven a cabo por dos programadores simultáneamente. Esto repercute en una mayor calidad del código. De esta manera el código es revisado y comentado a medida que se escribe.  Frecuente integración del equipo de programación con el cliente o usuario.  Refactorización del código, es decir, reescribir ciertas partes del código para aumentar su legibilidad y mantenibilidad pero sin modificar su comportamiento.  Propiedad del código compartida: en vez de dividir la responsabilidad en el desarrollo de cada módulo en grupos de trabajo distintos, este método promueve el que todo el personal pueda corregir y extender cualquier parte del proyecto.  Simplicidad en el código: la Programación Extrema apuesta que es más sencillo hacer algo simple y tener un poco de trabajo extra para cambiarlo si se requiere, que realizar algo complicado y quizás nunca utilizarlo.

52

Requerimientos

En este capítulo se define la Especificación de Requisitos Software (ERS) para el proyecto: PDFLab. Esta especificación se ha estructurado inspirándose en las directrices dadas por el estándar “IEEE Recomended Practice for Software Requeriments Specification ANSI/IEEE 830 1998”.

6 Requerimientos

1. Introducción

1.1. Propósito El objetivo de la especificación es definir de manera clara y precisa todas las funcionalidades y restricciones del sistema que se desea construir. El documento va dirigido al equipo de desarrollo de YG S.A. y los usuarios finales del sistema. Este apartado será el canal de comunicación entre las partes implicadas, tomando parte en su confección miembros de cada parte. Esta especificación está sujeta a revisiones por el grupo de usuarios, que se recogerán por medio de sucesivas versión del documento, hasta alcanzar su aprobación por parte de la dirección de YG S.A, el grupo de calidad y el grupo de usuarios. Una vez aprobado servirá de base al equipo de desarrollo para la construcción del sistema. 1.2. Alcance PDFLab es un componente software que permite leer un documento PDF y construir una estructura de objetos a partir de su estructura interna. La realización de este producto será la base para la construcción de diferentes herramientas para el tratamiento de ficheros PDF. 1.3. Definiciones, Acrónimos y Abreviaturas  PDF: Portable Document Format

1.4. Referencias  IEEE Recommended Practice for Software Requirements Specification. ANSI/IEEE std. 830, 1998.

2. Descripción global

2.1. Perspectiva del Producto PDFLab es un componente y debe ser totalmente transparente a qué subsistema le proporcione la entrada (documentos PDF) y totalmente transparente a qué subsistema utilice la salida (estructura de objetos).

55 2.2. Funciones del Producto En términos generales, PDFLab debe acceder a un documento PDF y recopilar la información contenida en éste y generar una estructura de objetos que contenga toda la información y contenido del fichero PDF.

PDFLab

Documento PDF Estructura de Objetos

2.3. Características de los usuarios Se requiere que el usuario tenga nociones del paradigma de programación orientado a objetos, así como diseño orientado a objetos, patrones GRASP y el patrón GOF: fachada.

3. Requerimientos específicos

3.1. Requerimientos Funcionales Req(01). Se requiere que el programa genere una estructura de objetos a partir del fichero PDF. Req(02). Dicha estructura debe basarse en la especificación de Objeto de la ISO 32000-1:2008. Req(03). Se requiere que se decodifique el Objeto Stream. Req(04). Se requiere obtener el texto del Objeto Stream.

3.2. Requerimientos de Usabilidad La usabilidad es la capacidad de un software para ser entendido, aprendido, usado y atractivo para el usuario, cuando es usado bajo unas condiciones específicas. En el caso de este proyecto los requerimientos de Usabilidad no aplican ya que no PDFLab es un componente y no tiene interfaz con el usuario.

3.3. Requerimientos de Fiabilidad La fiabilidad es la capacidad de un producto para mantener un nivel específico de rendimiento cuando es usado bajos unas condiciones específicas. El desarrollo de este proyecto requiere que PDFLab sea altamente fiable ya que es un componente y va a formar parte, va a estar embebido, en otros proyectos.

56

3.4. Requerimientos de Rendimiento Se requiere que la lectura de PDF y la generación de la estructura de objetos sean de alto rendimiento ya que, como el caso anterior, PDFLab es un componente y va a formar parte de otros proyectos que lo incluyan. Se requiere que en menos de 1 minuto para cualquier tamaño sea capaz de generar la estructura de objetos. 3.5. Otros requerimientos

3.5.1. Interfaces de usuario La aplicación no implementa ninguna interfaz externa para el usuario final. No obstante debe ofrecer una interfaz fachada para que el usuario final pueda implementar su propia interfaz externa. 3.5.2. Requisitos Tecnológicos La aplicación se ejecutará sobre un pc con una configuración mínima de:

 Pentium 166 MHz o superior con un mínimo de 125 MB de espacio libre en el disco y un mínimo de 32 MB de RAM.  Windows 2000 (Service Pack 3), Windows XP Home, Windows XP Professional (Service Pack 1)  Se requiere que el desarrollo sea en Java, lenguaje orientado a Objetos.

57

Planificación del proyecto

En este capítulo se presenta el conjunto de iteraciones resultantes en el desarrollo del proyecto.

7 Planificación del proyecto

A continuación, se presentan las iteraciones incrementales que se han definido y realizado para llevar a cabo el proyecto PDFLab.

Especificación de requerimientos. Iteración 0 Selección de tecnologías. Diseño de la arquitectura. 10 horas

Estudio de aspectos lexicográficos. Definición de tokens. Iteración 1 Implementación del analizador lexicográfico. Testing. Documentación técnica. 50 horas

Estudio de la estructura interna. Estudio de la configuración de un PDF. Definición de la gramática generadora de PDF (excluyendo el stream). Iteración 2 Implementación del parser reconocedor del PDF (excluyendo el stream). Testing. Documentación técnica. 200 horas

Definición de la gramática generadora de PDF (incluyendo el stream). Implementación del parser reconocedor del PDF (incluyendo el stream). Iteración 3 Implementación del decompresor/decodificador del stream. Testing. Documentación técnica. 50 horas

Estudio de la estructura del stream. Definición de la gramática generadora del stream. Iteración 4 Implementación del parser reconocedor del stream. Testing. Documentación técnica. 150 horas

Estudio del PDF y sus objetos. Definición del diagrama de clases. Iteración 5 Implementación del diagrama de clases. Testing. Documentación técnica. 100150 horas

Integración del objeto PDF con el parser de PDF. Iteración 6 Testing. Documentación. 15050 horas horas

Integración del objeto Stream con el parser de stream. Iteración 7 Testing. Documentación. 100 horas

61

Como se puede observar en el diagrama anterior, en la Iteración 0 se especifican los requerimientos, seleccionan las tecnologías y se diseña la arquitectura del proyecto. A partir de la Iteración 1 hasta la Iteración 5, en cada una de estas iteraciones se aplica una metodología en cascada con las fases de:

 Análisis.  Diseño.  Implementación.  Pruebas.  Documentación.

Las últimas Iteraciones se corresponden a incrementos de integración en la que se integran módulos independientes para que funcionen de forma conjunta. Las horas que se indican en el diagrama de Iteraciones incrementales son las horas que se estimaron en la planificación del proyecto.

62

Análisis Orientado a Objetos

En este capítulo se analizan los requerimientos y se define: el modelo estático, que identifica los objetos del sistema, y el modelo dinámico, que establece la colaboración de los objetos del sistema.

8 Análisis Orientado a Objetos

8.1 Modelo Estático

En el modelo estático se identifican los objetos del dominio. Se le debe otorgar al sistema de una interfaz fachada para la interacción con sistemas externos. Es necesario un objeto lector capaz de reconocer el fichero PDF. Una vez reconocido y analizado, dicho lector genera una estructura de objetos tipificados en los mostrados en el diagrama. Además para el Objeto Stream es necesario el objeto parserStream capaz de reconocer y analizar el contenido de éste.

parsea :lector

genera

muestra contiene :PDFScrutinizer :Object

:UserInterface :Page

:Boolean

:Integer

:Real

:StringHex

:StringLit

:Name

:Array

:Dictionary

parsea :parserStream :Stream

:Reference

:Null

65 8.2 Modelo dinámico

En el modelo dinámico se estudia la colaboración de los diferentes objetos que se han identificado en el modelo estático. El proceso total de PDFLab es secuencial desde que empieza hasta que acaba. Cuando se recibe una señal externa (representado con Cliente) la interfaz dirige y acciona el proceso de lectura. Se analiza sintácticamente el fichero PDF y cada objeto reconocido es añadido a la estructura de objetos. Si el objeto en cuestión es un Objeto Stream, éste se analiza sintácticamente de forma individual para obtener la información requerida. Una vez analizado sintácticamente el fichero PDF se termina el proceso y la interfaz devuelve el resultado. Mediante el siguiente diagrama de secuencia se puede observar la interacción entre los objetos:

66

Diseño Orientado a Objetos

En este capítulo se presentan las tecnologías utilizadas para implementar el proyecto y los diagramas de clases de las clases principales del proyecto: PDFScrutinizer, lector y parserStream.

9 Diseño Orientado a Objetos

9.1 Tecnologías

Las tecnologías utilizadas durante el desarrollo han sido las siguientes:

 Java. Java es un lenguaje de programación orientado a objetos, desarrollado por Sun Microsystems a principios de los años 90.

 Máquina virtual Java (Java Virtual Machine) Una Máquina virtual Java es una máquina virtual de proceso nativo, es decir, ejecutable en una plataforma específica, capaz de interpretar y ejecutar instrucciones expresadas en un código binario especial (el Java bytecode), el cual es generado por el compilador del lenguaje Java.

 JavaCC. JavaCC (Java Compiler Compiler) es un generador de analizadores sintácticos de código abierto para el lenguaje de programación Java. JavaCC genera un parser para una gramática presentada en notación Backus-Naur form (BNF). JavaCC genera analizadores descendentes (top-down), lo que lo limita a la clase de gramáticas LL(K) El constructor de árboles que lo acompaña, JJTree, construye árboles de abajo hacia arriba (bottom-up).

 Smultron Smultron es un editor de texto libre para Mac OS X diseñado para usuarios noveles y avanzados. Implementado en Objectiva-C usando la API Cocoa. Permite editar y guardar muchos tipos de fichero, soporta la sintaxis de los siguientes lenguajes de programación: C, C++, LISP, Java, Python, Ruby, HTML, XML, CSS, Prolog, IDL y D.

69 9.2 Arquitectura del sistema y diagrama de despliegue

La Arquitectura del sistema se define como la siguiente a través del diagrama de despliegue.

Es una aplicación stand-alone que se ejecuta en la máquina a través de la Máquina Virtual de Java. [Java Virtual Machine (JVM)]

70

9.3 Diagrama de Clases

A partir del análisis de la ISO 32000 se ha diseñado la siguiente estructura de datos para generar la estructura de objetos PDF:

PDFScrutinizer es la clase que establece la jerarquía de páginas y contenidos en éstas. Además contiene todos los Objetos Indirectos y Trailers que aparecen en el documento PDF. Object es la clase de tipo genérico para desencapsular el tipo específico. Se puede observar que se han añadido todos los tipos simples y compuestos que establece la ISO 32000 para trabajar en el analizador sintáctico y se han añadido nuevos para trabajar en la gramática de atributos.

71 A partir de la sintaxis del PDF, según la ISO 32000, se ha diseñado el parser capaz de reconocer los documentos PDF:

A partir de la sintaxis del PDF, según la ISO 32000, se ha diseñado el parser capaz de reconocer los Objetos Stream:

72

Implementación

En este capítulo se facilitan los diagramas de paquetes de la implementación del proyecto.

10 Implementación

10.1 Diagramas de paquetes

El proyecto PDFLab se define como la siguiente estructura de paquetes:

 utilidades Contiene I/O a ficheros.  semantic Contiene la clase para la gramática de atributos  ui Interfaz fachada  lector Parser reconocedor de PDF  parserStream Parser reconocedor del Objeto Stream  Clases que hacen referencia al PDF o struct Clases de tipo estructural o data Clases de tipo dato

A diferencia del diagrama de clases original, se ha querido separar la parte estructural a la de almacenamiento de datos. El motivo de esta separación es para encapsular el recorrido por la estructura por un lado y la forma de almacenamiento y muestreo de datos por el otro.

75 A continuación se detalla el paquete pdf.struct:

A continuación se detalla el paquete pdf.data:

76

A continuación, se detalla el paquete lector:

A continuación se detalla el paquete parserStream:

77 A continuación se detallan el resto de los paquetes satélites implementados:

78

10.2 Pruebas / Testing:

10.2.1 El testing dentro del modelo de ciclo de vida

El modelo en V es un marco de trabajo que describe las actividades del ciclo de vida del desarrollo software desde la toma de requisitos hasta el mantenimiento del mismo. El modelo en V ilustra como las actividades de testing o pruebas pueden ser integradas en cada una de las fases del ciclo de vida del desarrollo software.

Fundamentos del Testing: Guía para la certificación ISTQB

Sea cual sea el modelo de ciclo de vida utilizado, hay varias características para realizar un testing correcto:

 Para cada actividad de desarrollo hay una correspondiente actividad de test.  Cada nivel de test tiene unos objetivos específicos de prueba.  El análisis y el diseño de las pruebas dado un nivel de test deberían empezar durante la correspondiente actividad de desarrollo.  Los técnicos de pruebas deberían estar involucrados en la revisión de la documentación tan pronto como se disponga de los borradores durante el ciclo de desarrollo.

79 10.2.2 El testing en Programación Extrema

En Programación Extrema hay numerosas iteraciones cada una de las cuales requiere su fase de pruebas. Los desarrolladores escriben los casos de prueba que se les ocurren y los automatizan. Cada vez que se realiza un cambio en el código, este se testea a nivel de componente y luego se integra con el código existente, que luego es completamente testeado con el conjunto de casos de prueba de integración. Esto ofrece una integración constante, por lo que se entiende que los cambios son incorporados constantemente en el software programado. Al mismo tiempo, todos los casos de prueba deben ejecutarse, en el sentido de que el 100% de todos los casos de prueba que han sido identificados y automatizados se ejecutan. Programación Extrema no promueve el extremo de las actividades durante el proceso de desarrollo, sino de añadir valor conocido a las actividades de una manera extrema.

10.2.3 Niveles de test

Un nivel de prueba es un grupo de actividades organizadas y gestionadas conjuntamente. Un nivel de prueba está ligado a un conjunto de responsabilidades dentro de un proyecto. Aunque existen variantes del modelo en V, el tipo común de modelo en V utiliza cuatro niveles de prueba. Estos niveles con sus propios objetivos son:

 Pruebas de componentes: buscar defectos y verificar las funcionalidades de los componentes software (por ejemplo, módulos, programas, objetos, clases, etc.) que pueden probarse por separado.  Pruebas de integración: testear las interfaces entre los componentes, las interacciones entre diferentes partes de un sistema, como un sistema operativo, un sistema de archivos y dispositivos hardware o interfaces entre sistemas.  Pruebas de sistema: testear el comportamiento de todo el sistema o producto como este es definido en el alcance del desarrollo del proyecto o producto. El objetivo principal de las pruebas de sistema es la verificación en contra de los requisitos especificados.  Pruebas de aceptación: validar el software con respecto a las necesidades del usuario, requisitos, y procesos de negocio para determinar si el sistema es o no aceptado.

80

10.2.4 Tipos de test

Un tipo de test se centra en un objetivo de prueba, es decir, en qué se prueba. Hay cuatro tipos de test, con cuatro objetivos diferentes.

Fundamentos del Testing: Guía para la certificación ISTQB

El testing funcional está basado en las funciones del sistema (lo qué hace) y sus características considerando el comportamiento externo del mismo. Se le llama también testing de caja negra. El término testing no-funcional describe los test necesarios para medir las características del software que pueden ser cuantificadas en una escala variable, tales como los tiempos de respuesta para el testing de rendimiento. El testing estructural es el conjunto de pruebas basadas en la estructura/arquitectura del sistema. A menudo es llamado testing de caja blanca o de caja de cristal ya que se está interesado en lo que ocurre “dentro de la caja”. El testing de confirmación es la ejecución de nuevo del test que falló una vez que se ha modificado el software para corregir el defecto. El testing de regresión es el testing repetido de un programa ya probado, después de haberse producido cambios en el software o en su entorno, para descubrir cualquier defecto introducido o no cubierto como resultado de los cambios.

10.2.5 Testing en PDFLab

El testing realizado ha sido de tipo funcional y de regresión a nivel de componentes. El banco de pruebas ha incluido: - Documentos en PDF de diferentes dominios (economía, viajes, etc.). - Documentos en PDF generados por Acrobat Reader Pro en diferentes versiones. - Documentos en PDF fruto de la exportación desde diferentes editores de texto.

81 10.3 Mantenimiento

El mantenimiento de software o manutención de software es una de las actividades más comunes en la ingeniería de software, es el proceso de mejora y optimización del software después de su entrega al usuario final (es decir; revisión del programa), así como también corrección y prevención de los defectos. La mantenibilidad del proyecto representa la cantidad de esfuerzo requerida para conservar su funcionamiento normal o para restituirlo una vez se ha presentado un evento de falla. Se dirá que un sistema es “Altamente mantenible” cuando el esfuerzo asociado a la restitución sea bajo. Sistemas poco mantenibles o de “Baja mantenibilidad” requieren de grandes esfuerzos para sostenerse o restituirse. La medida y traza de la mantenibilidad se presta a ayudar a reducir o revertir la tendencia de degradación de la integridad del sistema o “entropía del código”, y para indicar cuándo es menos arriesgado reescribir código en lugar de cambiarlo. Se puede decir que este proyecto es “Altamente mantenible” dado que durante todo el diseño se ha tenido presente que la ISO 32000 es susceptible a ser actualizada en los próximos años y se ha diseñado para que la labor de mantenimiento sea mínima (índice de mantenibilidad alto). Para conseguir un índice de mantenibilidad alto se ha diseñado el proyecto de modo que el añadir funcionalidades o clases nuevas sea muy sencillo gracias al total aprovechamiento de características que el paradigma orientado a objetos proporciona. En particular, el diseño de las clases se ha realizado considerando en todo momento la aplicación de los patrones GRASP: alta cohesión y bajo acoplamiento. Cabe añadir que el uso de patrones de diseño GOF colabora con este incremento de la mantenibilidad.

82

Estudio económico

En este capítulo se ha realizado el estudio económico del coste del desarrollo del proyecto PDFLab.

11 Estudio económico

PDFLab ha sido elaborado para una empresa y es por ello que el estudio económico se ve reflejado en horas/hombre. Estudio ...... 300h. Escritura de especificaciones ...... 20h. Análisis ...... 60h. Diseño ...... 100h. Implementación ...... 200h. Pruebas ...... 100h. Documentación ...... 100h. Total: 880h

Documentación 11% Estudio 34% Pruebas 11%

Escritura de especificaciones 2%

Implementación 23% Análisis 7%

Diseño 12%

Se hace notar que las horas previstas para llevar a cabo el proyecto fueron de 860h y las totales realizadas 880h, es decir, la estimación del tiempo total, que fue prevista no ha tenido mayores desviaciones. A lo largo de este proyecto se ha utilizado Java y JavaCC para la implementación del código que son herramientas gratuitas. Para realizar los diagramas UML se ha utilizado StarUML que también es una herramienta gratuita. La implementación de código se ha realizado en un editor para la plataforma Mac llamado Smultron, también gratuito.

85

Conclusiones

En este capítulo concluye el proyecto dejando reflejadas las conclusiones y sensaciones que han ido surgiendo a lo largo del desarrollo de este proyecto.

12 Conclusiones

Objetivos cumplidos El proyecto nació de una idea ambiciosa desde el trabajo final de carrera a raíz de la necesidad de querer obtener información que se encuentra en la red. No satisfecho de obtener toda la información contenida entre etiquetas HTML, el proyecto crece en querer obtener la información contenida en los PDF, que como se ha visto a lo largo de todo este proyecto es cómo la información fundamental se encuentra en la red, y algún día lograr clasificarla con el reconocimiento del lenguaje natural. Para acceder a los ficheros PDF era necesario conseguir una herramienta que permitiese el acceso a la toda información interna del PDF. No contento con las herramientas en el mercado nació la idea de PDFLab.

PDFLab una herramienta, un núcleo para otras herramientas PDFLab en sus orígenes, era una herramienta que reconoce ficheros PDF. Como se puede ver, sus especificaciones estaban totalmente indefinidas pero, por su básica funcionalidad, ha permitido iniciar el proyecto e incrementalmente añadirle y completarle especificaciones a medida que éstas se requerían. Por ejemplo, se decidió que en vez de una vez reconocido un fichero responder con la información del PDF, se generase una estructura de objetos que la representase, pudiendo así implementar muchas más aplicaciones con este componente. Una vez consolidadas las especificaciones, PDFLab ha acabado siendo una herramienta que reconoce ficheros PDF y genera una estructura de objetos que la representa, logrando, al fin, una componente estable y fiable que puede servir de núcleo a otras herramientas, más allá de los objetivos iniciales.

PDF: un formato complejo, una norma extensa Aunque este proyecto se fomenta de una norma ISO y, por ello, se creía que la tarea sería fácil, resultó ser una tarea extremadamente complicada ya que la norma ISO es muy extensa, compleja y difícil de interpretar. De ahí la gran cantidad de horas dedicadas al estudio y reflejadas en el estudio económico.

Objetivos personales Desde un punto de vista personal este proyecto me ha permitido consolidar mis conocimientos en la programación orientada a objetos, aprovechando totalmente el paradigma orientado a objetos, patrones GRASP y alguno de los patrones GOF. Me ha permitido desarrollar una aplicación siguiendo una metodología ágil: Programación Extrema.

89

Líneas de Futuro

En este capítulo se indica que progresión tendrá el proyecto PDFLab y que posibilidades futuras se pueden implementar para aprovechar todo su potencial.

13 Líneas de Futuro

Desarrollo de nuevas herramientas basadas en PDFLab El hecho de considerar a PDFLab como una componente, ésta puede ser usada como núcleo en la implementación de muchas otras aplicaciones como las que han sido vistas y clasificadas. O incluso realizar nuevas aplicaciones innovadoras que se implementen sobre documentos PDF. Por ejemplo, si a PDFLab, se le dispone de un backend capaz de analizar semánticamente el contenido extraído del PDF obtendríamos un sistema inteligente capaz de recopilar y analizar la información de ficheros PDF y tomar decisiones al respecto.

SpeedFLab = SpideeLab + PDFLab O por ejemplo, se uniera el proyecto realizado en el trabajo final de carrera, SpidLab con el realizado en este proyecto PDFLab se puede obtener un nuevo sistema SpeedFLab [es-pee-dee-ef-lab]. SpeedFLab, con el apoyo de los Spiders, encargados de recopilar, en este caso, documentos PDF y el apoyo de PDFLab, se lograría, de forma automática, recopilar información que se encuentre en documentos PDF en la red. O se podría ir más lejos, si se unieran estas dos ideas, es decir, si a SpeedFLab se le añade un backend encargado de analizar semánticamente la información recopilada por este subsistema se obtiene un sistema inteligente capaz de recopilar y analizar información contenida en documentos PDF en la red y tomar decisiones al respecto de forma automática.

Más testing Aún cuando se han realizado pruebas exhaustivas sobre PDFLab, se necesita profundizar en el apartado de testing y herramientas de test dado el carácter de componente (núcleo) que se le quiere otorgar. Este tema es suficientemente extenso y complejo para que dé lugar a un trabajo final de máster que pretendo emprender.

Desencriptando el PDF Muchos de los PDF están protegidos con contraseña de usuario, muchos otros con permisos de lectura, inhibiendo la posible edición. Sería pues, muy interesante que la propia herramienta PDFLab fuera capaz de desencriptarlos y, así, acceder a la información.

93

Bibliografía

En este capítulo se indican todas las referencias utilizadas en el desarrollo de este proyecto.

14 Bibliografía

 ADOBE SYSTEMS. History of PDF. [en línea]. [Consultado 26 de Mayo 2010]. Disponible en internet: http://www.adobe.com/pdf/about/history/

 AHO, A. V.; SETHI, R.; ULLMAN, J. D. (1990) Compiladores. Principios, Técnicas y herramientas. Addison-Wesley Publishing Company

 BEEDLE, M., BENNEKUM, A., COCKBURN, A., CUNNINGHAM, W., FOWLER, M., HIGHSMITH J., HUNT, A., JEFFRIES, R., KERN, J., MARICK, B., MARTIN, R. C. SCHWABER, K., SUTHERLAND, J., THOMAS, D (2001). The Agile Manifesto [en línea]. [Consultado 4 de Mayo 2010]: http://www.agilemanifesto.org/iso/es/manifesto.html

 BUGCLUB. The history PDF. [en línea]. [Consultado 26 de Mayo 2010]: http://www.prepressure.com/pdf/basics/history

 ENGINYERIA I ARQUITECTURA LA SALLE - UNIVERSITAT RAMON LLULL Guia de estudio de Teoría de compiladores. [en línea]. [Consultado 26 de Mayo 2008]. Disponible en internet: http://ecampus.salleurl.edu

 FOWLER, M. (2004): UML Distilled. 3ª edición. Addison Wesley.

 GONZÁLEZ, Y., MOZOTA, M. A., PLANAS, J., PRIOR, A., SOLANAS, J., & SOLÉ, X. (2010). Fundamentos del Testing: Guía para la certificación ISTQB. Barcelona.

 HAMILTON, K., MILES, R.(2006).Learning UML 2.0. O’Reilly

 IEEE Recommended Practice for Software Requirements Specification. ANSI/IEEE std. 830, 1998.

 INTERNATIONAL ORGANIZATION FOR STANDARITATION. PDF Format becomes ISO standard [en línea]. [Consultado 26 de Mayo 2010]: http://www.iso.org/iso/pressrelease.htm?refid=Ref1141

 INTERNATIONAL ORGANIZATION FOR STANDARITATION. (2001). ISO/IEC 9126-1:2001 Software engineering- Product quality- Part 1: Quality Model.

97

 INTERNATIONAL ORGANIZATION FOR STANDARITATION. (2008). ISO 32000-1:2008 Document management -- Portable document format -- Part 1: PDF 1.7

 INTERNATIONAL ORGANIZATION FOR STANDARITATION. (2008). Adobe Suplement to the ISO 32000 [en línea]. [Consultado 4 de Mayo 2010]: http://www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/adobe_suppleme nt_iso32000.pdf

 O'DOCHERTY, M. (2005). Object-oriented analysis and design. Understanding system development with UML 2.0.Wiley

 PRESSMAN, R. S.(2010). Ingeniería del software: un enfoque práctico. Séptima edición. Mc Graw Hill

 SOMMERVILLE, I. (2005). Ingeniería del software, 7ª edición. Pearson

 WARNOCK J, (1993) The Camelot Project. [en línea]. [Consultado 26 de Mayo 2011]. Disponible en internet: http://www.planetpdf.com/planetpdf/pdfs/warnock_camelot.pdf

98

Anexo

15 Anexo

101