L'Adobe ha rilasciato gratuitamente il suo Adobe Acrobat SDK, così
chiunque può creare il suo editor senza reverse-engineering o cose del
genere. Adobe comunque rimane la proprietaria e mantiene per sé lo
sviluppo allo scopo di non snaturare il formato (e di tenere segrete alcune
caratteristiche).
La versatilità del PDF insieme alla sua qualità di standard aperto (chiunque
può creare un file PDF, anche se ovviamente la sua casa produttrice, Adobe,
si è specializzata in questo campo) lo hanno trasformato in un formato
molto utilizzato e molto diffuso, principalmente sul Web ma anche
all’interno della Pubblica Amministrazione e delle Università, oltre che in
tutti i più svariati settori che richiedono la distribuzione di documenti
elettronici, inclusa la produttività personale.
Il suo ampio utilizzo sul Web è tale che i browser più diffusi (Internet
Explorer, Netscape e Opera) offrono automaticamente la possibilità di
visualizzare i file PDF.
Inoltre, il futuro del PDF sembra delinearsi nella crescita degli e-Book, cioè
dei libri elettronici, che non andranno certo a sostituire i libri su carta ma
offriranno migliori occasioni di uso (con funzioni, per esempio di ricerca del
testo) a un mercato sempre più vasto.
Appare evidente quindi come l’utilizzo del formato PDF, che ha attualmente
già raggiunto un’enorme diffusione sia destinato a crescere sempre di più.
Le ragioni che hanno reso il PDF uno standard de facto per quello che
riguarda la documentazione in formato elettronico possono essere così
riassunte :
• I file PDF non dipendono dalla piattaforma, possono essere
visualizzati su tutti i più importanti sistemi operativi ed il
programma per la loro consultazione è completamente gratuito;
• I file PDF godono di un formato di stampa fisso, che permette di
stampare il documento allo stesso modo su qualsiasi periferica e
piattaforma supportata;
• I file PDF sono di facile creazione, mediante apposito programma.
Obiettivo della Tesi
Sotto queste premesse è chiaro il perché il formato PDF è divenuto un
standard de facto per la distribuzione di documenti in formato elettronico.
E proprio in virtù di questa larga diffusione, lo standard PDF riveste
un’importanza tale da giustificare il lavoro di studio e di analisi svolto in
questa tesi.
Se si prova a visualizzare il contenuto di un file PDF con un editor di testo
(per semplicità è consigliabile provare con un documento che non contiene
immagini) ci si può rendere conto della complessità dell’argomento. Il
manuale delle specificazioni del linguaggio PDF messo a disposizione dalla
stessa Adobe, è obiettivamente un documento veramente molto grande,
testimone della complessità del PDF. Come del resto è ancora più
complesso il Development Kit che fornisce una API per interagire coi file
PDF.
L’obiettivo di questa tesi è quello di :
• Analizzare il formato del file PDF al fine di comprenderne il
significato dei contenuti alquanto complessi e strutturati;
• Effettuare la serializzazione dei dati contenuti in un file PDF in
modo da poter effettuare delle manipolazioni su di essi al fine di
modificare il file PDF. Quest’ultimo obiettivo è stato raggiunto
realizzando un progetto Java che può essere suddiviso in linea
generale nelle seguenti fasi :
− Definizione degli oggetti che costituiscono un file PDF : ciò
è stato realizzato definendo una superclasse astratta da cui
ereditano i singoli oggetti PDF definiti ciascuno
coerentemente allo standard PDF.
− Definizione di una struttura dati in cui sia possibile caricare
gli oggetti che costituiscono un dato file PDF.
− Definizione di un Parser che legga ed analizzi il file PDF in
modo da riconoscere i singoli oggetti per poterli
distintamente caricare nella struttura dati precedentemente
definita. In questo modo viene creato un oggetto PDF che
rappresenta il file dato in input.
− Modifica del file mediante l’aggiunta di nuovi oggetti e
l’aggiornamento di quegli oggetti preesistenti che risentono
dell’introduzione di nuovi.
− Riscrittura del file PDF modificato.
• Realizzare come applicativo finale un programma per la
compilazione del Modulo CUD2002, quale esempio delle
funzionalità rese disponibili dal complesso progetto implementato.
N. B.
Questa tesi è stata svolta in collaborazione con la ditta Argo Software di
Ragusa la quale ha richiesto la realizzazione dell’applicativo per la
compilazione del modulo CUD2002, nonché l’analisi del formato PDF al
fine di realizzare un progetto di manipolazione che consentisse il
trattamento di un qualsiasi file PDF in vista di ulteriori sviluppi.
Panoramica della Tesi
La tesi è organizzata nel seguente modo :
Parte I : Manuale di Riferimento PDF
1. Introduzione : Introduce l’architettura globale del formato PDF ed
alcune considerazioni di carattere generale .
2. Sistema di Coordinate : Descrive il sistema di coordinate che
definisce l’area su cui viene tracciato il file PDF.
3. Oggetti : Presentazione della sintassi base del file PDF, ovvero gli
oggetti da cui è costituito.
4. Struttura del File : Descrizione della struttura interna del file PDF.
5. Struttura del Documento : Descrizione della gerarchica degli
oggetti all’interno del file PDF.
6. Descrizione di Pagina : Descrizione dei contenuti di una singola
pagina, ovvero quello che verrà visualizzato.
7. Strutture Dati : Introduzione di alcune utili strutture dati costruite a
partire dagli oggetti base.
8. Esempi di File PDF : Analisi del minimo file PDF che si può
realizzare, ovvero una pagina bianca; di un esempio per la stampa di
una riga di testo; di un esempio per la stampa di semplici elementi
grafici e di un esempio di update.
Parte II : Progetto
9. Manipolazione dei file PDF : Descrizione del progetto Java che
realizza l’analisi e la modifica di un file PDF.
10. Applicativo per la compilazione del Modulo CUD2002 :
Descrizione dell’applicativo finale, quale esempio di utilizzo del
progetto di manipolazione dei file PDF.
11. Conclusioni : Illustrazione di una semplice applicazione che attesta
il corretto funzionamento del progetto di manipolazione per un
qualunque file PDF.
Capitolo 1
Introduzione
Il Portable Document Format (PDF) è un formato di file usato per
rappresentare documenti in maniera indipendente dal software,
dall’hardware e dal sistema operativo usato per crearli e dal device di output
su cui devono essere visualizzati o stampati.
Il PDF è basato sul PostScript Language a cui sono stati apportati
miglioramenti e modiche.
Un file PDF è un documento PDF costituito da un insieme di oggetti che
descrivono l’aspetto di una o più pagine. Ciascuna pagina in un documento
può contenere testo, grafici, e talvolta alcuni elementi interattivi. L’aspetto
di una pagina costituisce la page description.
1.1 Adobe Imaging Model
Il PDF può essere considerato come un linguaggio di descrizione pagina. Il
risultato è in genere un documento dall’aspetto curato ed elegante
soprattutto dal punto di vista grafico, anche in presenza di sofisticati
elementi tipografici.
Queste caratteristiche sono conferite dall’uso dell’Adobe Imaging Model
che permette di descrivere l’aspetto di pagine contenenti testo, elementi
grafici o immagini, in termini di elementi grafici astratti piuttosto che in
termini di pixel :
La descrizione di una pagina è contenuta in un Content-Stream (Vedi
Sezione 6.1) costituito da operandi ed operatori che descrivono una
sequenza di oggetti grafici. Un applicazione PDF viewer mantiene
una implicita current-page in cui memorizza le informazioni (mark)
Capitolo 1 Introduzione
fornite dagli operatori grafici. Inizialmente la current-page è
completamente vuota. Per ogni oggetto grafico incontrato nel
Content-Stream, il viewer mette un mark nella current-page
oscurando completamente ogni mark precedente a cui si sovrappone.
Questo metodo è conosciuto come paintig-model. Quando la pagina
è stata completamente composta, i mark che sono stati accumulati
vengono resi in output e la current-page viene svuotata.
(Torneremo su questo punto nel Capitolo 6, in cui viene trattata
dettagliatamente la descrizione di pagina).
1.2 Caratteristiche generali
Date le intenzioni con cui il PDF è stato sviluppato, ovviamente è stato
dotato di proprietà notevoli che possono essere sommariamente riassunte
dalle seguenti caratteristiche :
• Portabilità : Un file PDF è un file binario rappresentato come una
sequenza di byte ad 8-bit. Un file PDF è costruito in modo da
garantirne la portabilità su ogni piattaforma e sistema operativo.
La rappresentazione binaria è concepita per essere generata,
trasportata ed utilizzata direttamente, senza elaborazione alcuna.
Un file PDF può anche essere rappresentato in una forma che fa uso
dello standard ASCII a 7-bit, ma questa rappresentazione sebbene ne
renda più facile la comprensione è meno efficiente della normale
rappresentazione binaria.
Indipendentemente dalla rappresentazione usata, un file PDF deve
essere trasportato e memorizzato come file binario e non come file di
testo. Un qualunque cambiamento inavvertito può danneggiare
irrimediabilmente un file PDF rendendolo inutilizzabile.
• Compressione : Per ridurre la dimensione del file, il PDF supporta
alcuni filtri standard di compressione :
− JPEG per la compressione delle immagini a colori ed in
bianco e nero;
− CCITT per la compressione di immagini monocromatiche;
− LZW e Flate per la compressione di testi, grafici ed
immagini.
Capitolo 1 Introduzione
Tutti questi filtri producono dati binari che possono essere
successivamente convertiti nella codifica ASCII base-85 se si
desidera una rappresentazione in codice ASCII.
(Le Sezione 3.4.7 approfondisce meglio questo punto).
• Indipendenza dal Font : Generalmente quando si acquisisce un
documento si deve avere lo stesso font che si è usato per crearlo
originariamente, altrimenti sostituendo il font con un altro, l’aspetto e
le dimensione del testo possono differire da quelle originarie
producendo inaspettati ed indesiderabili risultati. PDF provvede a
questi inconvenienti in vari modi :
− Il programma per il font originale può essere incluso nel file
PDF. Il PDF supporta vari formati, tra cui Type 1,
TrueType
e CID-Fonts che assicurano i risultati più
comunemente desiderabili.
− Per risparmiare spazio, può essere incluso solo un
sottoinsieme del font contenente solo la descrizione di quei
caratteri attualmente usati nel documento.
− Il PDF fornisce un insieme di 14 font standard che possono
essere usati senza una precedente definizione. Questo
insieme comprende quattro font per ciascuno dei tre tipi di
Testo Latini (Courier, Helvetica* e Times*) e due font
simbolici (Symbol e ITC Zapf Dingbats
). Questi font sono
disponibili in tutti i viewer PDF.
− Un file PDF si può riferire con un nome a dei font non inclusi
nel file PDF. In questo caso, il viewer usa i font di cui
dispone. Questo approccio però non garantisce il risultato
atteso.
− Il PDF contiene un font-descriptor per ciascuno dei font che
usa (oltre ai 14 standard). Il font descriptor include
informazioni che riguardano la metrica e lo stile del font che
permettono ad un viewer PDF di selezionare o sintetizzare un
opportuno font in sostituzione se necessario.
(Torneremo su questo punto nella Sezione 6.4, in cui vengono trattati
dettagliatamente i Fonts)
• Generazione del File in un solo passo : Il PDF supporta la
creazione dei file in un solo passo. Proprietà spesso desiderabile a
causa dei limiti di sistema e per ragioni di efficienza. E’ inoltre
Capitolo 1 Introduzione
possibile ottimizzare in un secondo tempo un file PDF generato in un
singolo passo.
• Accesso Random : Un PDF può essere pensato come una struttura
dati costituita da una collezione di oggetti referenziati in ordine
sequenziale. Quest’ordine però non ha alcun significato semantico.
Per supportare l’accesso random ai singoli oggetti, ogni PDF contiene
una Cross-Reference Table situata alla fine del file in modo da essere
facilmente memorizzata dalle applicazioni che generano i PDF in un
singolo passo e facilmente trovata dalle applicazioni che leggono i
PDF. In questo modo una pagina di un documento può essere
localizzata efficientemente, indipendentemente dalla lunghezza del
documento.
(Le Sezioni 4.3 e 4.4 spiegano il procedimento nei dettagli).
• Sicurezza : Il PDF provvede due meccanismi di sicurezza che
possono essere usati, separatamente o assieme, in un file :
− Il file può essere encrypted così che solo gli utenti autorizzati
possano accedere ad esso. Esiste inoltre la possibilità di
abilitare certi utenti solo a determinate operazioni, quali la
visualizzazione, la stampa o la pubblicazione.
− Il file può essere digitalmente signed per certificarne
l’autenticità.
(Le Sezione 4.6 approfondisce meglio questo punto).
• Incremental Update : Quando un PDF viene modificato non è
necessario riscriverlo tutto. E’ possibile aggiungere le modifiche alla
fine del file lasciando intatti i dati originari. Le aggiunte alla fine del
file contengono solo i nuovi oggetti introdotti o quelli modificati, ed
anche una nuova Cross-Reference Table.
(Le Sezioni 4.3 e 4.5 spiegano il procedimento nei dettagli).
• Estensibilità : Il PDF è concepito per essere estensibile. Non solo
nuove funzionalità possono essere aggiunte, ma le applicazioni basate
su di una versione precedente di PDF si comportano in maniera
controllata quando incontrano nuove caratteristiche che non
supportano.
(Vedi Sezione 6.1 , operatori BX ed EX).
Capitolo 1 Introduzione
1.3 Creare un PDF
Un PDF può essere creato direttamente mediante un programma apposito o
indirettamente tramite conversione da un altro formato di file. Data
l’enorme diffusione dei PDF, è sempre più frequente la nascita di nuovi
programmi per la loro manipolazione. Uno degli obiettivi di questa tesi è
proprio quello di rendere accessibile il formato del PDF al fine di sviluppare
applicazioni che li supportino.
Attualmente i file PDF vengono generati con due metodi principali :
• Una determinata applicazione crea un documento stampabile, che
tramite un’application programming interface (API), come ad
esempio GDI in Microsoft® Windows® o Quick-Draw® in Apple®
Mac® OS, viene passato ad un’applicazione software detta printer
driver che lo genera in output come PDF.
• Un programma crea un documento in un qualche altro formato,
come PostScript, PCL, HPGL o DVI, e successivamente tramite un
altro programma indipendente viene eseguita la traduzione in PDF.
La seguente figura mostra come Adobe Acrobat supporta l’approccio
indiretto : il PDF Writer costituisce il printer driver che intercetta le
operazioni grafiche e testuali generate da un applicazione tramite un’API. Il
PDF Writer invece di convertire queste operazioni in comandi di stampa da
inviare ad una stampante, li converte negli equivalenti operatori PDF
generando il file PDF. Il risultato è un file che può essere visualizzato e
stampato con un viewer, come Acrobat, su di una qualsiasi piattaforma
indipendentemente da quella in cui è stato originariamente creato.
Capitolo 1 Introduzione
1.4 Componenti PDF
Un PDF è costituito da quattro componenti, come mostra la seguente figura:
• Oggetti : Un documento PDF è una struttura dati costituita da un
insieme di oggetti base a partire dai quali vengono costruiti oggetti
più complessi.
• Struttura del File : La struttura del file PDF determina come gli
oggetti sono memorizzati all’interno del file PDF, come si accede ad
essi e come vengono aggiornati.
• Struttura del Documento : La struttura del documento PDF
specifica come gli oggetti base sono usati per rappresentare le
componenti di un documento PDF : pagine, font, elementi interattivi
ed altro.
• Descrizione di Pagina : La descrizione di una pagina PDF contiene
una sequenza di istruzioni che descrivono l’aspetto di una pagina. La
descrizione di pagina, quale parte di un oggetto pagina può essere
analizzata indipendentemente dalle altre componenti.
I Capitoli 3-6 approfondiscono ciascuna di queste quattro componenti.
NOTA :
Le specifiche PDF esaminate si riferiscono alla versione PDF 1.3. I
riferimenti alle versioni precedenti sono stati analizzati dove lo si è
ritenuto necessario.