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):
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
Ejemplo:
40 0 R
1 Siendo
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 ‘/’ (
Ejemplo:
/Name1 /Con*car^act.ere,s
3 Siendo
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 ( (
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
Ejemplo:
<< /Tipo /Ejemplo /Subtipo /EjemploDiccionario /Version 0.01 /Entero 12 /String1
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
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
Ejemplo:
<< /Filter /Filtro /Lenght 321 >> stream …cero o más bytes… endstream
8 Siendo
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.