Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Relatore: Laureando:
Tullio Vardanega Marco Tessarotto
1 Dominio applicativo 1
1.1 L’azienda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Tecnologie e processi aziendali . . . . . . . . . . . . . . . . . . 1
1.2.1 Il framework .NET . . . . . . . . . . . . . . . . . . . . 2
1.2.2 C♯ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.3 Windows Presentation Foundation . . . . . . . . . . . 2
1.3 Ciclo attivo e passivo di un’azienda . . . . . . . . . . . . . . . 3
1.4 Plain
R Documentale . . . . . . . . . . . . . . . . . . . . . . . 3
2 Progetto aziendale 4
2.1 Problematiche del ciclo passivo . . . . . . . . . . . . . . . . . 4
2.1.1 Modelli di mappatura . . . . . . . . . . . . . . . . . . 6
2.2 Problematiche dei PDF . . . . . . . . . . . . . . . . . . . . . 7
2.2.1 Estrazione del testo e dei suoi attributi . . . . . . . . 7
2.2.2 L’assenza di un layout fidato . . . . . . . . . . . . . . 8
2.2.3 L’assenza di una struttura logica . . . . . . . . . . . . 9
2.3 L’estrazione posizionale fidata . . . . . . . . . . . . . . . . . . 11
3 Attività di stage 12
3.1 Studio del dominio applicativo . . . . . . . . . . . . . . . . . 12
3.2 Analisi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.3 Progettazione . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3.1 Individuazione di una libreria . . . . . . . . . . . . . . 15
3.3.2 L’analisi dello stream . . . . . . . . . . . . . . . . . . 18
3.3.3 La definizione della grammatica . . . . . . . . . . . . . 19
3.3.4 Estrazione posizionale di testo . . . . . . . . . . . . . 21
3.3.5 PdfAnalyzer . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3.6 PdfFont, PdfChar e PdfText . . . . . . . . . . . . . . 24
3.3.7 Lexer e Parser . . . . . . . . . . . . . . . . . . . . . . 24
3.3.8 PdfPage . . . . . . . . . . . . . . . . . . . . . . . . . . 25
I
Indice
4 Valutazione retrospettiva 33
4.1 Conseguimento degli obiettivi fissati . . . . . . . . . . . . . . 33
4.2 Conoscenze acquisite . . . . . . . . . . . . . . . . . . . . . . . 34
4.2.1 ISO 32000 . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.2.2 PDF/UA e PDF/A . . . . . . . . . . . . . . . . . . . 36
4.3 Valutazione del corso di studi . . . . . . . . . . . . . . . . . . 37
A Glossario 38
II
Elenco delle figure
III
Capitolo 1
Dominio applicativo
1.1 L’azienda
ASI srl (www.plain.it) offre assistenza ad altre aziende fornendo loro soft-
ware di tipo gestionale, software ERP , e la realizzazione/gestione di portali
aziendali. I pacchetti software offerti dalla ASI sono rivolti principalmente
alla gestione delle risorse umane e alla gestione della contabilità e dei do-
cumenti aziendali. ASI srl offre inoltre una serie di pacchetti software ERP
specifici per diverse tipologie di aziende manifatturiere.
1
1.2. Tecnologie e processi aziendali
1.2.2 C♯
L’utilizzo di C♯ nell’azienda è dovuto principalmente alla sua versatilità.
C♯ infatti si presta bene alla risoluzione di diverse tipologie di problemi
software, grazie anche alla libreria .NET. L’utilizzo di una macchina virtuale
poi offre un maggior livello di astrazione nella fase di progettazione, nonché
una migliore garanzia di sicurezza nelle applicazioni.
WPF utilizza XAML per la definizione delle interfacce grafiche in C♯. XAML
permette ad un’applicazione WPF di essere distribuita sia come applicazio-
ne desktop che come applicazione web3 . Con XAML, WPF rende esplicita
la separazione tra l’interfaccia grafica e la logica del programma, pur per-
mettendo (tramite data binding) una veloce ed efficace integrazione tra le
due. XAML rende inoltre più semplice ed intuittiva la definizione della GUI
e le modifiche alla stessa.
1
La macchina virtuale gestisce l’esecuzione di tutte le applicazioni sviluppate
all’interno del framework .NET
2
L’utilizzo dell’accelerazione hardware è uno dei punti di forza di WPF, in questo modo
infatti è possibile utilizzare le GPU presenti nell’hardware delle schede video, alleggerendo
il carico di calcolo imposto alla CPU, e in definitiva ottenendo una maggiore reattività e
fluidità nell’interfaccia grafica.
3
XAML è infatti alla base della tecnologia Silverlight, framework per la fruizione di
contenuti interattivi nelle pagine web con funzionalità simili a quelle di Adobe Flash.
2
1.3. Ciclo attivo e passivo di un’azienda
ASI srl ha adottato di recente questa tecnologia nello sviluppo delle nuo-
ve applicazioni (motivata dai vantaggi offerti) e stà attualmente cercando di
portare anche le vecchie applicazioni da Windows Forms a WPF.
1.4 Plain
R Documentale
• gestione del ciclo attivo nei documenti (definizione del layout, stampa,
archiviazione, trasmissione via fax ed e-mail);
• gestione del ciclo attivo e passivo della posta elettronica e dei docu-
menti trattati via fax automatico;
3
Capitolo 2
Progetto aziendale
Aziende Aziende
PDF
Layout
Documenti Dati
Documenti
PDF PDF
Ciclo Passivo
Ciclo Attivo
4
2.1. Problematiche del ciclo passivo
Il ciclo passivo dei documenti riguarda invece l’insieme dei documenti ac-
quisiti dall’azienda. All’interno del ciclo passivo l’azienda possiede (nella
maggior parte dei casi) la sola copia cartacea dei documenti, la quale rap-
presenta una perdita d’informazione e d’usabilità rispetto alla versione di-
gitale. Il possesso di documenti in formato cartaceo rende estremamente
problematica l’acquisizione e l’archiviazione dei dati da parte dell’azienda.
Nel grafico in figura 2.1, come pure nel grafico in figura 2.2, le frecce in-
dicano dei processi. Alcune di esse sono tratteggiate proprio a sottolineare
una difficoltà nell’avanzamento del processo.
Dati Dati
Documento PDF
intermedio Searchable
Layout
PDF ?
Stampa Scanner
Documento
cartaceo
5
2.1. Problematiche del ciclo passivo
Dati Dati
Modello di
Layout mappatura
Documenti
Nel grafico sovrastante viene illustrata parte del ciclo di vita di un documen-
to, in particolare è evidenziato il parallelismo tra il layout (nella produzione
dei documenti) e il modello di mappatura (nell’acquisizione degli stessi).
Come il layout definisce una forma per i contenuti e ha per output un do-
cumento, allo stesso modo (ma nel verso opposto) il modello di mappatura
definisce una forma nel documento per riottenere i contenuti. Nel grafico
i documenti sono il formato di scambio (sia cartaceo che elettronico) tra
l’azienda che li emette a sinistra e l’azienda che li acquisisce a destra.
6
2.2. Problematiche dei PDF
Per quanto questa soluzione sia già stata presa in considerazione dai pro-
gettisti ASI, Documentale non possiede ancora una gestione dei modelli di
mappatura.
1
Quella in cui l’utente associava (sempre manualmente) i dati ad ogni singolo
documento.
7
2.2. Problematiche dei PDF
Modello di
mappatura
PDF
PDF
PDF
8
2.2. Problematiche dei PDF
Titolo Titolo
Tabella
fi
Testo semplice Immagine
• Elemento Elenco puntato
• Altro elemento
HTML PDF
<h1> 1.000 g
Titolo 72.0000 72.0000 451.2756 697.8898 re f*
</h1> 72.0000 671.7566 151.7275 44.5332 re f*
<table bgcolor=#f3f3f3 border=1 bordercolor=#000000> ...
<tr> BT
<td> 72.0000 736.8495 Td
<img src="fi.png" alt= "fi (small ligature)" > /F1 18.0000 Tf
</td> (Titolo) Tj
<td> 36.0000 0.0000 0.0000 36.0000 75.0000 677.2898 cm
Testo semplice. /I1 Do
<br> 116.2500 702.5564 Td
<ul> /F2 10.0000 Tf
<li> (Testo semplice.) Tj
Elemento 144.7490 690.5564 Td
</li> ( • ) Tj
<li> 156.2500 690.5564 Td
Altro elemento (Elemento) Tj
</li> 144.7490 678.5564 Td
</ul> ( • ) Tj
</td> 156.2500 678.5564 Td
</tr> (Altro elemento) Tj
</table> ET
2
Di fatto i modelli di mappatura presuppongono di partire solamente dallo stesso
layout e non addirittura dagli stessi dati.
9
2.2. Problematiche dei PDF
Tale mancanza di struttura logica è dovuta alla natura stessa del formato
PDF. Il formato PDF nasce come formato di interscambio per i documenti.
Tra i requisiti della sua progettazione era forte la necessità di avere una
definizione di documento assoluta. Un layout che fosse indipendente dal
software e dall’hardware su cui era stato prodotto e su cui veniva visualizza-
to. Non era necessario che il documento possedesse una struttura logica, era
invece fondamentale che la copia stampata del documento fosse una fedele
riproduzione del documento digitale.
3
Il formato PDF prevede l’inserimento di XML all’interno del contenuto per dare
struttura logica e maggiore accessibilità ai PDF, lo standard ISO/AWI 14289 (PDF/UA)
si occupa proprio di questo. I Tagged PDF tuttavia non sono sufficientemente diffusi da
essere presi in considerazione nell’analisi del problema.
10
2.3. L’estrazione posizionale fidata
L’assenza di una struttura logica con cui percorrere il contenuto del file,
costringe una qualsiasi applicazione, che analizzi un PDF, a muoversi let-
teralmente alla cieca, identificando il testo solo per dove si trova e non per
cosa rappresenta a livello logico4 . Il fatto che il testo sia individuabile solo in
modo posizionale diventa quindi un serio problema considerata la mancanza
di un layout sicuro (vedi 2.2.2).
Da parte di ASI c’era inoltre la necessità di avere una libreria ben docu-
mentata e ben progettata, in modo da essere in futuro facilmente estendibile
dall’azienda5 .
4
Una struttura logica permetterebbe di garantire l’estrazione di un dato in modo certo,
basandosi sul significato logico ad esso associato.
5
Tra le funzionalità che ASI vorrebbe integrare in Documentale c’è anche un ri-
conoscimento dei loghi aziendali nei documenti; è quindi interessata anche al futuro
riconoscimento di immagini in un PDF.
11
Capitolo 3
Attività di stage
1
C♯ introduce il concetto di “proprietà” di una classe. Le proprietà sono membri di
una classe che offrono funzionalità di lettura, scrittura, controllo e calcolo per i campi
dati privati di una classe. Una proprietà può essere utilizzata come un campo dati, ma
offre tutta la flessibilità di un metodo. C♯ inoltre permette di definire commenti XML
secondo una struttura ben precisa. Tali commenti, non solo possono essere utilizzati nella
generazione della documentazione (come avviene per il comando javadoc in Java), ma
anche da IntelliSense all’interno di Visual Studio per fornire un aiuto contestuale in fase
di codifica.
12
3.2. Analisi
3.2 Analisi
Durante la fase di analisi vi sono stati diversi incontri con l’azienda, rappre-
sentata dal tutor aziendale e da altri sviluppatori direttamente coinvolti o
interessati al progetto. Gli incontri non solo hanno permesso di individuare
i requisiti del progetto, ma anche di evidenziarne le criticità dello stesso. In
particolare fin dall’inizio erano state individuate e analizzate in dettaglio le
problematiche riguardanti la ricerca posizionale, date dalla combinazione di
un layout spesso variabile con l’assenza di una struttura logica (come de-
scritto nel capitolo precedente, vedi 2.2.2 e 2.2.3). La fase di analisi è inoltre
stata utile a fornire una visione d’insieme del problema, mediante diagram-
mi Use Case e diagrammi delle componenti (vedi figura 3.1), catalogando i
requisiti secondo diversi livelli di priorità a seconda delle necessità espresse
dall’azienda.
2
L’introduzione di uno standard di codifica per C♯ all’interno di ASI non è stata
immediata e, malgrado gli sforzi, parte del codice non aderisce tuttora alle nuove regole
aziendali.
13
3.2. Analisi
Applicazione
<< component>>
MapFinder
<< component>>
MapManager
14
3.3. Progettazione
Solo al termine della fase di analisi, quando già stava iniziando la fase di pro-
gettazione, è stato prodotto un documento contenente l’elenco dei requisiti
e i dettagli della fase appena conclusasi (studio delle criticità e definizione
delle priorità). Tale documento è stato in parte aggiornato e modificato
durante la prima metà della fase di progettazione.
3.3 Progettazione
La fase di progettazione è stata indubbiamente la fase principale all’interno
del mio progetto di stage. Di seguito vengono presentate le varie attività
su cui si è articolata. Ognuna delle seguenti attività è stata documentata
all’interno di un documento di specifica tecnica del prodotto, annotando:
scelte progettuali, risultati ottenuti, formalizzazioni UML, possibili sviluppi
futuri e limiti del prodotto. La specifica tecnica del prodotto è stata succes-
sivamente modificata in conseguenza alla campagna di test effettuata e alle
modifiche apportate al codice.
15
3.3. Progettazione
3
In questo tipo di valutazione era importante considerare se la libreria in questione
era nata per risolvere questo tipo di problema, o se, nel risolvere un’altra tipologia di
problema, si ritrovava ad offrire funzionalità utili al progetto di stage.
4
In particolare era importante che la libreria permettesse di ottenere la posizione del
testo e il maggior numero di dati correlati ad esso, questo per risolvere le problematiche
presentate nel capitolo precedente, vedi 2.3.
5
Di fatto C♯ può far uso di librerie scritte anche in altri linguaggi, ma restava comunque
un requisito preferenziale l’identificazione di una libreria completamente scritta in C♯, in
quanto si sarebbe potuta rendere necessaria una modifica alla libreria da parte di ASI.
6
Nel valutare l’affidabilità di una libreria sono stati considerati: il team di sviluppo
(da quanti membri era composto, quali competenze avevano e se erano appoggiati da
una società o meno) e il progetto (da quanti anni era aperto, con che frequenza veniva
aggiornato e se attualmente era attivo o meno).
16
3.3. Progettazione
In base a quanto definito sopra, ho effettuato uno studio delle librerie presen-
ti in circolazione, scartando la maggior parte di esse per la mancanza di do-
cumentazione e/o affidabilità, soffermandomi in particolare su iTextSharp
e su PdfSharp.
7
La documentazione riguardante le API di iTextSharp è assente. Sul sito si rimanda
all’utilizzo della documentazione di iText prodotta con Javadoc, senza fornire nessuna
indicazione sulle diversità presenti tra le due librerie. iTextSharp essendo basata su C♯, fa
un largo uso delle proprietà laddove iText utilizza metodi “set” e “get”. Inoltre, differisce
nella nomenclatura (di metodi, classi, interfacce, proprietà e campi dati), seguendo quella
standard utilizzata da Microsoft per C♯.
8
A tal proposito l’azienda si è raccomandata di strutturare e documentare il progetto
di stage in modo che in un prossimo futuro sia possibile utilizzare un’altra libreria di
appoggio al posto di PdfSharp. ASI infatti ha già fatto uso di iTextSharp per altre sue
applicazioni, ed ha perciò avviato uno studio parallelo al mio, volto a valutare una possibile
sostituzione di PdfSharp con iTextSharp.
17
3.3. Progettazione
PDF Body
Header Catalog
Body
Page Page
Page
Fonts
Content
Font Font
Cross Reference Table
18
3.3. Progettazione
Uno stream di contenuto (da qui in poi solo stream) va interpretato come
una sequenza di operatori e parametri (un esempio è visibile nella parte
destra della figura 2.5). Lo studio dello stream è una parte fondamentale
nell’analisi del testo di un PDF. Posizionamenti, font, colori, e lo stesso testo
sono contenuti infatti al suo interno.
Nella rete, nei progetti che ho preso in esame, nelle discussioni e negli artico-
li riguardanti questo argomento, sembra essere diffusa l’idea che il formato
PDF sia un formato chiuso. La maggior parte degli sviluppatori sembra
domandarsi come sia possibile sviluppare software in una situazione del ge-
nere e perché Adobe non fornisca un chiaro elenco degli operatori contenuti
in uno stream. La specifica del formato PDF[1] è in realtà consultabile e
scaricabile—non sorprendentemente in formato PDF—dal sito dell’Adobe.
9
Esistono librerie in grado di farlo, come accennavo nel capitolo precedente (vedi
2.2.1), nello stesso capitolo tuttavia viene spiegato perché tali librerie non sono state
prese in considerazione all’interno del mio progetto di stage.
10
Le problematiche riguardanti la realizzazione di un parser, sono state almeno in parte
affrontate nello sviluppo del progetto per il corso di “Linguaggi di Programmazione”.
11
Conoscenze acquisite all’interno del progetto del corso di “Ingegneria del Software”.
19
3.3. Progettazione
stream WS generalGraphicStateOperator
specialGraphicStateOperator
pathConstructionOperator
pathPaintingOperator
clippingPathOperator
textObject
type3FontOperator
colorOperator
shadingPatternsOperator
inlineImageOperator
markedContentOperator
markedContentSequence
COMMENT WS EOF
12
ANTLRWorks permette di inserire all’interno della grammatica blocchi di codice
scritti nel linguaggio di destinazione della grammatica, ossia nel linguaggio in cui verranno
poi prodotti il lexer e il parser.
13
La specifica dei PDF[1] imporrebbe che gli operatori fossero ognuno su una linea
diversa del codice, ossia che fossero separati da caratteri come: “\n” (Line Feed), “\r”
(Carriage Return), “\r\n”, “\f” (Form Feed), “\u0085” (Next Line), “\u2028” (Line
Separator), “\u2029” (Paragraph Separator). Adobe tuttavia garantisce il funzionamento
anche di quei PDF in cui più operatori siano stati inseriti nella stessa linea.
20
3.3. Progettazione
Per l’analisi del testo e dei suoi attributi sono necessari e sufficienti gli
specialGraphicStateOperator e i textObject14. In particolare il primo
gruppo di operatori viene utilizzato per le operazioni sulle matrici posi-
zionali15 , push e pop dello stack delle matrici e modifica della matrice di
trasformazione corrente (CTM). Il secondo gruppo invece rappresenta gli
oggetti di testo (text objects).
textObject
BT WS textStateOperator
textPositioningOperator
textShowingOperator
colorOperator
COMMENT WS ET
Ogni text object può contenere una sequenza qualsiasi di operatori purché
siano: operatori di stato, operatori di posizionamento, operatori di stampa
oppure operatori di colore. Esclusi gli operatori di colore (per i quali non
c’è un’immediata necessità, considerando che i documenti contabili di un’a-
zienda sono perlopiù monocromatici), gli altri tre gruppi di operatori sono
riconosciuti in dettaglio all’interno della grammatica.
14
Gli altri gruppi di operatori sono comunque riconosciuti nella grammatica, ma
nessuno di essi viene realmente utilizzato nell’estrazione di dati dallo stream.
15
Il posizionamento del testo all’interno di un file PDF è ottenuto mediante manipo-
lazioni di matrici 3 x 3. Per posizionare il testo in una pagina vengono utilizzate cinque
matrici: la matrice di posizionamento del testo (text matrix Tm ), la matrice di posizio-
namento di linea del testo (text line matrix Tlm ), la matrice di trasformazione del testo
(current transformation matrix CTM ), una matrice di stato temporanea (state matrix) e
infine una matrice di rendering temporanea, utilizzata per calcolare la posizione di ogni
carattere nella pagina.
21
3.3. Progettazione
cd: Plain.File.Extraction
Plain.File.Extraction
PdfTextStreamLexer
PdfAnalyzer
PdfTextStreamParser
PdfPage PdfChar
PdfText
PdfFont
22
3.3. Progettazione
3.3.5 PdfAnalyzer
PdfAnalyzer è la classe principale del package Plain.File.Extraction.
L’applicazione che utilizza Plain.File.Extraction possiede una sola istan-
za della classe PdfAnalyzer. PdfAnalyzer implementa quindi il design pat-
tern Singleton. Il principale utilizzo di PdfAnalyzer è quello di ottenere
degli oggetti PdfPage. Solo PdfAnalyzer può costruire correttamente un’i-
stanza di PdfPage a partire da un dato PDF.
16
PdfTextStreamParser (oltre ai metodi e campi dati generati in modo automatico
a partire dalla grammatica) possiede anche una serie di metodi e strutture di supporto
progettate apposta per poter manipolare ed ottenere dei dati dagli stream contenuti in un
PDF.
23
3.3. Progettazione
Volendo, un operatore di stampa può essere invocato per ogni singolo ca-
rattere contenuto in una pagina. I generatori di PDF attualmente in circo-
lazione tuttavia tendono ad invocare l’operatore di stampa quando cambia
uno degli attributi del testo e quando si va a capo nella pagina. In quest’ot-
tica, un’istanza di PdfText corrisponde ad una sequenza di testo disposto
su un’unica riga e che utilizza un set comune di attributi.
17
Questo discorso viene gestito in maniera più efficiente per i font “monospace”, quei
font cioè che mantengono la stessa distanza per ogni glifo.
18
Addirittura è possibile definire un array di sostituzioni completamente arbitrario, nel
qual caso il carattere con valore numerico intero pari a 174 può rappresentare un qualsiasi
carattere Unicode.
19
Sono attributi del testo: il font, la grandezza del testo (size), la spaziatura tra le
lettere (char spacing), la spaziatura tra le parole (word spacing), la spaziatura tra una
riga e l’altra (text leading), l’offset verticale di un carattere (text rise) e il colore.
24
3.3. Progettazione
3.3.8 PdfPage
PdfPage è l’altra classe, oltre a PdfAnalyzer, disponibile all’esterno del pac-
kage Plain.File.Extraction. Un’istanza di PdfPage contiene una lista di
PdfFont e una lista di PdfText. PdfPage permette di analizzare il contenu-
to estratto da una pagina, ottenendo non solo il testo posizionale contenuto
nella pagina, ma anche tutti gli attributi ad esso connessi.
Fattura A
Tabella contenente i vari elementi della fattura.
Totale: 198.509,08 €
1.0000 g
BT Modello di mappatura
74.2500 704.5730 Td Posizione iniziale del dato (x,y). 1
/F2 10.0000 Tf Posizione finale del dato (x,y) 2
174.7979 677.5730 Td
Preceduto dalla stringa "Totale:". 3
(Totale:) Tj
208.1475 677.5730 Td Posizione del primo carattere. 4
/F1 10.0000 Tf Utilizza un font sans, grande 10. 5
(198.509,08) Tj È un numero decimale positivo. 6
260.9746 677.5730 Td
/F2 10.0000 Tf È seguita dalla stringa "€ ". 7
(€) Tj
ET
74.2500 702.4538 201.7822 11.1719 re È posizionato sotto una linea. 8
25
3.3. Progettazione
I dati forniti dal programma (dal numero 3 al numero 8 in figura 3.6) devo-
no essere in questa fase verificati dall’utente, il quale segnala al programma
quali degli elementi trovati fanno parte del layout originario, e quali invece
sono errori dovuti ai processi intermedi. Questa fase della definizione di un
modello di mappatura è fondamentale, in quanto, maggiore è l’attenzione
posta dall’utente nel verificare i dati proposti dal programma, maggiore sarà
l’affidabilità dell’analisi automatizzata del programma.
Fattura A 1 2 3 4 5 6 7 8 Affidabilità
Tabella contenente i vari elementi della fattura.
100%
Totale: 198.509,08 €
Fattura B 1 2 3 4 5 6 7 8 Affidabilità
Tabella differente dalla tabella precedente.
62%
Totale: 8919,85 €
Fattura C 1 2 3 4 5 6 7 8 Affidabilità
Tabella in cui sono contenuti dei numeri, per esempio:
Spese di cancelleria 8,09 € 37%
Totale: 5189,82 €
26
3.3. Progettazione
Maggiore il numero dei dati verificati, maggiore sarà la precisione nella mi-
sura d’affidabilità per il dato da estrarre. Sarebbe inoltre possibile definire
un peso diverso per ogni test. Per esempio in figura 3.7 sarebbe plausibi-
le dare più importanza al test numero 3 (L’elemento è preceduto dalla
stringa "Totale"), in quanto il superamento del test numero 3 negli esem-
pi di fattura proposti garantisce maggiormente l’esattezza del dato rispetto
agli altri test.
27
3.4. Codifica
PdfSharp inoltre non supporta alcuni PDF dalla versione 1.6 della speci-
fica. Non è ancora in grado infatti di leggere il nuovo tipo di struttura
interna (iRef) adottata da tali PDF22 .
3.4 Codifica
L’implementazione delle classi di Plain.File.Extraction non è stata una
fase particolarmente onerosa all’interno dell’attività di stage. Gran parte del
codice è stato sviluppato velocemente a partire dal diagramma delle classi
e dai diagrammi di attività prodotti in fase di progettazione. Vi sono state
alcune modifiche alle classi in conseguenza all’individuazione di bug nella
fase di test, ma in linea di massima nella fase di codifica mi sono limitato a
seguire quanto progettato nella fase precedente.
Tra le attività svolte nella fase di codifica c’è stata anche la modifica della
grammatica. ANTLRWorks permette infatti di definire le proprie operazioni
di traduzione direttamente in linea, affiancandole alle regole della gramma-
tica23 . In questo modo, sono state modificate tutte le regole necessarie
all’estrazione del testo e dei suoi attributi.
20
Si tratta di quattordici font riconosciuti da Adobe come standard comune ad ogni
sistema operativo, per i quali quindi non vengono incluse le definizioni e le grandezze dei
glifi all’interno dei file PDF. In particolare i font sono: “Times” (versione 3) nei formati
normale, grassetto, corsivo e grassetto-corsivo; Helvetica (vesrione 3) nei formati normale,
grassetto, corsivo e grassetto-corsivo; Courier nei formati normale, grassetto, corsivo e
grassetto-corsivo; Symbol; e Zapf Dingbats. In alternativa a “Times” è possibile usare
anche “Times New Roman PS MT” (versione 4.x), mentre in alternativa ad “Helvetica”
è possibile anche utilizzare “Arial MT” (versione 4.x).
21
Dalla versione 1.5 dello standard PDF l’esclusione delle definizioni dei “14 font stan-
dard” è deprecata. Ogni font utilizzato in un PDF deve essere incluso all’interno del PDF
stesso. Tuttavia per retrocompatibilità sono considerati PDF validi anche i PDF che non
includono le definizioni per questi font.
22
PdfSharp permette comunque di analizzare tutti i PDF con versione superiore alla
1.5 che siano stati prodotti mantenendo la compatibilità con la versione 1.5 della specifica.
23
Grazie a questa funzionalità è possibile per esempio che il parser, una volta incon-
trato un operatore di posizionamento, esegua le istruzioni fornite in modo da ottenere
informazioni sulla posizione raggiunta in quel punto dello stream.
28
3.5. Verifica e validazione
24
La descrizione dell’utilizzo dell’interfaccia grafica minimale è stata illustrata nel ma-
nuale utente consegnato all’azienda. Data l’assenza di un’interfaccia grafica complessa,
la maggior parte della documentazione riguardante Plain.File.Extraction è contenuta
tuttavia nella specifica tecnica e nella descrizione delle API. Il manuale utente descrive
invece l’utilizzo della GUI minimale in cui è stato integrato Plain.File.Extraction.
29
3.6. Preventivo e consuntivo
60
50
40
30
20
10
0
1 2 3 4 5 6
Studio del Analisi Progettazione Codifica Verifica e Documentazione
dominio validazione
25
Il modello di ciclo di vita—detto evolutivo—si basa sulla rapida realizzazione di una
versione semplificata del prodotto, con la quale sperimentare ed esplorare nuovi requisiti
e funzionalità da aggiungere allo stesso. La verifica e il testing del prototipo possono
infatti portare all’aggiunta o alla rimozione di requisiti costringendo di conseguenza lo
sviluppatore a riaffrontare le fasi di: analisi, progettazione, sviluppo e test.
30
3.6. Preventivo e consuntivo
Nel grafico in figura 3.9 è possibile vedere la differenza tra le ore preven-
tivate per ogni attività e le ore effettivamente dedicate ad ognuna di esse.
Nell’ottenere il grafico sono state considerate per ogni attività (analisi, pro-
gettazione, codifica, eccetera) le ore dedicate all’interno di ogni fase.
Preventivo
Consuntivo
70
60
50
40
30
20
10
0
Studio del Analisi Progettazione Codifica Verifica e Documentazione
dominio validazione
Nel grafico, le ore effettive per l’attività di studio del dominio sono inferiori
alle ore preventivate, questo perché lo studio di C♯, .NET e WPF non è stato
particolarmente oneroso, inoltre parte dello studio della specifica PDF[1] è
stato conteggiato all’interno delle ore di progettazione.
26
Documentare il prodotto mentre viene progettato non significa avere, per esempio,
una specifica tecnica pronta al termine dell’attività di progettazione. La documentazione
prodotta serve come base per il documento da produre, il quale può venire comunque
redatto al termine dell’attività in questione. Documentare i propri progressi mentre si
progetta e commentare il codice man mano che lo si scrive, serve ad evitare di trovarsi a
prodotto concluso difronte a del codice privo di documentazione. In situazioni del genere
le ore che vengono di norma impiegate nel tentativo di documentare il codice sono di gran
lunga superiori alle ore perse nel documentarlo mentre veniva prodotto.
31
3.6. Preventivo e consuntivo
32
Capitolo 4
Valutazione retrospettiva
Tale componente avrebbe poi dovuto utilizzare i modelli creati, per l’estra-
zione automatizzata di dati da file PDF. ASI avrebbe inoltre gradito uno
studio e una proposta di interfaccia grafica che rendesse più facile e intuitivo
il processo di definizione dei modelli di mappatura.
Tuttavia verso la fine della fase di analisi ci si è resi conto di aver sotto-
valutato il problema1 , ed è stato deciso quindi di portare avanti la base del
progetto (Plain.File.Extraction) e utilizzare le eventuali ore avanzate
per dare valore aggiunto al package e alla documentazione ad esso allegata.
1
ASI si aspettava di trovare una struttura logica all’interno dei PDF, o comunque
un’altro tipo di struttura che permettesse di risolvere il problema dell’affidabilità, e potersi
fin da subito concentrare sulla creazione e gestione dei modelli di mappatura.
33
4.2. Conoscenze acquisite
2
Il programma avrebbe dovuto far uso di un’intelligenza artificiale nel fornire la lista di
dati ausiliari all’utente, nella definizione del modello di mappatura (vedi 3.3.9), fornendo il
più possibile dati inerenti al testo, e ricavando informazioni aggiuntive dalla comparazione
dei dati ottenuti dallo stream. C’era inoltre la possibilità, di utilizzare la verifica da parte
dell’utente dei dati proposti, per permettere al programma di migliorarsi. La necessità
da parte di ASI è tuttora quella di avere un software che con un input minimo da parte
dell’utente riesca ad ottenere un modello di mappatura preciso e sicuro; per ottenere ciò
il programma avrebbe dovuto sfruttare ogni conferma dell’utente, combinarla con gli altri
dati in suo possesso e fornire informazioni migliori all’utente stesso.
34
4.2. Conoscenze acquisite
3
Le “actions” in ANTLR sono appunto blocchi di codice definiti nel linguaggio di
destinazione della grammatica (il linguaggio con cui verrà poi generato il parser). Le
“actions” vengono inserite direttamente all’interno della grammatica e permettono di per-
sonalizzare l’attività del parser. Esistono delle regole precise per integrare le istruzioni C♯
con il linguaggio utilizzato da ANTLR per definire la grammatica[3].
4
Generalmente si tende a confondere l’ASCII con l’ANSI. L’ASCII è un encoding
composto da 128 caratteri (alcuni di essi sono caratteri non stampabili di controllo),
mentre l’ANSI è la codifica generalmente utilizzato nei sistemi Microsoft Windows ed è
costituito da 256 caratteri (i primi 128 appartengono in effetti alla codifica ASCII).
5
Un font può essere sprovvisto dei glifi corrispodenti ad alcuni caratteri. L’utilizzo di
Unicode all’interno di un programma non garantisce quindi il supporto di ogni carattere
in quanto l’unico modo per rendere visibile un carattere all’occhio umano è l’utilizzo di un
font. Se il font non possiede il glifo corrispondente al dato carattere, quel carattere non
può essere visualizzato, in questo senso il processo di decodifica di una stringa non può
assolutamente astrarre dal font utilizzato nella visualizzazione del testo.
6
All’interno di un file PDF non vi è distinzione tra interi e reali, un “numero” può
infatti essere accompagnato o meno da un segno e accompagnato o meno da una parte
decimale.
7
Un nome all’interno del formato PDF è una stringa (preceduta dal carattere “/”),
serve per identificare risorse quali font e immagini (un font con nome “/F3” viene utilizzato
in uno stream richiamando appunto il suo identificativo “/F3 10 Tf”). Viene inoltre
utilizzato per identificare delle costanti all’interno di un PDF, per esempio è possibile
trovare una definizione del genere “Encoding /WinAnsi”, in questo caso “/WinAnsi”
indica una costante interna del formato PDF.
8
Il termine dizionario si riferisce ad una struttura informatica per la collezione di dati,
nella quale ad ogni elemento chiave corrisponde un altro elemento. All’interno dei PDF
la quasi totalità degli oggetti è costituita da dizionari, nei quali a determinate keyword
corrispondono determinate definizioni.
35
4.2. Conoscenze acquisite
Nello studio poi degli stream di contenuto ho acquisito familiarità con: gli
operatori riguardanti le matrici di posizionamento; gli oggetti di testo con-
tenuti all’interno di uno stream; gli operatori di stato del testo (Tc, Tw, Tz,
TL, Tf, Tr e Ts); gli operatori posizionali del testo (Td, Tm e T*); gli operatori
di stampa (showing) del testo (Tj, ’, " e TJ)9 .
9
Sono state acquisite conoscenze parziali anche su altri tipi di operatori come: gli
operatori grafici, gli operatori di colore e gli operatori per il contenuto taggato (marked
content operator).
10
Lo standard PDF nella sua versione attuale permette di inserire tra le altre cose
anche filmati e audio all’interno di un documento, come pure animazioni 3D.
36
4.3. Valutazione del corso di studi
Mi ha sorpreso invece quanto appreso nello studio dei font e degli encoding.
Spesso queste conoscenze vengono date per scontate o comunque citate solo
marginalmente all’interno del corso di studi. Tuttavia ritengo che esse siano
un argomento abbastanza specifico e non strettamente necessario all’interno
del corso di laurea.
37
Appendice A
Glossario
C
Ciclo attivo All’interno del dominio applicativo il termine indica l’in-
sieme dei documenti emanati e prodotti da un’azienda,
per i quali la stessa è in possesso dei sorgenti da cui essi
sono derivati.
D
Documentale Plain
R Documentale è il pacchetto software prodotto
da ASI per la gestione del ciclo attivo e passivo dei
documenti aziendali.
38
E
ERP (Enterprise Resource Planning) è una tipologia di soft-
ware che cerca di integrare i vari processi di pianificazio-
ne dell’azienda, la realizzazione del prodotto, le vendite,
gli acquisti, la logistica di magazzino e il marketing.
G
Glifo Un glifo è la rappresentazione grafica di un carattere, la
figura geometrica con la quale esso appare all’interno di
un media (sia esso carta stampata oppure un monitor).
Un font è appunto la definizione di una mappatura tra
caratteri Unicode e glifi.
O
OCR (Optical Character Recognition), un programma OCR si
occupa di tradurre immagini in cui è contenuto del testo
in testo selezionabile. I programmi OCR sono una com-
ponente fondamentale nella creazione di PDF Searchable
a partire da documenti cartacei.
P
Posizionale Un’attività posizionale è un’attività legata all’utilizzo di
una o più posizioni geometriche, in particolare il ricono-
scimento posizionale come pure l’estrazione posizionale
di testo indicano la possibilità di riconoscere ed estrarre
il testo da un documento una volta definita una posizione
iniziale o un’area all’interno di una pagina del documento.
39
S
Searchable Viene definito PDF Searchable un documento PDF dove
sia possibile fare ricerca sul testo contenuto, deve inoltre
essere possibile selezionare e copiare porzioni di testo.
Questo tipo di distinzione è necessaria considerando che
all’interno di un PDF il testo può essere presente anche
come semplice immagine raster.
T
Tagged Un Tagged PDF, è un documento PDF all’interno del
quale sono stati inserite sequenze di XML in modo da
dare una struttura logica a quella che altrimenti sarebbe
solo una rappresentazione grafica (rendering) del testo.
U
Unicode Unicode è uno standard che permette di manipolare e
rappresentare correttamente il testo contenuto nella mag-
gior parte dei sistemi di scrittura del mondo. L’ultima
versione dello standard contiene più di 107.000 caratteri
e copre 90 sistemi di scrittura. Il successo di Unicode nel-
l’unificare i vari set di caratteri presenti nel mondo è stato
tale da aver portato alla sua implementazione in mol-
te e diverse tecnologie, come XML, Java e il framework
.NET. In .NET infatti un char rappresenta un carattere
Unicode tra 0 e 65.535.
40
W
WPF (Windows Presentation Foundation) è un sistema per lo
sviluppo di interfacce grafiche per applicazioni Windows.
WPF separa l’interfaccia grafica dalla logica del program-
ma, pur permettendo una veloce ed efficace integrazione
tra le due.
X
XAML (eXtensible Application Markup Language) è un linguag-
gio basato su XML utilizzato per la definizione delle
interfacce grafiche in WPF.
41
Bibliografia
42
Indice analitico
43
Indice analitico
44
Indice analitico
verificato, 26, 27
dato primitivo, 18
debug, 34
decodifica, 35 E
design pattern elenco puntato, 9, 10
façade, 23 encoding, 18, 23, 24, 27, 35, 37
front controller, 23 ERP, 1, 39
singleton, 23 errore, 6, 13, 26
diagramma estrazione
delle classi, 28 attributi, 7
delle componenti, 13 automatica, 27, 33
di attività, 28 di testo, 7, 8, 16
Use Case, 13 di un dato, 6, 11, 13
dimensioni della pagina, 23 fallimento, 27
DirectX, 2 posizionale, 7, 8, 22, 39
DOC, 4
Documentale, 3, 6, 7, 11, 16, 38
documentazione, 17
allegata, 8, 33 F
analisi dei requisiti, 15
attività di, 12, 15, 17, 30, 31 fallimento posizionale, 27
fase di, 30, 31 fase
generazione, 12 di analisi, vedi analisi
mantenibilità, 12 di codifica, vedi codifica
manuale utente, 29 di documentazione, vedi
qualità della, 8, 16, 17 documentazione
specifica tecnica, 15, 29 di progettazione, vedi
documento progettazione
acquisizione, 5, 6, 8, 38 di studio del dominio, vedi
archiviazione, 3, 36 studio del dominio
cartaceo, 3, 5, 6, 10, 39 di testing, vedi
ciclo attivo, 1, 4, 38 verifica e validazione
ciclo di vita, 6 di verifica e validazione, vedi
ciclo passivo, 1, 5, 7, 11, 27, 38 verifica e validazione
creazione, 5, 8 filtro di codifica, 18
digitale, 5, 10, 36 firma digitale, 3
HTML, 9, 10 font, 10, 18, 19, 22–25, 35, 37, 39, 40
layout, 3, 6, 9 font monospace, 24
produzione, 3, 6, 38 formato
driver, 29 cartaceo, 5, 6
di scambio, 6, 10
elettronico, 6
intermedio, 4
principale, 4
45
Indice analitico
46
Indice analitico
M N
macchina virtuale, 2 NET (framework), vedi .NET
MacRomanEncoding, 27 nomenclatura, 12, 17
manuale utente, vedi
documentazione
MapFinder, 13–15
MapManager, 13–15 O
matrice OCR, 5, 6, 39
di linea di testo, vedi Tlm oggetto di testo, vedi text object
di posizionamento, 25, 36 operatore, 20, 21, 27, 36
di testo, vedi Tm di colore, 21, 36
posizionale, 21 di posizionamento, 21, 28, 36
stack, 21 di stampa, 21, 24, 36
matrice di stato, vedi state matrix di stato, 10, 21, 36
matrice di trasformazione corrente, grafico, 36
vedi CTM per il contenuto taggato, 36
media, 39 operazione di traduzione, 28
Microsoft, 1, 13, 34 ore effettive, 31
.NET, vedi .NET ore preventivate, 31
nomencatura standard, 17
SQL Server, vedi SQL Server
Visual SourceSafe, vedi
Visual SourceSafe P
Visual Studio, vedi Visual Studio
package, vedi Plain.File.Extraction
Windows, 2, 35
pagina web, 2
Windows Forms, vedi WinForms
parser, 19, 20, 23, 25, 28, 29, 35, 37,
Windows Presentation
38
Foundation, vedi WPF
PDF
modello di ciclo di vita, 30
analisi, 11, 14, 15, 17, 19, 21, 22,
modello di mappatura
26
creazione, 8, 13
Body, 17
definizione, 6, 7, 25, 26, 33, 34
contenuto, 11, 18, 35
gestione, 33
creazione, 9, 17, 18
identificazione, 13
Cross Reference Table, 17, 35
modifica, 13
dizionario, 35
modello evolutivo, 30
File Trailer, 17, 35
monocromatico, 21
formato chiuso, 19
generatore, 5, 24, 27
Header, 17, 35
layout, 13
47
Indice analitico
48
Indice analitico
49
Indice analitico
X
XAML, 2, 37, 41
XML, 4, 9, 10, 12, 29, 34, 37, 40, 41
XPS, 4
Z
Zapf Dingbats (font), 28
50