DESCRIPCION DE LAS HERRAMIENTAS...

29
7 DESCRIPCION DE LAS HERRAMIENTAS EMPLEADAS______________________________

Transcript of DESCRIPCION DE LAS HERRAMIENTAS...

Page 1: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

7

DESCRIPCION DE LAS HERRAMIENTAS

EMPLEADAS______________________________

Page 2: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

8

1.1-PDF

1.1.1 Introducción

Las siglas PDF, corresponden a Formato de Documento Portable (Portable Document

Format), y es el formato original de la familia de productos de la casa Adobe, creados

a comienzos de los años 90 y que acabaron convirtiéndose en un standard "de facto".

Permiten compartir y visualizar documentos electrónicos de todo tipo,

independientemente de la plataforma donde fueron creados (Hardware y Sistema

Operativo).

PDF implementa el mismo modelo de imagen que el lenguaje descriptivo Postcript

para describir textos y gráficos, de forma independiente del dispositivo y la

resolución.

Incluye hipertextos, imágenes, anotaciones, y actualmente, muchas más herramientas

que facilitan el objetivo para el que fueron creados.

Algunas de sus características más notables son:

� Preservación de la fidelidad de los documentos, independientemente del

dispositivo, plataforma y software.

� Obtención de contenidos de diversas fuentes- Sítios web, procesadores de

texto, documentos escaneados, fotos, gráficos- dentro de un único

documento que mantiene la integridad de todos los elementos fuente.

� Colaboración en tiempo real desde diversas plataformas.

� Firma digital para garantizar la autenticidad de los documentos.

� Permisos y gestión de seguridad, que permiten mantener todo tipo de

derechos al autor.

� Accesibilidad a los documentos por parte de discapacitados.

� Posibilidad de la extracción y re-uso de elementos de otros archivos y

formatos.

� Posibilidad de formularios para integración con otros documentos o

aplicaciones empresariales.

1.1.2 Estructura

Un documento PDF consiste en una colección de objetos que, conjuntamente

describen la estructura de una o más páginas, posiblemente acompañados de otros

elementos interactivos o de información.

Page 3: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

9

Un fichero PDF contiene los objetos que construyen el documento PDF, junto con la

información de su estructura, todo en un flujo de bytes.

La apariencia de una página es descrita mediante un flujo de contenidos, que contiene

los elementos gráficos que deben ser dibujados en ella. Asimismo, contiene objetos

electrónicos tales como dibujos, videos, hipertextos, otros archivos, formularios...

Por último, el PDF contiene información lógica que permite el intercambio de datos

entre aplicaciones.

1.1.3 Modelo de Creación de Imagen de Adobe

PDF sirve como un lenguaje de descripción de página. De ésta forma existen dos

fases:

A. La generación de la página por la aplicación que implementa el documento

PDF.

B. Su posterior interpretación por el programa que controla el dispositivo de

representación.

Una de las principales cosas que un PDF puede hacer, es describir la apariencia de

gráficos y tipografía. Esto lo realiza mediante el Adobe imaging model, que es la

misma representación de alto nivel independiente de dispositivo usada para el

lenguaje Postcript. Los elementos se describen de forma abstracta, como elementos,

más que como pixeles. De ésta forma, se consigue la independencia de dispositivo de

representación.

Las figuras dibujadas pueden estar en forma de caracteres (glifos), formas geométricas,

líneas o muestras de imágenes digitales. Y éstas formas, pueden estar en blanco y

negro o a color.

El flujo de contenidos posee operandos y operadores, que describen los objetos.

Los principales objetos son:

� Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

mediante una serie de operadores, que gestionan su dibujado en la página.

� Texto-Consiste en uno o más glifos que representan texto en la página. La forma

en que los glifos representan los caracteres se haya en estructuras aparte,

denominadas fuentes.

Page 4: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

10

� Imágenes-Las imágenes son matrices rectangulares, donde cada celda representa

el color de esa posición en el rectangulo, tipico de las fotografias.

Aparte de esto, existe los márgenes de página (current clipping path) , que definen las

áreas dentro de las que se pueden dibujar los objetos. Éstos se expresan como claves

(keys) para describir la geometría de un documento en cada página. Sólo uno de ellos,

el que describe el tamaño de la página (MediaBox) es imprescindible en el estandar

PDF. Los demás son opcionales (aunque en subestándares como el PDF/X sean

necesarios).

Fig. 1.1- PDF current clipping path

Todos ellos van expresados en la medida establecida por omisión para el usuario.

Ninguno de ellos tiene bordes visibles, aunque en estos esquemas se han indicado con

líneas continuas o discontinuas para mayor claridad.

Casilla de material (MediaBox)

Una matriz de cuatro números que indica la zona máxima de la página, incluido

cualquier espacio en blanco que se haya dejado más allá de los cortes, sangrados,

marcas de registro o barras de color. Indica pues, el tamaño de la hoja de papel en la

Page 5: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

11

que está situado el documento, no de la página final cuando se acabe el trabajo

impreso.

Casilla de recorte (CropBox)

Matriz de cuatro números que indica la zona rectangular de la página donde van los

elementos que deben reproducirse o imprimirse. Esta casilla de recorte, no debe ser

mayor que la casilla de material (MediaBox) y, si fuera así, la casilla de recorte

(CropBox), real será la intersección de la casilla de recorte y la casilla de material

(MediaBox).

Casilla de sangrado (BleedBox)

Ésta otra matriz de cuatro números expresa la página de un trabajo impreso antes de

que haya sido cortado o guillotinado. En ese sentido, indica la página impresa acabada

antes de ser cortada por la guillotina (el valor que expresa la misma página ya

guillotinada es la casilla de límite de página (TrimBox)). Nunca puede ser nunca

mayor que la casilla de material.

Casilla de límite de página (TrimBox)

Expresa la página de un trabajo impreso después de que haya sido cortado o

guillotinado. En ese sentido, indica la página impresa acabada, ya cortada por la

guillotina. El valor que representa la misma página antes de ser guillotinada es la

casilla de sangrado (BleedBox).

Casilla de ilustraciones (ArtBox)

Es una matriz de cuatro números también, que indica qué parte del fichero se debe

usar si el documento pdf se coloca dentro de un documento en un programa de

maquetación o diseño gráfico. La casilla de ilustraciones sólo se debe usar si el

fichero pdf expresa sólo un elemento para colocar en otras páginas (un módulo de

publicidad, por ejemplo), es decir: no es una página completa.

1.1.4 Sintaxis

La sintaxis del PDF puede orientarse a 4 partes:

Page 6: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

12

I. Objetos

Un documento PDF esta compuesto de elementos de información denominados

objetos.

II. Estructura del fichero PDF

Nos viene a decir en que forma están almacenados esos objetos en el fichero. Como se

accede a ellos y como se actualizan.

III. Estructura del documento PDF

Nos dice como se utilizan los objetos para representar el PDF: páginas, fuentes, etc.

IV. Flujos de contenidos

Contiene una secuencia de instrucciones (tambien en forma de objetos), que describen

la apariencia de una página.

Al más bajo nivel, un PDF es una secuencia de bytes (8 bits). Éstos pueden agruparse

siguiendo la sintaxis de la página, o para formar objetos. Se emplean caracteres ASCII

para ello, siguiendo unas reglas y mediante unos delimitadores.

Tambien es posible insertar comentarios, como en cualquier lenguaje representativo.

Asimismo, se pueden insertar cadenas binarias, manteniendo la coherencia de éstas.

I. Objetos

Hay 8 tipos de objetos:

Valores booleanos

Numeros enteros y numeros reales

Cadenas

Nombres

Matrices

Diccionarios

Flujos

Objeto nulo

Adicionalmente a estos objetos, trataremos otro más: los filtros, que si bien no forman

parte de los objetos básicos, si integran a otro tipo de objeto.

Los objetos tambien pueden ser etiquetados para ser referenciados. Ésta estructura es

denominada Objeto indirecto.

Page 7: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

13

Como se puede intuir, un lenguaje orientado a objetos implementa inmediatamente el

formato de PDF.

Los valores que pueden tomar los objetos son:

booleanos-Pueden tomar valores true o false

numéricos- Hay enteros, y reales -en punto fijo-

Objeto Null-Equivale a ningun tipo de objeto, o a direccionar a un objeto inexistente.

Cadenas-Series de bytes. Pueden ser caracteres literales o en hexadecimal. La barra (\)

se emplea como caracter especial de escape, como en la mayoría de lenguajes de

programación.

Nombres-Son símbolos unívocamente identificados con una secuencia de caracteres,

de forma que si dos tienen la misma secuencia, son el mismo nombre. No poseen

estructura interna. Un (/) en el formato PDF sirve para introducir un nombre.

Cualquier grupo de caracteres están permitidos. Los hexadecimales también,

introduciendose mediante (#). En ocasiones los nombres pueden representar texto,

para así ser identificados más cómodamente, en cuyo caso, deben interpretarse

mediante UTF-8 de Unicode, donde los ASCII a imprimir, tienen la misma

representación que los caracteres ASCII.

Matrices-Las matrices son colecciones unidimensionales secuenciales. Pueden ser

heterogeneas (números, cadenas, diccionarios e incluso otras matrices).

Comienzan con []. Para mayor dimensión, se pueden construir matrices de matrices.

Diccionarios-Este es el elemento principal, y más empleado en PDF, y que le da

estructura similar a una orientación a objetos. Consiste en una tabla asociativa que

contiene pares de objetos, conocidos como entradas.

El primer elemento es la llave (key), y el segundo el valor (value). La llave debe ser

obligatoriamente un nombre. El valor, en cambio, puede ser cualquier cosa, incluido

otro diccionario.

Los diccionarios vienen dentro de corchetes tal que <<>>. Sirven para contener

objetos complejos como fuentes y páginas. La entrada /Type, define el tipo de

objeto

que describe el diccionario en cuestión.

Page 8: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

14

Flujos-Son secuencias de bytes, como las cadenas. En diferencia con éstas, un flujo

puede ser leido de forma incremental. Además, no esta sujeto a limitaciones de

longitud. Esto lo hace ideal para descripciones de páginas o imagenes.

Se construyen a partir de un diccionario (donde está la longitud del flujo y el posible

filtro de decodificación), más la palabra reservada stream, y la secuencia de bytes,

cerrada por endstream. Todos los flujos deben referenciarse por objetos indirectos.

Objetos indirectos-Cualquier objeto en el PDF puede ser etiquetado como indirecto.

Esto le da una UID única, que permite diferenciarlo. Esta UID consta de un objeto

numérico entero que sirve para indexarlo y un número de generación, cuya utilidad

estriba en la gestión de actualizaciones.

En un documento PDF, los objetos indirectos comienzan con su número, número de

generación, y las palabras reservadas obj y endobj, delimitando el objeto. Cuando se

referencia este objeto, se utiliza su número, número de generación y R (de reference).

Filtros-Los filtros son una parte de los flujos. Indica como debe ser decodificada la

información de ese flujo para ser leída.

Los filtros se subdividen en: Filtros ASCII y Filtros de Descompresión. Los primeros

decodifican información codificada como texto ASCII. Los segundos, información

que ha sido comprimida.

Un ejemplo de filtro es FlateDecode. Es el tipo ASCII más común, basado en el

compresor público zlib/deflate que implementa la codificación adaptativa Huffman.

II. Estructura del fichero

En esta sección se describe cómo los objetos se organizan dentro del fichero PDF,

para aumentar la eficiencia a la hora de acceder a ellos, y de actualizaciones

incrementales.

Un fichero PDF esta construido a partir de líneas, acabadas por marcadores de fin de

línea (retorno de carro o nueva linea). Éstas están limitadas a 255 caracteres -a no ser

que sean flujos-.

Un fichero PDF consta de cuatro elementos: (Fig. 1.2)

Page 9: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

15

Fig. 1.2: Estructura de un fichero PDF

� Una cabecera de una linea, identificando la versión del PDF

� El cuerpo, que contiene los objetos que construyen el documento mediante una

secuencia de objetos indirectos. Dichos objetos, representan componentes del

documento, como fuentes, páginas e imagenes.

� La tabla de referencias cruzadas, que contiene la información relativa a los

objetos indirectos que hay en el fichero.

La tabla contiene una linea por cada objeto indirecto, especificando la dirección

lógica de ese objeto en el cuerpo del fichero.

Comienza con la palabra xref. Puede haber varias subsecciones de referencias

cruzadas, segun actualizaciones posteriores por borrado, creacion, o actualizado

de objetos. Si se acaba de crear el PDF, sólo contiene una tabla. Las entradas

constan de dos números: el primero es el número de objeto de comienzo, y el

segundo el número (cantidad) de esos objetos.

Debajo, hay una línea de 20 bytes dividida en dos cifras: la primera cifra

Page 10: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

16

corresponde al offset de ese objeto en el fichero, y la segunda corresponde al

número de generación, que nos permite averiguar si un objeto ha sido reutilizado

o no. La letra n nos indica que el objeto esta actualmente en uso. f significa libre.

Los elementos (objetos) libres se enlazan unos con otros, de forma, que el

primero de ellos (que es el 0), apunta al número de objeto que corresponde al

siguiente libre. El último de ellos vuelve a apuntar al 0.

En versiones posteriores de PDF, se utilizan los denominados flujos de

referencias cruzadas, que consisten en flujos que contienen estas tablas.

� El trailer, es la última parte del fichero. Sin embargo, el trailer es la primera

parte que debe leer una aplicación al aceder a un fichero PDF. De esta forma, los

ficheros PDF se leen desde el final.

En ella, la aplicación encuentra la dirección de la tabla de referencias cruzadas

cruzadas, donde puede obtener las direcciones de los objetos. El trailer acaba por

%%EOF, y es por ahí por donde debe empezar la aplicación a leer.

Tambien hay información significativa sobre el fichero, sobre la anterior tabla de

referencias cruzadas (cuando hay actualizaciones –ver Fig.1.3-)asi como sobre

el objeto Root (raíz del documento PDF).

Fig 1.3: Actualización de un fichero PDF

Page 11: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

17

Encriptación

Un PDF puede encriptarse, para proteger sus datos de accesos no autorizados. La

encriptación se aplica a todos los elementos del fichero, pero no a números enteros o

valores booleanos.

La información de encriptación se almacena en un diccionario de encriptación. La

entrada Encrypt identifica este tipo de encriptación, mientras que la entrada V

especifica el algoritmo de encriptación (antiguamente RC4 de Adobe, actualmente

sustituido por AES (Advanced Encryption Standard) ambos simétricos.

Tambien está la entrada correspondiente al manejador de seguridad. Éste gestiona el

acceso a los datos encriptados mediante dos posibles contraseñas (de usuario y de

propietario del documento).

III. Estructura del Documento

Los objetos dentro de un documento PDF siguen una jerarquía, tipo árbol (ver

Fig.1.4).

En la raíz (objeto Root), esta el denominado Catálogo.

La mayoría de los objetos son diccionarios. Por ejemplo: las páginas estan

representadas por objetos Page (página), que son diccionarios que hacen referencia a

los objetos dentro de esa página.

Las conexiones se efectuan mediante referencias indirectas a otros diccionarios.

Catálogo

Es identificado como Root. Contiene las líneas principales que definen el documento

PDF, contenidos, como deben mostrarse éstos en la pantalla y que página debe

mostrarse en primer lugar.

Árbol de páginas

El árbol de páginas indica como son ordenadas las páginas dentro del documento y en

que orden se acceden. Existen nodos de páginas (intermedias) y páginas (que son las

hojas en la estructura de árbol). Los nodos de páginas Pages son agrupaciones de

páginas. No tienen porqué coincidir con las secciones o capítulos del documento. Se

agrupan normalmente en función de características comunes.

Las hojas Page, si corresponden a cada una de las páginas del documento. Éstas

pueden heredar atributos de los nodos superiores Pages. Entre sus atributos, están los

Page 12: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

18

ya comentados Mediabox, Cropbox, Bleedbox, Trimbox. También existe la entrada

Resources, que es en la que aparecen las fuentes empleadas en esa página

(caracteristica que nos atañe especialmente, por el objetivo de esta memoria).

Diccionario de Nombres

Muchos de los elementos del documento PDF pueden referenciarse por un nombre,

más que por su número de objeto. Ésta correspondencia está en el diccionario de

nombres. Su entrada Names está en el Catálogo.

IV. Flujos de Contenidos

Los flujos de contenidos son la forma inmediata de describir la apariencia de las

páginas y sus elementos gráficos. Cada página puede estar descrita por uno o más

flujos de contenidos, que contienen: elementos gráficos XObjects, patrones

Patterns, algunos tipos de fuentes (sintéticas Type3) y anotaciones Appearance

Streams.

El flujo se interpreta según sus objetos, como operandos (esos objetos), y unos

operadores, que nos dicen en que forma deben utilizarse esos operandos. Por ejemplo,

en que forma debe dibujarse una forma determinada.

Los que a nosotros nos interesan son los operadores que dibujan texto usando los

glifos (implementación de caracteres), definidos en las fuentes (dentro del campo

Resources).

Un flujo es una secuencia de objetos comprimidos, lo cual permite reducir el tamaño

del fichero PDF significativamente. No pueden aparecer dentro de en un flujo:

-Otro flujo.

-Objetos con número de generación superior a 0 (que hayan sido actualizados).

-El diccionario de encriptación de un documento PDF.

-El diccionario que contiene la longitud de un flujo.

Las referencias indirectas a estos objetos dentro del flujo son iguales que antes. Por

ejemplo: 14 0 R. Sin embargo, la forma de acceso es diferente. Los objetos se

almacenan dentro del flujo normalmente formando colecciones de objetos con

caracteristicas comunes. El flujo contiene:

-N pares de enteros. Cada uno representa el numero de objeto y su offset.

-Los objetos, de forma consecutiva (aqui no se usa obj y endobj).

Cuando se actualiza un objeto que esta dentro de un stream, éste no se reutiliza,

Page 13: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

19

sino que la actualización recibe un nuevo número y se asigna a otro stream diferente.

Diccionarios de Recursos

Ya que los flujos no permiten utilizar objetos indirectos, es necesario resolver el

problema de que, a la hora de describir una página, necesitemos referenciar a objetos

que estén fuera del flujo, como fuentes o mapas de imágenes. Esto se consigue

mediante los recursos (Resources), a los cuales se refiere en los flujos mediante su

nombre.

Los recursos se agrupan en diccionarios de recursos, donde están los nombres de esos

recursos a los que se hace referencia en los flujos de contenidos.

Por ejemplo: en un flujo se puede hacer referencia a la fuente F2, la cual esté definida

(fuera del flujo) en el diccionario de recursos como F2 = TimesNewRoman.

1.1.5 Texto

Tal como se avanzó anteriormente, el texto se representa mediante glifos que

proceden de fuentes. Un glifo es una forma gráfica, y por tanto puede ser manipulada.

La forma en que se dibujan estos glifos comprende los siguientes conceptos:

I. Estado del texto-Representado por un conjunto de parámetros que seleccionan

valores, como la fuente y la escala a un determinado tamaño.

II. Objetos de texto y operadores-Los operadores especifican los glifos a dibujar.

Un objeto de texto consta de operadores y de sus parámetros asociados.

Las fuentes están estructuradas mediante diccionarios. Éstos proporcionan

información al visualizador de PDF información sobre como debe interpretar el

texto y posicionar los glifos.

Uso de fuentes

Un carácter es un símbolo abstracto, mientras que un glifo es la representación

especifica de un carácter. Por ejemplo, sin utilizar ninguna fuente concreta, el uso de

negrita en A, o itálica en A son glifos que representan al carácter abstracto "A".

Los glifos se organizan en programas fuentes con un nombre determinado. Ej:

Helvetica o Times.

Estos programas se escriben en un lenguaje determinado, como Type1 o TrueType,

Page 14: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

20

que son interpretados por programas específicos.

En PDF, normalmente una fuente se refiere a un diccionario, que contiene el programa

de la fuente, en el denominado FontFile -normalmente en forma de un stream-, y

una serie de campos que proporcionan información adicional.

Los glifos contenidos en el programa de la fuente, están representados por secuencias

de códigos, que pueden ser incrustados o no en el PDF (parte que nos atañe en esta

memoria), construidos por alguna aplicación u obtenidos de un fichero externo.

En un flujo de contenidos, se especifican los códigos que pertenecen a los glifos de

una fuente determinada. Esto se llama muestreo de la cadena de texto. Éstos se

dibujan siguiendo la descripción del glifo dada en el programa de esa fuente.

Muestreo de texto

La forma más comun de muestreo de una fuente es por ejemplo:

BT

/F13 12 Tf

288 720 Td

(ABC) Tj

ET

BT-significa “Begin Text”-Es la etiqueta de comienzo

Fx-fuente (externa al flujo de contenido, ya que en los flujos no pueden aparecer

referencias, solo nombres)

Tf-su tamaño

Tj-La posición de comienzo del texto

ET-Etiqueta de “End text”, finalización del texto

En el siguiente ejemplo, se muestra como en Recursos, aparece la fuente

comentada, y la referencia a esta (su numero de objeto).

/Resources

<< /Font <</F13 23 0 R >>

>>

23 0 obj

<< /Type /Font

/Subtype /Type1

Page 15: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

21

/BaseFont /Helvetica

>>

endobj

Posteriormente en el fichero, podemos ver el objeto y podemos que éste corresponde a

la fuente Helvetica.

Las fuentes están definidas para un tamaño standard que corresponde (tamaño 1) a

1/72 pulgadas.

Tf, Td y Tj, son operadores de texto. Hay numerosos más, como de creación de

efectos gráficos específicos. Si se desean consultar activamente todos los que hay y

sus funciones, el lector puede remitirse a la refencia de PDF (ver bibliografía).

Los glifos tienen una longitud (Width), o desplazamiento horizontal del cursor que

dibuja los glifos en el acto de dibujarlos. Las fuentes en la que no varia de glifo a glifo

esta longitud se llaman monoespaciadas. Sin embargo la mayoria de las fuentes

utilizan longitudes distintas para cada glifo. Estas son llamadas proporcionales.

También es interesante el concepto de marco "Bounding Box" del glifo, en el cual este

es dibujado mínimamente (sus limites).

Las fuentes Type1 tienen asociadas un fichero denominado AFM que contiene las

métricas de dibujado de los glifos. En ocasiones este fichero es denominado PFM.

Estructuras de Datos de Fuentes

Una fuente es representada por un diccionario, que especifica el tipo de fuente, su

nombre Postcript, su codificacion, y otros datos. Adicionalmente, la fuente (su

programa), puede ser incrustado, como ya se adelantó.

El tipo de las fuentes se distingue por su Subtype. Las fuentes Type0 son conocidas

como compuestas, porque comprenden unos objetos adicionales denominados

CIDFont y Cmap (que se comentarán más adelante), mientras que el resto son fuentes

simples.

Principales campos en un diccionario de Fuente

(Ver Fig 1.4)

Type-“Font” (es el tipo de diccionario)

Subytpe-el tipo de fuente, según el lenguaje de representación

Page 16: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

22

Name-El nombre por el cual es referenciado en los flujos de texto esta fuente

BaseFont-El nombre auténtico de la fuente, utilizado por los dispositivos

FirstChar-El primer carácter definido en las Widths

LastChar-El último carácter definido en las Widths

FontDescriptor-Hace referencia a un diccionario que contiene las métricas de

los glifos

FontBox-Matriz que describe el marco mínimo de representación de los glifos

Encoding-Puede contener un diccionario que especifique un determinado código de

construcción de los glifos. Un código es una tabla que asocia a un determinado

caracter un glifo determinado. Este varia de S.O. a S.O. por eso se permite su cambio.

Ej: MacOS usa el MacRomanEncoding, mientras que Windows usa el

WinAnsiEncoding.

ToUnicode-Referencia a un flujo que contiene un fichero CMap que mapea los

caracteres con valores Unicode.

Page 17: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

23

Fig 1.4: Ejemplo de diccionario de fuente

Fuentes simples

Las características comunes a las fuentes simples son:

Los glifos son seleccionados por caracteres de un solo byte (256 glifos únicamente).

Cada fuente tiene un código de construcción (ej: Ansi), que puede ser cambiado.

Cada glifo también posee unas métricas (Widths) que en la mayoría de los casos está

presente en forma de un descriptor de fuente (FontDescriptor). Dentro de éste

descriptor puede existir (en caso de fuente incrustada) un campo que referencie al

FontFile.

Page 18: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

24

Type1

Son fuentes con programa en lenguaje Postcript. Incluye descripción completa de los

glifos y representación de alta calidad y resolución.

Las 14 fuentes Postcript standard son:

Times-Roman Helvetica Courier Symbol

Times-Bold Helvetica-Bold Courier-Bold ZapfDingbats

Times-Italic Helvetica-Oblique Courier-Oblique

Times-BoldItalic Helvetica-BoldOblique Courier-BoldOblique

La mayoría de las aplicaciones, conocen estos tipos de fuentes, y por ello, no son

necesarias las especificaciones de sus métricas.

Multiple Master Fonts

Es un subtipo de las Type1 que permite definir distinas formas de escritura de los

glifos, en un sólo programa de fuente.

TrueType

Las fuentes Truetype fueron diseñadas por Apple Computer,Inc. y tomadas como

standard por el S.O. Microsoft Windows.

En éstas fuentes, el campo BaseFont es rellenado siguiendo el nombre que tiene en

Postcript, o según el nombre que le da el S.O.

Los nombres TrueType pueden contener varios bytes, ya que hay nombres de fuentes,

como las CJK (Chinese, Japanese, Korean) que tiene sus nombres en lenguaje oriental

y deben representarse con códigos distintos de los básicos (1 byte). Éstos aparecen

mediante un símbolo #, seguido del código de representación.

Debido al sistema de mapeado de caracteres en glifos (encoding) que usa Truetype,

que depende fuertemente de la aplicación que los dibuja, Adobe recomienda que se

incruste la fuente. Si bien, esto no siempre ocurre, y es lo que la aplicación sobre la

que trata esta memoria va a solucionar.

Subsets

Tanto de las Type1 como de las Truetype, se pueden incrustar subsets de caracteres

Page 19: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

25

(comprenden sólo los caracteres empleados en el texto) en el PDF. El nombre consiste

en una etiqueta (6 letras en mayúsculas arbitrarias), más (+) y el nombre original de

la fuente.

Type3

Son distintas de las anteriores porque la fuente esta definida en el diccionario. Los

glifos estan definidos en flujos de operadores gráficos. Estos están relacionados con

sus nombres.

Cuando el programa quiere dibujar los glifos, primero busca el Encoding y luego

busca el caracter a dibujar en su flujo de operadores correspondiente.

Type 0 (Fuentes Compuestas)

Es un tipo de fuente, en que los glifos son obtenidos de una estructura llamada

CIDFont, y referenciada como descendiente "Descendant" en el diccionario de la

fuente. Para las fuentes simples, un byte referenciaba todos los caracteres con los

glifos. Aqui los glifos se seleccionan por uno o más bytes. Esto es útil sobre todo para

fuentes CJK.

Las fuentes compuestas tienen una representación de los programas de fuentes distinta,

definida por los diccionarios CIDFont y los CMaps.

CID en CIDFont significa "identificador de caracter", y emplea en vez de los nombres

de los caracteres, números para acceder a los glifos, lo cual es un metodo más

eficiente para el acceso a grandes cantidades de ellos. Esto es, a cada glifo se le asocia

un número.

Un Cmap va a relacionar esos números con los caracteres. El concepto es el mismo

que con el Encoding básico. Sin embargo permite el acceso a miles de glifos más,

mediante más bytes empleados en los CIDs.

Un programa CIDFont, contiene las descripciones de los glifos para un set completo

de caracteres. Estas son muy parecidas a las Type1, pero organizadas de forma

diferente.

El programa CIDFont y el Cmap pueden ser referenciados e incrustados dentro del

PDF, indicándose en sus diccionarios respectivos.

Hay de dos clases: Type 0 CIDFont, basadas en Postcript, y Type 2 CIDFont, basadas

en Truetype.

(Ejemplo de CIDFont)

Aunque los CIDFonts, en su entrada Type pone “Font” (para identificar que este

objeto referencia a una fuente), no es una fuente en sí, sino el codificado de ésta.

Page 20: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

26

Las fuentes compuestas, tambien siguen unas métricas especificadas por unos

parámetros distintos de los de las fuentes simples.

El Cmap, además, contiene información sobre la dirección en que debe escribirse el

glifo (horizontal, vertical o combinación). Los Cmaps normalmente vienen ya

predefinidos (normalmente siguiendo Unicode) a partir de unos genéricos (Identity-H

e Identity-V).

Programas de Fuentes Incrustados

Como ya se dijo con anterioridad, los programas de fuentes se pueden incrustar en

forma de flujos (streams) en el PDF, llamados también FontFile.

Los tipos son:

Fontfile El original para Postcript definido por Adobe.

Fontfile2 Para fuentes tipo TrueType.

FontFile3 Hay Type1C o CIDFontType0C, que corresponde al Compact

FontFormat (CFF) y las fuentes Opentype (extensión de las

TrueType que permite fuentes en formato CFF.

Page 21: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

27

1.2-PERL

Este apartado, revisará algunos conceptos básicos de Perl y de Programación

Orientada a Objetos de Perl; si bien, no pretende ser un manual exhaustivo de tal. Para

ello, remítase el lector a uno de los múltiples manuales que hay, o de los que se

encuentran en la bibliografía.

Perl es un lenguaje de programación desarrollado por Larry Wall a partir de algunas

herramientas de UNIX. De esta forma posee ciertas similitudes con el lenguaje C.

Uno de sus lemas es "Perl hace faciles las cosas simples y posibles las cosas

complejas".

No posee ninguna filosofía de programación concreta: no se puede decir que sea

orientado a objetos, modular o estructurado, pero permite la utilización de todos

estos paradigmas. En el caso que nos ocupa, hemos de centrarnos en la utilización

de objetos.

Perl no es un compilador ni un intérprete de código, sino que es algo intermedio entre

los dos. Cuando ejecutamos un programa, se compila el código fuente a un código

intermedio en memoria que se optimiza, pero luego es interpretado por un motor.

Caracteristicas interesantes de Perl son:

� No hay que declarar los tipos de variables. En caso de hacerlo (con "my" $var),

éstas dejarán de ser globales para tener ámbito léxico (depende de donde se

encuentren)

� Las variables van precedidas por caracteres especiales como $ @ y % , que

indican su tipo

� También se distingue entre mayúsculas y minúsculas

� Las sentencias van terminadas por ";" para delimitarse entre ellas

� Los comentarios comienzan con "#"

Cabe decir que en el código de Perl también encontraremos PerlPod, que es un

lenguaje de marcación simple, que se interpreta como comentarios, y que permite

invocar el comando "perldoc" sobre un programa Perl y nos aporta información

tipo "man" sobre este, tales como su funcionamiento, su autor, actualizaciones, etc.

Este se escribe con etiquetas como "=head" o "=cut".

Page 22: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

28

1.2.1 Revisión de sintaxis de Perl

I. Tipos de datos:

Los principales son: Scalar ($), Array (@), Hash (%) – Éstos últimos son una

colección de valores indexados por una clave.

Existen otros tipos como Filehandle, para manejo de ficheros, o Glob, que

permite referenciar cualquier otro tipo de datos (tipo genérico).

II. Tipos de estructuras de control:

Condicionales: if...else, elseif, unless

Repetitivas: For, While,Do...Until, Foreach (siendo ésta última una de las

más usadas).

III. Expresiones regulares y patrones de búsqueda: Una de las características más

potentes de Perl es la manipulación de cadenas, mediante expresiones y

patrones que nos facilitan esta tarea.

Ej: if ($var=~/Hola/) ...

Ejecutaría una sentencia determinada si en la cadena $var se encuentra "Hola".

Como se puede ver $var es la cadena, porque la hemos definido en la misma

sentencia como tal, pero podría haber representado un entero o una referencia en

su lugar.

IV. Sustitución en expresiones regulares: Es la otra función de Perl asociada al

tratamiento de expresiones. Permite sustituir en cadenas caracteres por otros.

Ej: $var=~s/Hola/Adios/g

Sustituiria “Hola”, por “Adios” y debido al operador "g", lo haría globalmente

en todas las ocurrencias de “Hola“dentro de $var.

Otras funciones aplicadas a expresiones regulares son: Split, que subdivide

una cadena e inserta los trozos en una matriz y Join, que realiza la operación

inversa.

V. Subrutinas: En perl se permite programar funciones propias, siempre que éstas se

declaren con anterioridad antes del programa principal (main).

Ej: sub mi_subrutina

Page 23: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

29

Cuando se pasan parametros a una función, se hace a través de una matriz

especial, "@_", donde están contenidos.

1.2.2 Programación Orientada a Objetos en Perl

Viendo las recomendaciones de PDF (que es realmente lo que nos interesa), nos

damos cuenta de que su estructura está preparada para ser implementada mediante

objetos.

En programación de objetos, éste se define como una estructura que nos permite

hubicar, utilizar, y modificar cualquier tipo de datos.

Una clase es la estructura abstracta de ese objeto, antes de que sea creado. Los datos

se guardan en forma de atributos del objeto, y son consultados o manipulados

mediante métodos.

Es interesante también mencionar la llamada herencia, que permite que unas clases

deriven de otras, y asi sus realizaciones en memoria (los objetos), puedan usar las

funciones (métodos) de la clase o las clases padres (herencia multinivel). Por último,

el polimorfismo permite que diferentes objetos respondan de forma diferente a una

misma sentencia, dependiendo a que clase pertenezcan.

Los objetos normalmente se crean a partir de una clase (mediante la orden bless), y

luego lo que se usa de ellos generalmente son sus métodos. Los métodos son

subrutinas definidas dentro de la clase o del objeto mismo (una vez ha sido creado). A

ellas se accede mediante la sintaxis $objeto->metodo ().

Cuando se trabaja en un proyecto grande, es necesario definir unidades de

organización para el programa. De esta forma, cuando usamos una variable que está

en el programa principal (main ()), empleamos la sintaxis $main::var. Lo

mismo sucede con las funciones.

De ésta forma, se puede abordar la programación de objetos con mayor facilidad. La

forma de realizar esta sixtaxis para que funcione, es mediante el uso de los llamados

packages.

Un package es un tipo de módulo. Los módulos son ficheros que contienen código

listo para ser incluido en nuestro programa. Cada package por tanto, es un fichero

".pm" (denominación de package), que contiene una de las clases que hallamos

definido en nuestro proyecto. El nombre del fichero, coincide con el nombre de la

clase que contiene, para hacer más intuitiva su utilización.

Page 24: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

30

Para incluir un módulo (o package) en nuestro código, símplemente usamos una

sentencia “use package.pm”.

Los métodos u objetos definidos en ese fichero (esa clase), permiten ser utilizados en

el código de otra, símplemente escribiendo Mi_package::funcion en el código

donde se quiere hacer uso. O en el caso del método de un objeto

Mi_package->metodo.

Como parte de su sintaxis, incluye la jerarquia representada por "::", lo cual quiere

decir que procede de otro módulo (fichero distinto).

Al comienzo del código de los packages existe un array característico: el @ISA, en el

cual está la clase o las clases padres, de las que recibe su herencia.

Además de los packages, existen las denominadas bibliotecas, que normalmente

constan de un conjunto de definiciones y se identifican porque su código acaba con

un ”1”. Se usan mediante la instrucción "require biblioteca.pl”.

Sin embargo, los packages se diferencian de éstas últimas en que se ejecutan en

tiempo de compilación, no cuando se llega a la instrucción.

Page 25: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

31

1.3-PDF::API2

1.3.1 Introducción

La API2 para PDF, es la segunda versión de la PDF::API original, su predecesora,

comenzada a construir en 1999 por Alfred Reibenschuh, austríaco, que trabaja para

Informations Technologie Gmbh de Austria, y es el actual mantenedor, liberador de

nuevas versiones y debugger de la misma.

Su definición es : “A Perl Module Chain to facilitate the Creation and Modification

of High-Quality Portable Document Format -PDF- Files”.

La PDF::API es un trabajo conjunto de varias personas, como Martin Hosken, Lester

Hightower, y que Alfred usó como base, mejorándolo y posteriormente creando el

resto de módulos.

Básicamente, la API se encarga de construir un archivo pdf, siguiendo las pautas de la

referencia PDF.

1.3.2 Licencia

La PDF::API2 tiene licencia GNU Lesser General Public License. La principal

diferencia entre la GPL y la LGPL es que la última puede enlazarse con un programa

no-GPL, que puede ser de software libre o propietario.

Los programas no-GPL o no-LGPL se pueden distribuir bajo cualquier condición

elegida si no se tratan de trabajos derivados “derivative work”. Si se trata de un

trabajo derivado entonces los terminos deben permitir modificación por parte del

usuario para uso propio y la utilización de técnicas de ingeniería inversa para

desarrollar dichas modificaciones.

Este tipo de licencia se aplica a cualquier programa o trabajo que contenga una nota

puesta por el propietario de los derechos de su obra, estableciendo que su trabajo

puede ser distribuido bajo los términos de esta "GPL General Public License". En

ellas el "Programa" se suele denominar al trabajo original, y el "trabajo basado en el

Programa" se refierea cualquier trabajo derivado del mismo bajo la ley de derechos de

autor: es decir, un trabajo que contenga el Programa o alguna porción de él, ya sea

íntegra o con modificaciones o traducciones a otros idiomas.

Page 26: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

32

Por ejemplo, OpenOffice de Sun Microsystems emplea la LGPL, y hoy en día se está

cada vez popularizando más este tipo de licencia, ya que permite mayor versatilidad e

interconexión con otros programas.

1.3.3 Características

La PDF::API no es la única API creada para construir programas que creen o trabajen

con PDF. Hay muchos, empezando por los de la casa Adobe, cruzando toda la gama,

desde el software propietario, hasta el software libre. Ejemplos de algunos libres son:

Ghostscript

PDFLaTeX

Panda, también en Perl

ReportLab en Python

iText en Java

La API2 trabaja en Perl, lenguaje perfectamente compatible con cualquier S.O., lo

cual es una ventaja añadida, y es de los libres, quizá el más completo de todos.

La última versión es la PDF-API2-0.69 del 18 de Enero del 2008.

Principales características

� Puede trabajar con más de un fichero PDF a la vez (las anteriores no podían).

� Presenta una interfaz orientada a objetos al usuario.

� Modifica documentos PDF existentes.

� Puede importar páginas de documentos PDF existentes.

� Incluye las 14 fuentes básicas PDF.

� Incluye subsets de las fuentes PDF CJK (Chinese-Japanese-Korean) básicas.

� Incluye un subset de las Webfonts de Microsoft (no están incrustadas).

� Permite incluir fuentes Adobe Type1en ambos formatos (.pfa/pfb).

� Permite incluir fuentes Truetype (.ttf).

� Permite incluir fuentes Opentype con características Truetype (.ttf).

� Permite incluir fuentes Opentype con características Postcript (.otf).

� Permite incluir imágenes JPEG (.jpeg).

� Permite incluir imágenes PNG (.png).

� Permite incluir imágenes GIF (.gif).

� Permite incluir imágenes TIFF (.tiff)

� Permite incluir imágenes de mapa (.pbm/pgm/ppm).

Page 27: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

33

1.3.4 Estructura de la PDF::API2

La API sigue los patrones estructurales de la PDF Reference de Adobe a la hora de

construir un PDF. De esta forma, y tal como hemos visto, se estructura a través de

objetos, en forma de bibliotecas “.pm”. (Ver página siguiente)

Figura 1.5: Estrucutra de la PDF::API2

Tal como se puede ver, existe un package principal (API.pm) que es la interfaz con el

usuario y posee las funciones a más alto nivel, sobre las que el usuario no tiene que

porqué preocuparse de su estructura interna.

Las operaciones básicas de creación de un fichero PDF, creación de texto, o añadir

fuentes y objetos gráficos se pueden gestionar mediante métodos simples, abstraidos a

partir de packages más complejos que están por debajo. Por ejemplo:

Page 28: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

34

Figura 1.6: Algunas funciones básicas de la interfaz PDF::API2

En el ejemplo superior (extraido del PerlPod), podemos ver una serie de funciones

básicas de la API, como open, o corefont. La primera está definida dentro del

fichero que contiene la interfaz (API2.pm), pero la otra, es una abstracción de una

función mucho más compleja que está definida en otro package a más bajo nivel. Si

está definida en la API, es para que podamos llamarla desde ella, sin necesidad de

tener que escribir la sintaxis de acceso hasta el package que está en un nivel más

inferior.

Un ejemplo muy básico de

(Mostrar también algun ejemplo de creación de fichero con la API)

La API es la que construye toda la estructura del documento PDF, tal como la hemos

visto en las especificaciones PDF: El catálogo y la estructura en árbol.

Por debajo de ella, están los packages que construyen dicha estructura en árbol:

Vemos una serie de packages y unos directorios. Los packages, son abstracciones de

clases que se emplean en la interfaz primariamente, y otros que construyen las hojas

del árbol, como Page.

Los directorios son: (Fig. 1.2)

Resources: Directorio integrado por los recursos que emplea el documento PDF.

� Las fuentes: CIDFonts (Fuentes compuestas), y simples (bajo BaseFont).

Debajo de ellas están los objetos tipo fuente, que se construyen a partir de las 14

fuentes básicas PDF, o a partir de ficheros externos (.ttf o pfa/pfb para

Postcript). Sus objetos van a leer los valores de dichos ficheros y crear los

campos específicos, según el tipo de fuente, insertando el programa de glifos en

un stream en caso de que se incruste la fuente.

� Los objetos externos: Xobjets. Estos comprenden dibujos y gráficos.

Contents: Este directorio contiene los packages relativos a la creación de objetos de

texto y su gestión en forma de flujos de contenido.

Basic:Dentro de Basic hay dos directorios: Uno para fuentes Truetype TTF, donde

hay una gran cantidad de packages. Estos son necesarios debido a la dependencia de

las fuentes Truetype con el Sistema Operativo y a su mayor complejidad frente a las

Postcript.

El otro es PDF quizá el más importante de ellos, ya que aquí es donde están los

packages que sirven para la creación de todos los objetos básicos que existen en PDF,

Page 29: DESCRIPCION DE LAS HERRAMIENTAS EMPLEADASbibing.us.es/proyectos/abreproy/11642/fichero/volumen+1%2F2.pdf · Caminos-Consisten en secuencias de puntos que construyen líneas y curvas

35

y los métodos para escribir éstos en el fichero (a más bajo nivel), una vez ya está

conformada la estructura en árbol del documento PDF.

Existen packages para crear el fichero PDF en sí (su estructura), y luego los objetos

básicos que define la especificación PDF: numerales, matrices...y los más importantes

de todos: los diccionarios y los indicadores de objetos, que son los objetos que

referencian a los primeros (o a cualquier otro objeto).