Riconoscimento Posizionale di Testo all'Interno di un PDF

60
Universit ` a degli studi di Padova Facolt ` a di Scienze MM.FF.NN. Corso di Lurea Triennale in Informatica RICONOSCIMENTO POSIZIONALE DI TESTO ALL'INTERNO DI UN PDF Relatore: Tullio Vardanega Laureando: Marco Tessarotto Anno Accademico 2009-2010

Transcript of Riconoscimento Posizionale di Testo all'Interno di un PDF

Page 1: Riconoscimento Posizionale di Testo all'Interno di un PDF

Universita degli studi di Padova

Facolta di Scienze MM.FF.NN.

Corso di Lurea Triennale in Informatica

RICONOSCIMENTO POSIZIONALE DI TESTO

ALL'INTERNO DI UN PDF

Relatore:Tullio Vardanega

Laureando:Marco Tessarotto

Anno Accademico 2009-2010

Page 2: Riconoscimento Posizionale di Testo all'Interno di un PDF

II

Page 3: Riconoscimento Posizionale di Testo all'Interno di un PDF

Indice

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 5

2.1 Problematiche del ciclo passivo . . . . . . . . . . . . . . . . . 5

2.1.1 Modelli di mappatura . . . . . . . . . . . . . . . . . . 7

2.2 Problematiche dei PDF . . . . . . . . . . . . . . . . . . . . . 8

2.2.1 Estrazione del testo e dei suoi attributi . . . . . . . . 8

2.2.2 L’assenza di un layout fidato . . . . . . . . . . . . . . 9

2.2.3 L’assenza di una struttura logica . . . . . . . . . . . . 10

2.3 L’estrazione posizionale fidata . . . . . . . . . . . . . . . . . . 12

3 Attivita di stage 13

3.1 Studio del dominio applicativo . . . . . . . . . . . . . . . . . 13

3.2 Analisi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.3 Progettazione . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.3.1 Individuazione di una libreria . . . . . . . . . . . . . . 16

3.3.2 L’analisi dello stream . . . . . . . . . . . . . . . . . . 19

3.3.3 La definizione della grammatica . . . . . . . . . . . . . 20

3.3.4 Estrazione posizionale di testo . . . . . . . . . . . . . 22

3.3.5 PdfAnalyzer . . . . . . . . . . . . . . . . . . . . . . . . 24

3.3.6 PdfFont, PdfChar e PdfText . . . . . . . . . . . . . . 25

3.3.7 Lexer e Parser . . . . . . . . . . . . . . . . . . . . . . 25

3.3.8 PdfPage . . . . . . . . . . . . . . . . . . . . . . . . . . 26

III

Page 4: Riconoscimento Posizionale di Testo all'Interno di un PDF

Indice

3.3.9 Affidabilita del dato estratto . . . . . . . . . . . . . . 263.3.10 Limiti dell’applicazione . . . . . . . . . . . . . . . . . 28

3.4 Codifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.5 Verifica e validazione . . . . . . . . . . . . . . . . . . . . . . . 303.6 Preventivo e consuntivo . . . . . . . . . . . . . . . . . . . . . 31

4 Valutazione retrospettiva 354.1 Conseguimento degli obiettivi fissati . . . . . . . . . . . . . . 354.2 Conoscenze acquisite . . . . . . . . . . . . . . . . . . . . . . . 36

4.2.1 ISO 32000 . . . . . . . . . . . . . . . . . . . . . . . . . 374.2.2 PDF/UA e PDF/A . . . . . . . . . . . . . . . . . . . 38

4.3 Valutazione del corso di studi . . . . . . . . . . . . . . . . . . 39

A Glossario 41

IV

Page 5: Riconoscimento Posizionale di Testo all'Interno di un PDF

Elenco delle figure

2.1 Ciclo attivo e passivo in un’azienda . . . . . . . . . . . . . . . 52.2 Produzione e acquisizione di un documento . . . . . . . . . . 62.3 Layout e modello di mappatura . . . . . . . . . . . . . . . . . 72.4 Affidabilita dell’estrazione . . . . . . . . . . . . . . . . . . . . 92.5 Differenza tra HTML e PDF . . . . . . . . . . . . . . . . . . 10

3.1 Diagramma generale delle componenti . . . . . . . . . . . . . 153.2 Struttura interna di un file PDF . . . . . . . . . . . . . . . . 193.3 Diagramma della struttura principale della grammatica . . . 213.4 Diagramma della struttura di un oggetto di testo. . . . . . . . 223.5 Diagramma delle classi in Plain.File.Extraction . . . . . . . . 233.6 Come garantire l’esattezza del dato estratto . . . . . . . . . . 263.7 Misura d’affidabilita per il dato estratto . . . . . . . . . . . . 273.8 Dettaglio delle fasi . . . . . . . . . . . . . . . . . . . . . . . . 313.9 Preventivo e consuntivo a confronto . . . . . . . . . . . . . . 32

V

Page 6: Riconoscimento Posizionale di Testo all'Interno di un PDF

VI

Page 7: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 1Dominio 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 portaliaziendali. I pacchetti software offerti dalla ASI sono rivolti principalmentealla gestione delle risorse umane e alla gestione della contabilita e dei do-cumenti aziendali. ASI srl offre inoltre una serie di pacchetti software ERPspecifici per diverse tipologie di aziende manifatturiere.

ASI e Business Partner di IBM relativamente all’hardware e al software, einoltre Gold Certified Partner di Microsoft, fa parte quindi di un grupposelezionato di Business Partners Microsoft. A ricevere questa certifica-zione sono solo le aziende che rispettano tutti i requisiti piu rigidi richiestida Microsoft, ed hanno certificato su campo (attraverso testimonianze diclienti o verifiche dirette di Microsoft) la capacita di implementare soluzioniaffidabili, efficienti e scalabili, basate su tecnologie Microsoft.

1.2 Tecnologie e processi aziendali

ASI sviluppa software specifico per fornitori di carta e cancelleria, azien-de produttrici di articoli da regalo e oggettistica, aziende che si occupanodel noleggio e della vendita di macchine per l’ufficio. Le soluzioni ERP diASI sono sistemi software flessibili, capaci di supportare un gran numero diprocessi gestionali, riducendo i tempi di acquisizione e di verifica delle or-dinazioni. I software ASI offrono una piattaforma completa, le cui funzionimodulari ottimizzano le attivita amministrative, finanziarie, commerciali, elogistiche dell’azienda. ASI utilizza inoltre applicazioni e tecnologie Micro-soft all’interno dei propri processi di sviluppo, come Visual Studio, VisualSourceSafe ed SQL Server.

1

Page 8: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 1. Dominio applicativo

1.2.1 Il framework .NET

ASI si appoggia a .NET 3.5 per la realizzazione dei suoi prodotti. Il fra-mework .NET di Microsoft include: una estesa libreria di classi in grado dioffrire diverse funzionalita; una macchina virtuale che gestisce l’esecuzionedei programmi scritti in C♯1. L’utilizzo di una macchina virtuale permetteai progettisti dell’azienda di concentrarsi sulla risoluzione del problema esulle caratteristiche del software, potendo usufruire di tutte le funzionalitamesse a disposizione dalle classi del framework.

1.2.2 C♯

L’utilizzo di C♯ nell’azienda e dovuto principalmente alla sua versatilita.C♯ infatti si presta bene alla risoluzione di diverse tipologie di problemisoftware, grazie anche alla libreria .NET. L’utilizzo di una macchina virtualepoi offre un maggior livello di astrazione nella fase di progettazione, noncheuna migliore garanzia di sicurezza nelle applicazioni.

1.2.3 Windows Presentation Foundation

Windows Presentation Foundation (da qui in poi WPF) e un sistema perlo sviluppo di interfacce grafiche in ambiente Windows, ideato per sostitui-re il vecchio sistema grafico Windows Forms (WinForms) basato su GDI.WPF e basato su DirectX, che permette, grazie all’accelerazione hardware,di utilizzare funzionalita avanzate nelle interfacce, come la trasparenza e leanimazioni2. WPF integra delle primitive vettoriali per la definizione del-le componenti grafiche, garantendo un’interfaccia scalabile senza perdita diqualita.

WPF utilizza XAML per la definizione delle interfacce grafiche in C♯. XAMLpermette ad un’applicazione WPF di essere distribuita sia come applicazio-ne desktop che come applicazione web3. Con XAML, WPF rende esplicitala separazione tra l’interfaccia grafica e la logica del programma, pur per-mettendo (tramite data binding) una veloce ed efficace integrazione tra ledue. XAML rende inoltre piu semplice ed intuittiva la definizione della GUIe le modifiche alla stessa.

1La macchina virtuale gestisce l’esecuzione di tutte le applicazioni sviluppateall’interno del framework .NET

2L’utilizzo dell’accelerazione hardware e uno dei punti di forza di WPF, in questo modoinfatti e possibile utilizzare le GPU presenti nell’hardware delle schede video, alleggerendoil carico di calcolo imposto alla CPU, e in definitiva ottenendo una maggiore reattivita efluidita nell’interfaccia grafica.

3XAML e infatti alla base della tecnologia Silverlight, framework per la fruizione dicontenuti interattivi nelle pagine web con funzionalita simili a quelle di Adobe Flash.

2

Page 9: Riconoscimento Posizionale di Testo all'Interno di un PDF

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 sta attualmente cercando diportare anche le vecchie applicazioni da Windows Forms a WPF.

1.3 Ciclo attivo e passivo di un’azienda

Il ciclo attivo di un’azienda rappresenta l’insieme delle operazioni che un’a-zienda intrattiene con i suoi clienti e che determinano dei guadagni perl’azienda. Il ciclo passivo rappresenta invece l’insieme delle operazioni cheun’azienda intrattiene con i suoi fornitori, e che determinano quindi delleuscite per la stessa.

Nella gestione dei documenti i due termini indicano rispettivamente: l’insie-me dei documenti prodotti dall’azienda e l’insieme dei documenti che riceveinvece l’azienda a fronte dei servizi offerti.

1.4 Plain R© Documentale

Plain R© Documentale (da qui in poi solo Documentale) e il pacchetto soft-ware prodotto da ASI per la gestione del ciclo attivo e passivo dei documen-ti aziendali. Documentale agevola la gestione dei documenti, riducendo losforzo necessario alla produzione e all’archiviazione degli stessi all’interno diun’azienda. Documentale interviene in quelle aree dove una gestione delleinformazioni e tanto possibile quanto necessaria, senza pero sconvolgere leabitudini operative degli utenti aziendali.

Documentale offre tra le altre le seguenti funzionalita:

• ricerca, consultazione, trasmissione e condivisione dei documenti e deiloro contenuti;

• sicurezza nell’accesso alle informazioni;

• unificazione dei diversi database documentali presenti in azienda;

• 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;

• gestione del ciclo passivo dei documenti cartacei.

Documentale offre inoltre il supporto alla firma digitale nei documenti eall’archiviazione sostitutiva a norma.

3

Page 10: Riconoscimento Posizionale di Testo all'Interno di un PDF

4

Page 11: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 2Progetto aziendale

2.1 Problematiche del ciclo passivo

Come descritto nel capitolo precedente la gestione dei documenti aziendalie suddivisibile in due parti. Il ciclo attivo dei documenti rappresenta l’insie-me dei documenti prodotti dall’azienda. All’interno del ciclo attivo i dati inpossesso dall’azienda vengono concretizzati in documenti, ognuno dei qualiprodotto secondo un preciso layout. Per cui nel ciclo attivo l’azienda nonsolo e in possesso del documento nel suo formato principale (PDF Searcha-ble), ma possiede anche tutti i sorgenti dal quale e stato prodotto (dati deldatabase aziendale, layout, formati intermedi e interni come DOC, XPS,XML).

Dati

Aziende

Documenti

Aziende

Layout

Documenti

Ciclo Passivo Ciclo Attivo

PDF

PDF

PDF

PDF

PDF

Figura 2.1: Ciclo attivo e passivo in un’azienda

5

Page 12: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 2. Progetto aziendale

Il ciclo passivo dei documenti riguarda invece l’insieme dei documenti ac-quisiti dall’azienda. All’interno del ciclo passivo l’azienda possiede (nellamaggior parte dei casi) la sola copia cartacea dei documenti, la quale rap-presenta una perdita d’informazione e d’usabilita rispetto alla versione di-gitale. Il possesso di documenti in formato cartaceo rende estremamenteproblematica 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 sottolineareuna difficolta nell’avanzamento del processo.

Layout

Documentointermedio

Stampa

PDF

PDFSearchable

Documentocartaceo

PDF

PDFSearchable

Generatoredi PDF

Immagineraster

Scanner

OCR

?

Dati Dati

Figura 2.2: Produzione e acquisizione di un documento

6

Page 13: Riconoscimento Posizionale di Testo all'Interno di un PDF

2.1. Problematiche del ciclo passivo

Come e possibile vedere in figura 2.2, il processo di acquisizione dei dati(che ha come input i documenti cartacei e come output i dati valorizzati)utilizza strumenti inaffidabili (scanner e scanner OCR) che non permettonodi riottenere un sorgente pulito, ma anzi hanno una probabilita non indif-ferente di introdurre ulteriori errori e perdita di qualita all’interno del do-cumento. Documentale offre funzionalita per la conversione dei documenticartacei in PDF Searchable, affidando pero all’utente il compito di associaremanualmente i dati a un PDF.

2.1.1 Modelli di mappatura

Per ovviare alla diversificazione nei layout (l’attivita contrassegnata da unpunto di domanda in figura 2.2) ASI ha pensato di definire dei modelli dimappatura. Un modello di mappatura e una struttura ricavata a partire dallayout di un documento. Serve ad accomunare documenti simili fra loro, inmodo da poter poi estrarre dati sistematicamente fintanto che il modello dimappatura risulta valido.

Layout

Documenti

Modello dimappatura

Dati Dati

Figura 2.3: Layout e modello di mappatura

Nel grafico sovrastante viene illustrata parte del ciclo di vita di un documen-to, in particolare e evidenziato il parallelismo tra il layout (nella produzionedei 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 mappaturadefinisce una forma nel documento per riottenere i contenuti. Nel graficoi documenti sono il formato di scambio (sia cartaceo che elettronico) tral’azienda che li emette a sinistra e l’azienda che li acquisisce a destra.

7

Page 14: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 2. Progetto aziendale

Il modello di mappatura deve essere definito manualmente dall’utente. Ladefinizione di un modello di mappatura permette tuttavia l’analisi auto-matizzata di tutti i documenti ad esso associati, introducendo percio unnotevole miglioramento rispetto alla situazione precedente1.

Per quanto questa soluzione sia gia stata presa in considerazione dai pro-gettisti ASI, Documentale non possiede ancora una gestione dei modelli dimappatura.

2.2 Problematiche dei PDF

L’introduzione dei modelli di mappatura non risolve comunque il proble-ma del ciclo passivo dei documenti, in quanto il formato PDF e in ognicaso difficile da manipolare programmaticamente. In definitiva non risultaimmediata l’estrazione programmatica di porzioni di testo, l’estrazione diattributi collegati ad esso, e l’affidabilita del testo estratto. L’introduzionedei modelli di mappatura all’interno di Documentale e quindi vincolata allarisoluzione di questi problemi, in quanto alla base dei modelli di mappaturac’e appunto l’estrazione posizionale.

2.2.1 Estrazione del testo e dei suoi attributi

L’estrazione di testo da un documento PDF puo avvenire oggigiorno (me-diante l’utilizzo di soluzioni gia pronte) in diversi modi, nessuno dei qualipero soddisfa le esigenze progettuali di ASI. E possibile estrarre del testo me-diante selezione manuale, utilizzando software proprietario (Adobe Readerper esempio), ma resta appunto una selezione manuale vincolata all’utilizzodi un’interfaccia grafica. Esistono inoltre librerie sul mercato in grado diestrarre programmaticamente il testo contenuto in una pagina, ottenendotuttavia il solo testo senza nessuno dei suoi attributi (posizione, valore se-mantico, colore, stile).

Di fatto vi sono librerie (alcune di esse gratuite ed a sorgente aperto) ingrado di riconoscere non solo il testo, ma anche tutti gli attributi ad essocollegati. Sono le librerie utilizzate per il rendering (la visualizzazione) deiPDF.

1Quella in cui l’utente associava (sempre manualmente) i dati ad ogni singolodocumento.

8

Page 15: Riconoscimento Posizionale di Testo all'Interno di un PDF

2.2. Problematiche dei PDF

L’utilizzo di queste librerie non e stato preso in considerazione da ASI perdue motivi. Prima di tutto, le operazioni necessarie all’estrazione del testoe dei suoi attributi sono differenti dalle operazioni necessarie al renderingdi un PDF, ragion per cui si sarebbe resa necessaria una costosa e non in-differente operazione di modifica. In secondo luogo, rispetto alla vastita delcodice incluso nelle librerie, la qualita della documentazione allegata (defi-nita anche in termini di commenti nel codice sorgente) si e spesso mostratainsoddisfacente ed in molti casi quasi del tutto assente.

2.2.2 L’assenza di un layout fidato

Un’altra problematica fondamentale nell’estrazione del testo da file PDF el’affidabilita nell’estrazione posizionale. Nell’estrarre programmaticamenteil testo a partire da una data area nella pagina, e una pretesa ragionevolevoler essere certi che il testo estratto sia proprio quello contenuto nell’area.Tale garanzia non esiste. Il grafico sottostante illustra proprio questo pro-blema.

PDF

ProcessiIntermedi DatiDati e layout

Modello dimappatura

PDFPDF

PDF

Figura 2.4: Affidabilita dell’estrazione

Il modello di mappatura viene creato manualmente a partire da un docu-mento acquisito dall’azienda, che ha quindi subito tutti i processi intermedi,e che percio ha un layout—con ogni probabilita—diverso dal layout di par-tenza. Nell’applicare il modello di mappatura creato agli altri documentiottenuti dallo stesso layout iniziale, ci si puo imbattere in incongruenze cheminano l’affidabilita del dato estratto. In altre parole, i processi che subisceil documento dalla sua creazione alla sua acquisizione sono tali da poterperfino ottenere dallo stesso documento iniziale due documenti diversi.

9

Page 16: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 2. Progetto aziendale

Supponendo di partire perfino dagli stessi dati2, il layout del documento(nella creazione del PDF, come pure nella stampa) puo subire variazioniapparentemente minimali eppur sufficienti ad invalidare il modello di map-patura ad esso associato. Le variazioni nella posizione del testo sono tali percui la sola posizione non e piu in grado di garantire l’affidabilita del datoestratto.

2.2.3 L’assenza di una struttura logica

In altre tipologie di documento (definite con linguaggi di markup come XMLo HTML), il testo segue una struttura logica, ossia nel file del documento epossibile trovare informazioni logiche sugli elementi testuali contenuti: tito-li, paragrafi, elenchi puntati, tabelle, immagini. Ognuno di questi elementie associato al suo significato.

HTML PDF<h1> Titolo</h1><table bgcolor=#f3f3f3 border=1 bordercolor=#000000> <tr> <td> <img src="fi.png" alt= "fi (small ligature)" > </td> <td> Testo semplice. <br> <ul> <li> Elemento </li> <li> Altro elemento </li> </ul> </td> </tr></table>

1.000 g72.0000 72.0000 451.2756 697.8898 re f*72.0000 671.7566 151.7275 44.5332 re f*...BT72.0000 736.8495 Td/F1 18.0000 Tf(Titolo) Tj36.0000 0.0000 0.0000 36.0000 75.0000 677.2898 cm/I1 Do116.2500 702.5564 Td/F2 10.0000 Tf(Testo semplice.) Tj144.7490 690.5564 Td( ) Tj156.2500 690.5564 Td(Elemento) Tj144.7490 678.5564 Td( ) Tj156.2500 678.5564 Td(Altro elemento) TjET

TitoloTabellaImmagineElenco puntato

Titolo

Testo sempliceElementoAltro elemento

•fi

Figura 2.5: Differenza tra HTML e PDF

2Di fatto i modelli di mappatura presuppongono di partire solamente dallo stessolayout e non addirittura dagli stessi dati.

10

Page 17: Riconoscimento Posizionale di Testo all'Interno di un PDF

2.2. Problematiche dei PDF

All’interno di un PDF tradizionale3 tuttavia non esiste alcuna strutturalogica. Il testo e organizzato in glifi, ognuno con una propria posizione,dimensione, orientamento, inclinazione e colore. Le tabelle invece sono defi-nite mediante tracciati vettoriali separati dal testo.

Nella figura precedente (2.5) viene illustrata la differenza tra la strutturalogica (come quella posseduta da un documento HTML) e la struttura pret-tamente grafica posseduta da un documento PDF. Nella parte alta dellafigura e visibile un esempio di documento costituito da un titolo e, da unatabella contenente un’immagine e un elenco puntato.

In un documento HTML il testo e contenuto nella struttura logica. Ta-belle, titoli ed elenchi puntati sono prima di tutto informazioni associate altesto e solo successivamente (nel browser) rappresentazioni grafiche.

In un documento PDF invece tali elementi logici non esistono. La tabellae pura rappresentazione grafica, completamente dissociata dal testo, tant’eche la sua descrizione inizia e finisce prima della comparsa del testo. Ognialtro elemento poi e reso dalla combinazione di caratteri, font e grandezzedei font (l’operatore Tf definisce appunto un font da utilizzare e la sua gran-dezza, la scritta “Titolo” in figura 2.5 e solo del testo scritto in grande perun PDF).

Tale mancanza di struttura logica e dovuta alla natura stessa del formatoPDF. Il formato PDF nasce come formato di interscambio per i documenti.Tra i requisiti della sua progettazione era forte la necessita di avere unadefinizione di documento assoluta. Un layout che fosse indipendente dalsoftware e dall’hardware su cui era stato prodotto e su cui veniva visualizza-to. Non era necessario che il documento possedesse una struttura logica, erainvece fondamentale che la copia stampata del documento fosse una fedeleriproduzione del documento digitale.

La soluzione adottata da Adobe fu quella di definire la posizione di ognielemento atomico (linea o glifo) in modo assoluto all’interno del sistema dicoordinate della pagina.

3Il formato PDF prevede l’inserimento di XML all’interno del contenuto per darestruttura logica e maggiore accessibilita ai PDF, lo standard ISO/AWI 14289 (PDF/UA)si occupa proprio di questo. I Tagged PDF tuttavia non sono sufficientemente diffusi daessere presi in considerazione nell’analisi del problema.

11

Page 18: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 2. Progetto aziendale

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 percosa rappresenta a livello logico4. Il fatto che il testo sia individuabile solo inmodo posizionale diventa quindi un serio problema considerata la mancanzadi un layout sicuro (vedi 2.2.2).

2.3 L’estrazione posizionale fidata

L’intenzione di ASI per il mio progetto di stage era proprio quella di trovaree sviluppare una soluzione al problema del ciclo passivo dei documenti, inmodo tale da poterla integrare all’interno di Documentale. Ossia otteneredegli strumenti (una libreria) per un analisi dettagliata del testo contenutoin un PDF, in grado non solo di estrarre il testo da una determinata area(ricavandosi quindi delle posizioni per il testo contenuto), ma capace inoltredi sopperire alla mancanza di affidabilita (dovuta anche all’assenza di unastruttura logica), utilizzando i dati ricavati nella fase di analisi del PDF pergarantire l’esattezza del dato estratto.

Da parte di ASI c’era inoltre la necessita di avere una libreria ben docu-mentata e ben progettata, in modo da essere in futuro facilmente estendibiledall’azienda5.

4Una struttura logica permetterebbe di garantire l’estrazione di un dato in modo certo,basandosi sul significato logico ad esso associato.

5Tra le funzionalita che ASI vorrebbe integrare in Documentale c’e anche un ri-conoscimento dei loghi aziendali nei documenti; e quindi interessata anche al futuroriconoscimento di immagini in un PDF.

12

Page 19: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 3Attivita di stage

In questo capitolo viene presentato un resoconto dell’attivita di stage, ana-lizzando i punti di forza e le criticita di ogni singola fase.

3.1 Studio del dominio applicativo

Nella prima fase dell’attivita di stage ho dovuto acquisire tutta una serie diconoscenze riguardanti .NET, C♯, WPF e Visual Studio. Le similitudini ela somiglianza tra C♯ e Java, come pure tra C♯ e C++, mi hanno permessodi familiarizzare fin da subito con questo nuovo linguaggio. Le ore di questafase sono state quindi dedicate, per la maggior parte, allo studio delle diffe-renze e dei miglioramenti1 offerti da C♯ rispetto ai suoi diretti concorrenti.

Obiettivo di questa fase era inoltre l’assimilazione delle regole riguardan-ti lo standard di codifica aziendale per C♯[4]. L’utilizzo di uno standard ela sua conoscenza influenza positivamente la mantenibilita del codice e deidocumenti legati alla progettazione, promuovendo dei principi di design giaaffermati, e obbligando gli sviluppatori a mantenere una certa unita nel co-dice prodotto. L’utilizzo di uno standard di codifica migliora la produttivita,definendo delle linee guida rigorose nella nomenclatura, nella documentazio-ne e nell’utilizzo di determinati costrutti sintattici.

1C♯ introduce il concetto di “proprieta” di una classe. Le proprieta sono membri diuna classe che offrono funzionalita di lettura, scrittura, controllo e calcolo per i campidati privati di una classe. Una proprieta puo essere utilizzata come un campo dati, maoffre tutta la flessibilita di un metodo. C♯ inoltre permette di definire commenti XMLsecondo una struttura ben precisa. Tali commenti, non solo possono essere utilizzati nellagenerazione della documentazione (come avviene per il comando javadoc in Java), maanche da IntelliSense all’interno di Visual Studio per fornire un aiuto contestuale in fasedi codifica.

13

Page 20: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 3. Attivita di stage

In questo modo lo sviluppatore non indugia nelle scelte progettuali (avendodirettive precise su come comportarsi) e non perde tempo nel capire il codicealtrui (in quanto tutto il codice aziendale segue le stesse regole2). L’adozionedi uno standard di codifica permette in aggiunta di evitare alcune tipologiedi errori e bug.

Lo standard di codifica adottato da ASI per C♯[4] risale alla definizionedi C♯ 1.0 da parte di Microsoft. Dennis Doomen che assieme a Vic Har-tog ha definito lo standard di codifica adottato da ASI, nel marzo 2009, hapubblicato una versione aggiornata e rivista dello standard[5], prendendo inconsiderazione anche le funzionalita aggiuntive introdotte fino a C♯ 3.0. Perquanto dovessi attenermi al vecchio standard, ho ritenuto opportuno utiliz-zare alcune delle regole del nuovo laddove nello standard aziendale venivalasciata liberta al programmatore.

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 ointeressati al progetto. Gli incontri non solo hanno permesso di individuarei requisiti del progetto, ma anche di evidenziarne le criticita dello stesso. Inparticolare fin dall’inizio erano state individuate e analizzate in dettaglio leproblematiche riguardanti la ricerca posizionale, date dalla combinazione diun 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 e inoltrestata utile a fornire una visione d’insieme del problema, mediante diagram-mi Use Case e diagrammi delle componenti (vedi figura 3.1), catalogando irequisiti secondo diversi livelli di priorita a seconda delle necessita espressedall’azienda.

Nel diagramma sottostante (figura 3.1) sono rappresentate le componentidi cui e costituita l’applicazione: MapManager, il quale si occupa della crea-zione e della modifica dei modelli di mappatura (vedi capitolo precedente2.1.1); MapFinder, che si occupa d’identificare il modello di mappatura dautilizzare a partire da un dato PDF; e infine PdfAnalyzer che si occupa diestrarre non solo i dati da un PDF, ma anche tutte le informazioni necessariea garantire l’esattezza del dato.

2L’introduzione di uno standard di codifica per C♯ all’interno di ASI non e stataimmediata e, malgrado gli sforzi, parte del codice non aderisce tuttora alle nuove regoleaziendali.

14

Page 21: Riconoscimento Posizionale di Testo all'Interno di un PDF

3.2. Analisi

Lo studio del diagramma in figura 3.1 e stato fondamentale nella cataloga-zione dei requisiti, il diagramma ha permesso d’identificare infatti le compo-nenti prioritarie nell’applicazione, in modo da incentrare la fase successivasull’individuazione di una libreria di supporto per l’analisi dei PDF e sullaprogettazione della componente PdfAnalyzer.

<< component, library>>

Libreria di supporto

<< component>>

Visualizzatore

cd: Visione di insieme

Applicazione

<< component>>

MapManager

<< component>>

PdfAnalyzer

<< component>>

GUI

<< component>>

MapFinder

Figura 3.1: Diagramma generale delle componenti

15

Page 22: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 3. Attivita di stage

Solo al termine della fase di analisi, quando gia stava iniziando la fase di pro-gettazione, e stato prodotto un documento contenente l’elenco dei requisitie i dettagli della fase appena conclusasi (studio delle criticita e definizionedelle priorita). Tale documento e stato in parte aggiornato e modificatodurante la prima meta della fase di progettazione.

3.3 Progettazione

La fase di progettazione e stata indubbiamente la fase principale all’internodel mio progetto di stage. Di seguito vengono presentate le varie attivitasu cui si e articolata. Ognuna delle seguenti attivita e stata documentataall’interno di un documento di specifica tecnica del prodotto, annotando:scelte progettuali, risultati ottenuti, formalizzazioni UML, possibili sviluppifuturi e limiti del prodotto. La specifica tecnica del prodotto e stata succes-sivamente modificata in conseguenza alla campagna di test effettuata e allemodifiche apportate al codice.

3.3.1 Individuazione di una libreria

La parte iniziale della fase di progettazione e stata incentrata nell’individua-zione di una libreria di supporto all’analisi dei PDF. L’utilizzo di una libreriaall’interno del progetto avrebbe infatti permesso di risparmiare ore preziosee usufruire di una porzione di codice gia pronta, testata e documentata.

Nella fase precedente (analisi) era stato individuato il desiderio da partedi ASI di utilizzare una libreria per l’analisi dei PDF, in modo da poterpoi concentrare il progetto di stage sul completamento della componentePdfAnalyzer e sullo sviluppo delle componenti MapFinder e MapManager

(vedi figura 3.1).

16

Page 23: Riconoscimento Posizionale di Testo all'Interno di un PDF

3.3. Progettazione

La libreria da utilizzare doveva essere scelta in base ai seguenti criteri (inordine di priorita).

Licenza Fondamentale era la possibilita da parte di ASIdi utilizzare tale libreria all’interno di un softwarecommerciale come Documentale.

Funzionalita Quanto la libreria poteva essere utile al progetto3, os-sia che funzionalita offriva in termini di estrazione didati e contenuti a partire da un PDF, a quale livello didettaglio riusciva ad arrivare nell’estrazione dei dati4.

Utilizzo di C♯ Vincolo fondamentale era la disponibilita della libreriaper il linguaggio C♯ (anche sotto forma di porting)5.Nel caso non fosse possibile era comunque accettabi-le una libreria utilizzabile all’interno del framework.NET.

Costo Non vincolante ma comunque importante era il costodella libreria. Era sicuramente preferibile da parte del-l’azienda l’utilizzo di una libreria gratuita, o con costomoderato.

Documentazione Il livello di qualita della documentazione fornita perla libreria, descrizione delle API ed esempi di codice.

Affidabilita Quanto la libreria poteva essere ritenuta affidabile6.

3In questo tipo di valutazione era importante considerare se la libreria in questioneera nata per risolvere questo tipo di problema, o se, nel risolvere un’altra tipologia diproblema, si ritrovava ad offrire funzionalita utili al progetto di stage.

4In particolare era importante che la libreria permettesse di ottenere la posizione deltesto e il maggior numero di dati correlati ad esso, questo per risolvere le problematichepresentate nel capitolo precedente, vedi 2.3.

5Di fatto C♯ puo far uso di librerie scritte anche in altri linguaggi, ma restava comunqueun requisito preferenziale l’identificazione di una libreria completamente scritta in C♯, inquanto si sarebbe potuta rendere necessaria una modifica alla libreria da parte di ASI.

6Nel valutare l’affidabilita di una libreria sono stati considerati: il team di sviluppo(da quanti membri era composto, quali competenze avevano e se erano appoggiati dauna societa o meno) e il progetto (da quanti anni era aperto, con che frequenza venivaaggiornato e se attualmente era attivo o meno).

17

Page 24: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 3. Attivita di stage

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 affidabilita, soffermandomi in particolare su iTextSharp

e su PdfSharp.

La libreria iTextSharp e un porting C♯ di una libreria Java (iText).iTextSharp e gratuita, a sorgente aperto, e puo essere utilizzata all’inter-no di applicazioni commerciali. iTextSharp—o meglio iText—nasce comelibreria per la creazione programmatica di PDF; offre tuttavia una scarsadocumentazione7 per le funzionalita di estrazione dati da essa offerte.

La libreria PdfSharp e una libreria gratuita, a sorgente aperto, e puo es-sere anch’essa utilizzata all’interno di prodotti commerciali. PdfSharp esupportata da empira Software GmbH e nasce come libreria per la crea-zione programmatica di PDF per il framework .NET. PdfSharp offre unabuona documentazione, oltre al sito infatti sono disponibili numerosi esempie un’ottima e completa descrizione delle API in formato CHM[2].

La qualita della documentazione e stata sicuramente il maggior fattore deci-sionale che mi ha portato in ultima analisi all’utilizzo di PdfSharp all’internodel progetto di stage8.

PdfSharp pur essendo pensata principalmente per la creazione di PDF offretuttavia la possibilita di analizzare il contenuto interno dei PDF. Come epossibile vedere in figura 3.2 un file PDF e sequenzialmente diviso in quat-tro parti: l’Header, contenente le informazioni che identificano la versionedel formato PDF utilizzata; il File Trailer, che contiene le informazio-ni principali sul documento (autore, date di creazione e modifica); la Cross

Reference Table, che permette di avere un accesso diretto (random access)a tutti gli oggetti contenuti nel corpo del PDF; e infine il Body, che contienetutta la struttura interna del PDF.

7La documentazione riguardante le API di iTextSharp e assente. Sul sito si rimandaall’utilizzo della documentazione di iText prodotta con Javadoc, senza fornire nessunaindicazione sulle diversita presenti tra le due librerie. iTextSharp essendo basata su C♯, faun largo uso delle proprieta laddove iText utilizza metodi “set” e “get”. Inoltre, differiscenella nomenclatura (di metodi, classi, interfacce, proprieta e campi dati), seguendo quellastandard utilizzata da Microsoft per C♯.

8A tal proposito l’azienda si e raccomandata di strutturare e documentare il progettodi stage in modo che in un prossimo futuro sia possibile utilizzare un’altra libreria diappoggio al posto di PdfSharp. ASI infatti ha gia fatto uso di iTextSharp per altre sueapplicazioni, ed ha percio avviato uno studio parallelo al mio, volto a valutare una possibilesostituzione di PdfSharp con iTextSharp.

18

Page 25: Riconoscimento Posizionale di Testo all'Interno di un PDF

3.3. Progettazione

Tale struttura puo essere notevolmente complicata in conseguenza a succes-sive modifiche incrementali nel documento. PdfSharp permette di astrarrecompletamente da questa iniziale struttura interna (sia essa semplice o com-plessa), permettendo di accedere direttamente alle pagine del PDF, al lorocontenuto, agli encoding, e ai font utilizzati. PdfSharp tuttavia non essendostato pensato per l’analisi, ma per la creazione di PDF, non offre strumentiche si spingano oltre la decifrazione dello stream del contenuto.

PDFHeader

Body

Cross Reference Table

File TrailerStream

Pages Pages

PagePage

Fonts

Content

Catalog

Body

FontFont

Page

Pages

Encoding Encoding

Figura 3.2: Struttura interna di un file PDF

3.3.2 L’analisi dello stream

In un file PDF esistono diversi tipi di stream. Uno stream rappresentaun’unita atomica all’interno della struttura di un PDF, un tipo di datoprimitivo (come una stringa, un booleano o un numero). Uno stream esempre accompagnato da un filtro di codifica, in quanto (all’interno di unPDF) rappresenta una sequenza di byte compressa. PdfSharp permette diottenerne la versione decompressa, come sequenza continua di byte.

19

Page 26: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 3. Attivita di stage

Uno stream di contenuto (da qui in poi solo stream) va interpretato comeuna sequenza di operatori e parametri (un esempio e visibile nella partedestra della figura 2.5). Lo studio dello stream e una parte fondamentalenell’analisi del testo di un PDF. Posizionamenti, font, colori, e lo stesso testosono contenuti infatti al suo interno.

Non sono presenti in circolazione librerie che analizzino il contenuto del-lo stream e permettano di estrarre informazioni sulla posizione o su altriattributi del testo contenuto9. Esistono progetti in cui viene indicato comeinterpretare alcuni dei comandi (costruendosi un proprio parser che analizzii singoli byte), ma sono ben distanti dal poter essere utilizzati come base inun’applicazione aziendale, generalmente infatti si limitano a riconoscere unadecina di operatori, senza dare indicazioni su quali (e quanti) altri operatorie possibile incontrare in uno stream.

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 formatoPDF sia un formato chiuso. La maggior parte degli sviluppatori sembradomandarsi come sia possibile sviluppare software in una situazione del ge-nere e perche Adobe non fornisca un chiaro elenco degli operatori contenutiin uno stream. La specifica del formato PDF[1] e in realta consultabile escaricabile—non sorprendentemente in formato PDF—dal sito dell’Adobe.

3.3.3 La definizione della grammatica

L’utilizzo della specifica del formato PDF offre un elenco completo deglioperatori utilizzabili in uno stream, definendo per ognuno il funzionamen-to e i parametri utilizzati. Da un lato quindi, la specifica[1] definisce inmodo chiaro come e quando possono essere usati tutti gli operatori di unostream, dall’altro rende improponibile lo sviluppo di un parser costruito dazero. Conoscendo le problematiche legate alla realizzazione di un parser10,e avendo gia sperimentato i vantaggi di un compiler-compiler11, ho ritenutoopportuno utilizzare ANTLRWorks nella realizzazione di un lexer e di unparser per la grammatica definita nella specifica del formato PDF.

9Esistono librerie in grado di farlo, come accennavo nel capitolo precedente (vedi2.2.1), nello stesso capitolo tuttavia viene spiegato perche tali librerie non sono stateprese in considerazione all’interno del mio progetto di stage.

10Le problematiche riguardanti la realizzazione di un parser, sono state almeno in parteaffrontate nello sviluppo del progetto per il corso di “Linguaggi di Programmazione”.

11Conoscenze acquisite all’interno del progetto del corso di “Ingegneria del Software”.

20

Page 27: Riconoscimento Posizionale di Testo all'Interno di un PDF

3.3. Progettazione

stream WS generalGraphicStateOperator

specialGraphicStateOperator

pathConstructionOperator

pathPaintingOperator

clippingPathOperator

textObject

type3FontOperator

colorOperator

shadingPatternsOperator

inlineImageOperator

markedContentOperator

markedContentSequence

COMMENT WS EOF

Figura 3.3: Diagramma della struttura principale della grammatica

ANTLRWorks permette di definire una grammatica libera da contesto e digenerare in modo automatizzato un lexer e un parser per la grammaticadata (risparmiando tempo sia nella fase di codifica che in quella di verificae validazione). ANTLRWorks permette inoltre di inserire del codice C♯12

nella definizione della grammatica in modo da realizzare quello che vienecomunemente definito un “traduttore”, ossia un programma che converteda un certo formato di dati a un altro.

In figura 3.3 e possibile vedere la struttura principale di uno stream. Unostream e composto da una sequenza di operatori separati da spazi bianchi13,ognuno dei quali appartiene ad una delle categorie visibili nella colonna cen-trale in figura 3.3.

12ANTLRWorks permette di inserire all’interno della grammatica blocchi di codicescritti nel linguaggio di destinazione della grammatica, ossia nel linguaggio in cui verrannopoi prodotti il lexer e il parser.

13La specifica dei PDF[1] imporrebbe che gli operatori fossero ognuno su una lineadiversa del codice, ossia che fossero separati da caratteri come: “\n” (Line Feed), “\r”(Carriage Return), “\r\n”, “\f” (Form Feed), “\u0085” (Next Line), “\u2028” (LineSeparator), “\u2029” (Paragraph Separator). Adobe tuttavia garantisce il funzionamentoanche di quei PDF in cui piu operatori siano stati inseriti nella stessa linea.

21

Page 28: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 3. Attivita di stage

Per l’analisi del testo e dei suoi attributi sono necessari e sufficienti glispecialGraphicStateOperator e i textObject14. In particolare il primogruppo di operatori viene utilizzato per le operazioni sulle matrici posi-zionali15, push e pop dello stack delle matrici e modifica della matrice ditrasformazione corrente (CTM). Il secondo gruppo invece rappresenta glioggetti di testo (text objects).

textObject

WS

textPositioningOperator

WS

BT

ET

colorOperator

COMMENT

textShowingOperator

textStateOperator

Figura 3.4: Diagramma della struttura di un oggetto di testo.

Ogni text object puo contenere una sequenza qualsiasi di operatori purchesiano: operatori di stato, operatori di posizionamento, operatori di stampaoppure operatori di colore. Esclusi gli operatori di colore (per i quali nonc’e un’immediata necessita, considerando che i documenti contabili di un’a-zienda sono perlopiu monocromatici), gli altri tre gruppi di operatori sonoriconosciuti in dettaglio all’interno della grammatica.

3.3.4 Estrazione posizionale di testo

La progettazione della grammatica e stata affiancata alla progettazione delleclassi che sarebbero andate ad accogliere i dati estratti una volta effettuatal’analisi.

14Gli altri gruppi di operatori sono comunque riconosciuti nella grammatica, manessuno di essi viene realmente utilizzato nell’estrazione di dati dallo stream.

15Il posizionamento del testo all’interno di un file PDF e ottenuto mediante manipo-lazioni di matrici 3 x 3. Per posizionare il testo in una pagina vengono utilizzate cinquematrici: 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) einfine una matrice di rendering temporanea, utilizzata per calcolare la posizione di ognicarattere nella pagina.

22

Page 29: Riconoscimento Posizionale di Testo all'Interno di un PDF

3.3. Progettazione

Plain.File.Extraction e il package progettato per l’analisi del PDF, ilparsing degli stream contenuti in esso, l’estrazione del testo e dei suoi at-tributi. Plain.File.Extraction concretizza la componente PdfAnalyzer

visibile in figura 3.1, offrendo tutte le funzionalita necessarie all’analisi deiPDF e all’estrazione posizionale di testo.

Come e possibile vedere nella figura 3.5, Plain.File.Extraction e costi-tuito da una serie di classi atte ad immagazzinare (e rendere disponibili) idati riguardanti una pagina, il testo contenuto in essa, e i font utilizzati.

cd: Plain.File.Extraction

Plain.File.Extraction

PdfAnalyzer

PdfPage

PdfFont

PdfTextStreamParser

PdfText

PdfTextStreamLexer

PdfChar

Figura 3.5: Diagramma delle classi in Plain.File.Extraction

Le classi principali del package sono PdfAnalyzer e PdfPage (evidenziate inverde nella figura), queste due classi costituiscono infatti l’interfaccia ester-na di Plain.File.Extraction.

23

Page 30: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 3. Attivita di stage

Il lexer e il parser sono classi ottenute principalmente16 dalla definizione del-la grammatica, il resto delle classi invece (ossia PdfFont, PdfText e PdfCharsono strutture utilizzate solo internamente al package.

3.3.5 PdfAnalyzer

PdfAnalyzer e 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 e quello di otteneredegli oggetti PdfPage. Solo PdfAnalyzer puo costruire correttamente un’i-stanza di PdfPage a partire da un dato PDF.

PdfAnalyzer offre all’esterno del package le seguenti funzionalita:

• OpenDocument(string path), apre un documento, di fatto memoriz-za il path del documento, la sua apertura avviene solo nel momentoin cui viene richiesta una pagina.

• GetPage(int number), ritorna un oggetto PdfPage corrispondente al-la pagina indicata. PdfAnalyzer ricava le dimensioni della pagina, re-cupera i font e gli encoding utilizzati (costruendo degli oggetti PdfFontassociati alla pagina), e infine utilizza il lexer e il parser della gramma-tica per ottenere il testo contenuto nella pagina. GetPage implementail design pattern facade, fornendo un unico metodo semplice a frontedi una complicata serie di invocazioni ed istruzioni.

Si puo dire che PdfAnalyzer implementi anche il design pattern Front

Controller, sebbene generalmente utilizzato nelle applicazioni web, taledesign pattern fornisce un punto d’entrata centralizzato, attraverso il qualetutte le invocazioni devono passare. L’unico modo di ottenere una pagina einfatti quello di passare dall’istanza di PdfAnalyzer.

PdfAnalyzer utilizza un efficiente sistema di cache interne, grazie al qua-le e possibile migliorare i tempi di risposta per una pagina gia analizzata(fintantoche l’applicazione non viene chiusa). Ogni qual volta infatti vie-ne richiesta una pagina, PdfAnalyzer verifica se la pagina richiesta (per ildocumento correntemente aperto) e gia stata analizzata, e solo in caso diinsuccesso analizza la pagina salvandola poi nella cache interna.

16PdfTextStreamParser (oltre ai metodi e campi dati generati in modo automaticoa partire dalla grammatica) possiede anche una serie di metodi e strutture di supportoprogettate apposta per poter manipolare ed ottenere dei dati dagli stream contenuti in unPDF.

24

Page 31: Riconoscimento Posizionale di Testo all'Interno di un PDF

3.3. Progettazione

3.3.6 PdfFont, PdfChar e PdfText

PdfFont Istanze della classe PdfFont vengono associate alla classe PdfPagedal PdfAnalyzer. Un PdfFont racchiude informazioni riguardanti il nomedel font utilizzato, l’encoding e le dimensioni dei glifi del font. Nel calcolarela posizione di ogni carattere, bisogna infatti tener conto della larghezza delglifo associato al carattere precedente17. L’encoding contenuto in un fontserve da traduttore per i caratteri di una stringa. A seconda dell’encodingutilizzato il carattere con valore numerico pari a 174 puo corrispondere infat-ti al carattere “Æ”, oppure al carattere “fi” (come unico carattere), oppureal carattere “o”18.

PdfChar Un PdfChar rappresenta un carattere posizionale all’interno diun PDF, e costituito infatti da una coppia di coordinate cartesiane e da uncarattere di testo (char).

PdfText PdfText rappresenta una stringa e corrisponde all’invocazione diun’operatore di stampa all’interno dello stream. Indicativamente all’internodi una pagina e necessario invocare l’operatore di stampa ogni qual voltaviene modificato un attributo del testo19.

Volendo, un operatore di stampa puo 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 cambiauno 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 dispostosu un’unica riga e che utilizza un set comune di attributi.

3.3.7 Lexer e Parser

PdfTextStreamLexer Questa classe rappresenta il lexer della gramma-tica degli stream. PdfTextStreamLexer e generato in modo automatizzatoa partire dalla grammatica e non vi e stato nessun tipo di intervento suquesta classe.

17Questo discorso viene gestito in maniera piu efficiente per i font “monospace”, queifont cioe che mantengono la stessa distanza per ogni glifo.

18Addirittura e possibile definire un array di sostituzioni completamente arbitrario, nelqual caso il carattere con valore numerico intero pari a 174 puo rappresentare un qualsiasicarattere Unicode.

19Sono attributi del testo: il font, la grandezza del testo (size), la spaziatura tra lelettere (char spacing), la spaziatura tra le parole (word spacing), la spaziatura tra unariga e l’altra (text leading), l’offset verticale di un carattere (text rise) e il colore.

25

Page 32: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 3. Attivita di stage

PdfTextStreamParser PdfTextStreamParser rappresenta il parser perla grammatica degli stream. Pur essendo questa classe generata a partiredalla grammatica, e stata necessaria una buona progettazione in quanto sioccupa di tradurre il contenuto di uno stream in una lista di PdfText. La solagrammatica genera infatti un parser in grado di produrre un AST (AbstractSyntax Tree) da uno stream. E necessario percio modificare la grammaticain modo che, utilizzando una serie di strutture di supporto (perlopiu matri-ci), riesca a produrre l’output desiderato.

3.3.8 PdfPage

PdfPage e l’altra classe, oltre a PdfAnalyzer, disponibile all’esterno del pac-kage Plain.File.Extraction. Un’istanza di PdfPage contiene una lista diPdfFont e una lista di PdfText. PdfPage permette di analizzare il contenu-to estratto da una pagina, ottenendo non solo il testo posizionale contenutonella pagina, ma anche tutti gli attributi ad esso connessi.

3.3.9 Affidabilita del dato estratto

Il problema dell’affidabilita nell’estrazione dei dati come descritto nel capi-tolo precedente (vedi 2.2.2 e 2.2.3) viene quindi risolto dall’utilizzo dei datiaggiuntivi ricavati da PdfPage e PdfAnalyzer.

Fattura ATabella contenente i vari elementi della fattura.

Posizione iniziale del dato (x,y).Posizione finale del dato (x,y)

Totale: 198.509,08 €

Modello di mappatura

Posizione del primo carattere.Utilizza un font sans, grande 10.È un numero decimale positivo.

Preceduto dalla stringa "Totale:".

È seguita dalla stringa "€

È posizionato sotto una linea.

1.0000 gBT74.2500 704.5730 Td/F2 10.0000 Tf174.7979 677.5730 Td(Totale:) Tj208.1475 677.5730 Td/F1 10.0000 Tf(198.509,08) Tj260.9746 677.5730 Td/F2 10.0000 Tf( ) TjET74.2500 702.4538 201.7822 11.1719 re

12

3

45

7

6

8

".€

Figura 3.6: Come garantire l’esattezza del dato estratto

26

Page 33: Riconoscimento Posizionale di Testo all'Interno di un PDF

3.3. Progettazione

Durante la definizione del modello di mappatura l’utente fornisce le coor-dinate dell’area in cui e contenuto il dato da estrarre, mentre l’analisi delPDF da parte del programma recupera (da PdfPage) tutta una serie di datisupplementari (tra cui gli attributi del testo) utili a garantire l’esattezza deldato estratto. Come e possibile vedere in figura 3.6 il programma e in gradodi ricavare, mediante analisi, le informazioni 3, 4, 5, 6, 7 e 8, che vannoad aggiungersi alle informazioni 1 e 2 fornite dall’utente nella definizionedell’area in cui va cercato il dato.

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 programmaquali degli elementi trovati fanno parte del layout originario, e quali invecesono errori dovuti ai processi intermedi. Questa fase della definizione di unmodello di mappatura e fondamentale, in quanto, maggiore e l’attenzioneposta dall’utente nel verificare i dati proposti dal programma, maggiore saral’affidabilita dell’analisi automatizzata del programma.

In quest’ottica gli elementi confermati rappresentano precisamente l’affida-bilita del dato estratto. Testando il dato in base agli elementi trovati epossibile definire infatti un valore di affidabilita in base al numero dei testsuperati da quel dato. In figura 3.7 e possibile vedere come i dati ottenu-ti dal programma e verificati dall’utente riescano a garantire l’esattezza (omeno) del dato estratto.

Fattura B

Totale: 8919,85 €

1 2 3 4 5 76 8

62%

Fattura A

Totale: 198.509,08 €

1 2 3 4 5 76 8

100%

Fattura CTabella in cui sono contenuti dei numeri, per esempio:

Totale: 5189,82 €

Spese di cancelleria 8,09 €

1 2 3 4 5 76 8

37%

Tabella differente dalla tabella precedente.

Affidabilità

Tabella contenente i vari elementi della fattura.

Affidabilità

Affidabilità

Figura 3.7: Misura d’affidabilita per il dato estratto

27

Page 34: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 3. Attivita di stage

Maggiore il numero dei dati verificati, maggiore sara la precisione nella mi-sura d’affidabilita per il dato da estrarre. Sarebbe inoltre possibile definireun peso diverso per ogni test. Per esempio in figura 3.7 sarebbe plausibi-le dare piu importanza al test numero 3 (L’elemento e preceduto dalla

stringa "Totale"), in quanto il superamento del test numero 3 negli esem-pi di fattura proposti garantisce maggiormente l’esattezza del dato rispettoagli altri test.

In base ai dati raccolti (e alle impostazioni dell’utente) l’applicazione puodecidere inoltre come comportarsi durante l’estrazione automatizzata deidati. In caso di fallimento nell’estrazione di un dato sarebbe possibile in-fatti ignorare i test 1 e 2 (ignorare quindi la posizione del dato una voltaconstatato il fallimento posizionale) e utilizzare solo gli altri test per l’indi-viduazione del dato (avviando quindi una ricerca non-posizionale).

3.3.10 Limiti dell’applicazione

Per quanto il package Plain.File.Extraction offra una solida base perla risoluzione del problema del ciclo passivo dei documenti, possiede tut-tavia dei limiti. La liberta nella definizione di un file PDF (in particolarela liberta offerta nella definizione degli encoding e degli stream) limitanol’effettivo utilizzo di Plain.File.Extraction. Per quanto la grammaticariconosca la quasi totalita degli operatori PDF, esistono tuttavia diverse va-rianti degli operatori di posizionamento e di stampa non ancora supportate.

Plain.File.Extraction supporta i quattro encoding standard in un PDF[1]:lo StandardEncoding, il MacRomanEncoding, il WinAnsiEncoding e infine ilPDF-DocEncoding; supporta inoltre la definizione di un array di differenzeper la modifica in dettaglio dell’encoding. Per quanto la presenza di un’arraydi differenze garantisca di fatto piena liberta nella definizione dell’encoding,alcuni generatori di PDF utilizzano degli oggetti CMap (definizioni assoluta-mente arbitrarie) come encoding per il contenuto delle pagine. Tale tipologiadi definizione non e ancora riconosciuta dal programma.

28

Page 35: Riconoscimento Posizionale di Testo all'Interno di un PDF

3.4. Codifica

Plain.File.Extraction non e in grado poi di calcolare posizioni esatte peri “14 font standard”20, in quanto le informazioni riguardanti questi font nonvengono incluse nel file PDF21, ma vanno ricercate all’interno dei font delsistema operativo.

PdfSharp inoltre non supporta alcuni PDF dalla versione 1.6 della speci-fica. Non e ancora in grado infatti di leggere il nuovo tipo di strutturainterna (iRef) adottata da tali PDF22.

3.4 Codifica

L’implementazione delle classi di Plain.File.Extraction non e stata unafase particolarmente onerosa all’interno dell’attivita di stage. Gran parte delcodice e stato sviluppato velocemente a partire dal diagramma delle classie dai diagrammi di attivita prodotti in fase di progettazione. Vi sono statealcune modifiche alle classi in conseguenza all’individuazione di bug nellafase di test, ma in linea di massima nella fase di codifica mi sono limitato aseguire quanto progettato nella fase precedente.

Tra le attivita svolte nella fase di codifica c’e stata anche la modifica dellagrammatica. ANTLRWorks permette infatti di definire le proprie operazionidi traduzione direttamente in linea, affiancandole alle regole della gramma-tica23. In questo modo, sono state modificate tutte le regole necessarieall’estrazione del testo e dei suoi attributi.

20Si tratta di quattordici font riconosciuti da Adobe come standard comune ad ognisistema operativo, per i quali quindi non vengono incluse le definizioni e le grandezze deiglifi all’interno dei file PDF. In particolare i font sono: “Times” (versione 3) nei formatinormale, grassetto, corsivo e grassetto-corsivo; Helvetica (vesrione 3) nei formati normale,grassetto, corsivo e grassetto-corsivo; Courier nei formati normale, grassetto, corsivo egrassetto-corsivo; Symbol; e Zapf Dingbats. In alternativa a “Times” e possibile usareanche “Times New Roman PS MT” (versione 4.x), mentre in alternativa ad “Helvetica”e possibile anche utilizzare “Arial MT” (versione 4.x).

21Dalla versione 1.5 dello standard PDF l’esclusione delle definizioni dei “14 font stan-dard” e deprecata. Ogni font utilizzato in un PDF deve essere incluso all’interno del PDFstesso. Tuttavia per retrocompatibilita sono considerati PDF validi anche i PDF che nonincludono le definizioni per questi font.

22PdfSharp permette comunque di analizzare tutti i PDF con versione superiore alla1.5 che siano stati prodotti mantenendo la compatibilita con la versione 1.5 della specifica.

23Grazie a questa funzionalita e possibile per esempio che il parser, una volta incon-trato un operatore di posizionamento, esegua le istruzioni fornite in modo da ottenereinformazioni sulla posizione raggiunta in quel punto dello stream.

29

Page 36: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 3. Attivita di stage

Al termine dell’attivita di codifica e stato prodotto un documento di descri-zione delle API di Plain.File.Extraction, generato utilizzando Sandcastlea partire dai commenti XML inseriti nel codice.

3.5 Verifica e validazione

Nella fase di verifica e validazione mi sono preoccupato di controllare se tut-ti i requisiti individuati erano stati soddisfatti. Sono stati inoltre utilizzatiuna serie di test case (realizzati in fase di progettazione) all’interno di AN-TLRWorks per verificare il funzionamento della grammatica. Si e trattatotuttavia di un test manuale nel quale venivano lanciati in sequenza esempidi stream all’interno dell’interprete PDF, confrontando il risultato ottenutocon l’output atteso.

Le classi di Plain.File.Extraction come pure le traduzioni effettuate dalparser sono state inizialmente testate utilizzando degli stub e dei driver.Una volta integrate fra loro le varie classi, il package e stato testato median-te l’utilizzo di una classe driver. Tale classe a partire da alcuni PDF cercavadi ottenere il testo contenuto in diverse aree della pagina e gli attributi adesso associati. Tuttavia questa metodologia di test si e rivelata inefficientea causa del tempo necessario alla progettazione di nuovi test case (il tempoimpiegato ad individuare manualmente le coordinate delle aree da cui estrar-re i dati). Non appena infatti e stato possibile integrare anche un’interfacciagrafica minimale24 ho potuto eseguire un numero maggiore di test anche senon rigorosi e precisi come quelli effettuati automaticamente.

24La descrizione dell’utilizzo dell’interfaccia grafica minimale e 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 e contenutatuttavia nella specifica tecnica e nella descrizione delle API. Il manuale utente descriveinvece l’utilizzo della GUI minimale in cui e stato integrato Plain.File.Extraction.

30

Page 37: Riconoscimento Posizionale di Testo all'Interno di un PDF

3.6. Preventivo e consuntivo

3.6 Preventivo e consuntivo

Nel diagramma in figura 3.8 e visibile la distribuzione delle attivita all’in-terno di ogni fase (numerate dall’uno al sei).

Studio del dominio

AnalisiProgettazione

Codifica

Verifica e validazione

Documentazione

1Studio deldominio

70

60

50

40

30

20

10

02

Analisi3

Progettazione4

Codifica 5

Verifica evalidazione

6Documentazione

Figura 3.8: Dettaglio delle fasi

Il modello di ciclo di vita seguito all’interno dello stage e stato il modelloevolutivo. Tale modello sarebbe normalmente basato su una forte prototi-pazione25. Tuttavia non vi e stato nessuno sviluppo di prototipi intermedi,l’attivita di codifica e cominciata a meta dello stage. Vi sono stati inve-ce ripetuti confronti con l’azienda nelle fasi di analisi e progettazione, chehanno portato a modificare i requisiti iniziali individuati per il prodotto.Il protrarsi dell’attivita di codifica e dell’attivita di progettazione fin quasial termine dello stage e dovuto all’introduzione (in parallelo) dell’attivitadi testing e dell’attivita documentativa all’interno delle fasi tre e quattro(figura 3.8).

L’attivita di verifica e validazione e stata portata avanti fin dall’inizio, questoha permesso di ridurre—a mio avviso—le ore dedicate alla codifica (corret-tiva) all’interno della fase cinque (figura 3.8).

25Il modello di ciclo di vita—detto evolutivo—si basa sulla rapida realizzazione di unaversione semplificata del prodotto, con la quale sperimentare ed esplorare nuovi requisitie funzionalita da aggiungere allo stesso. La verifica e il testing del prototipo possonoinfatti portare all’aggiunta o alla rimozione di requisiti costringendo di conseguenza losviluppatore a riaffrontare le fasi di: analisi, progettazione, sviluppo e test.

31

Page 38: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 3. Attivita di stage

Un discorso analogo puo essere fatto per l’attivita di documentazione. L’at-tivita documentativa si e affiancata fin dall’inizio alle altre attivita, in parti-colare nel grafico in figura 3.8 e possibile vedere come l’attivita di documen-tazione abbia un’andamento simile a quello dell’attivita progettuale. L’in-serimento dell’attivita documentativa all’interno delle altre fasi ha permessodi costruire la documentazione del prodotto mentre esso veniva progettato,evitando di trovarsi a scrivere la documentazione solo a prodotto finito26.

Nel grafico in figura 3.9 e possibile vedere la differenza tra le ore preven-tivate per ogni attivita e le ore effettivamente dedicate ad ognuna di esse.Nell’ottenere il grafico sono state considerate per ogni attivita (analisi, pro-gettazione, codifica, eccetera) le ore dedicate all’interno di ogni fase.

Consuntivo Preventivo

Studio deldominio

70

60

50

40

30

20

10

0

Analisi Progettazione Codifica Verifica evalidazione

Documentazione

Figura 3.9: Preventivo e consuntivo a confronto

Nel grafico, le ore effettive per l’attivita di studio del dominio sono inferiorialle ore preventivate, questo perche lo studio di C♯, .NET e WPF non e statoparticolarmente oneroso, inoltre parte dello studio della specifica PDF[1] estato conteggiato all’interno delle ore di progettazione.

26Documentare il prodotto mentre viene progettato non significa avere, per esempio,una specifica tecnica pronta al termine dell’attivita di progettazione. La documentazioneprodotta serve come base per il documento da produre, il quale puo venire comunqueredatto al termine dell’attivita in questione. Documentare i propri progressi mentre siprogetta e commentare il codice man mano che lo si scrive, serve ad evitare di trovarsi aprodotto concluso difronte a del codice privo di documentazione. In situazioni del generele ore che vengono di norma impiegate nel tentativo di documentare il codice sono di granlunga superiori alle ore perse nel documentarlo mentre veniva prodotto.

32

Page 39: Riconoscimento Posizionale di Testo all'Interno di un PDF

3.6. Preventivo e consuntivo

Le ore dedicate all’attivita di analisi sono state anch’esse inferiori a quellepreventivate in quanto parte dell’analisi era gia stata svolta dall’azienda.Infine nel grafico e possibile vedere come lo sforzo dedicato all’attivita diprogettazione abbia permesso di ridurre le ore effettive di codifica.

33

Page 40: Riconoscimento Posizionale di Testo all'Interno di un PDF

34

Page 41: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 4Valutazione retrospettiva

4.1 Conseguimento degli obiettivi fissati

Gli obiettivi fissati per il progetto di stage non sono stati raggiunti. Il mioprogetto di stage come descritto nel capitolo 2, doveva occuparsi della pro-gettazione e dello sviluppo di una componente in grado di definire e gestiredei modelli di mappatura (vedi 2.1.1).

Tale componente avrebbe poi dovuto utilizzare i modelli creati, per l’estra-zione automatizzata di dati da file PDF. ASI avrebbe inoltre gradito unostudio e una proposta di interfaccia grafica che rendesse piu facile e intuitivoil processo di definizione dei modelli di mappatura.

Tuttavia verso la fine della fase di analisi ci si e resi conto di aver sotto-valutato il problema1, ed e stato deciso quindi di portare avanti la base delprogetto (Plain.File.Extraction) e utilizzare le eventuali ore avanzateper dare valore aggiunto al package e alla documentazione ad esso allegata.

1ASI si aspettava di trovare una struttura logica all’interno dei PDF, o comunqueun’altro tipo di struttura che permettesse di risolvere il problema dell’affidabilita, e potersifin da subito concentrare sulla creazione e gestione dei modelli di mappatura.

35

Page 42: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 4. Valutazione retrospettiva

L’analisi degli stream si e rivelata piu complessa di quanto preventivato acausa dell’estrema liberta permessa all’interno di un file PDF. Di conseguen-za non e stato possibile affrontare in dettaglio il problema dell’affidabilita, ilquale si presentava particolarmente interessante2. Ho potuto infatti forniresoltanto un’approccio parziale al problema (vedi 3.3.9).

4.2 Conoscenze acquisite

L’attivita di stage mi ha portato ad acquisire numerose conoscenze durantela fase di studio, ma anche durante le attivita di analisi e progettazione.Sono ora in possesso di una buona conoscenza di base per quanto riguar-da: il framework .NET (vantaggi e svantaggi, funzionamento, linguaggisupportati, librerie e strutture dati); il linguaggio di programmazione C♯

(definizione delle classi, utilizzo delle proprieta, utilizzo dei commenti XMLe integrazione con WPF); WPF (definizione di interfacce grafiche e utilizzoin architetture asincrone). Tali conoscenze—seppur non complete—ritengosiano comunque una solida base su cui sviluppare studi futuri.

Ho inoltre acquisito familiarita con gli ambienti di sviluppo Microsoft qualiVisual Studio (utilizzo dell’editor grafico per WPF, utilizzo degli strumen-ti di debug, utilizzo di IntelliSense in combinazione con i commenti XML)e Sandcastle (produzione di documentazione in formato CHM, personaliz-zazione della documentazione in termini di layout e di classi incluse, utilizzodei commenti XML all’interno della documentazione prodotta).

Seppur avessi gia utilizzato ANTLR e ANTLRWorks, durante il periododi stage ho approfondito le mie conoscenze al riguardo. La definizione del-la grammatica degli stream si e dimostrata assai piu complessa delle altregrammatiche su cui avevo lavorato in precedenza. Ha richiesto infatti moltaattenzione nel disambiguare alcune delle regole.

2Il programma avrebbe dovuto far uso di un’intelligenza artificiale nel fornire la lista didati ausiliari all’utente, nella definizione del modello di mappatura (vedi 3.3.9), fornendo ilpiu possibile dati inerenti al testo, e ricavando informazioni aggiuntive dalla comparazionedei dati ottenuti dallo stream. C’era inoltre la possibilita, di utilizzare la verifica da partedell’utente dei dati proposti, per permettere al programma di migliorarsi. La necessitada parte di ASI e tuttora quella di avere un software che con un input minimo da partedell’utente riesca ad ottenere un modello di mappatura preciso e sicuro; per ottenere cioil programma avrebbe dovuto sfruttare ogni conferma dell’utente, combinarla con gli altridati in suo possesso e fornire informazioni migliori all’utente stesso.

36

Page 43: Riconoscimento Posizionale di Testo all'Interno di un PDF

4.2. Conoscenze acquisite

Ho inoltre acquisito conoscenze specifiche nell’utilizzo delle “actions” (istru-zioni in C♯ inserite direttamente all’interno della grammatica)3.

Nel processo di decodifica ho affrontato in prima persona il problema degliencoding, in particolare all’interno di questo ambito ho acquisito conoscenzespecifiche per quanto riguarda: la differenza tra byte, carattere associato aun byte e glifo associato a un carattere; i principali encoding[1]; la diffe-renza tra ASCII e ANSI4; lo standard Unicode; il supporto dei font per gliencoding5.

4.2.1 ISO 32000

La maggior parte delle conoscenze acquisite riguardano pero lo standardISO 32000, comunemente conosciuto come il formato PDF. All’interno delprogetto di stage ho potuto (e dovuto) esplorare in dettaglio la specificadel formato PDF[1]. Ho acquisito conoscenze riguardanti: la struttura in-terna dei documenti PDF (l’Header, il File Trailer, la Cross Reference

Table); le tipologie di dato contenute in un file PDF (booleani, stringhe,numeri6, nomi7, array, dizionari8 e stream); la definizione degli oggetti al-l’interno di un PDF (pagine, font, encoding, contenuti, spazi dei colori).

3Le “actions” in ANTLR sono appunto blocchi di codice definiti nel linguaggio didestinazione della grammatica (il linguaggio con cui verra poi generato il parser). Le“actions” vengono inserite direttamente all’interno della grammatica e permettono di per-sonalizzare l’attivita del parser. Esistono delle regole precise per integrare le istruzioni C♯

con il linguaggio utilizzato da ANTLR per definire la grammatica[3].4Generalmente si tende a confondere l’ASCII con l’ANSI. L’ASCII e un encoding

composto da 128 caratteri (alcuni di essi sono caratteri non stampabili di controllo),mentre l’ANSI e la codifica generalmente utilizzato nei sistemi Microsoft Windows ed ecostituito da 256 caratteri (i primi 128 appartengono in effetti alla codifica ASCII).

5Un font puo essere sprovvisto dei glifi corrispodenti ad alcuni caratteri. L’utilizzo diUnicode all’interno di un programma non garantisce quindi il supporto di ogni caratterein quanto l’unico modo per rendere visibile un carattere all’occhio umano e l’utilizzo di unfont. Se il font non possiede il glifo corrispondente al dato carattere, quel carattere nonpuo essere visualizzato, in questo senso il processo di decodifica di una stringa non puoassolutamente astrarre dal font utilizzato nella visualizzazione del testo.

6All’interno di un file PDF non vi e distinzione tra interi e reali, un “numero” puoinfatti essere accompagnato o meno da un segno e accompagnato o meno da una partedecimale.

7Un nome all’interno del formato PDF e una stringa (preceduta dal carattere “/”),serve per identificare risorse quali font e immagini (un font con nome “/F3” viene utilizzatoin uno stream richiamando appunto il suo identificativo “/F3 10 Tf”). Viene inoltreutilizzato per identificare delle costanti all’interno di un PDF, per esempio e possibiletrovare una definizione del genere “Encoding /WinAnsi”, in questo caso “/WinAnsi”indica una costante interna del formato PDF.

8Il 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 PDFla quasi totalita degli oggetti e costituita da dizionari, nei quali a determinate keywordcorrispondono determinate definizioni.

37

Page 44: Riconoscimento Posizionale di Testo all'Interno di un PDF

Capitolo 4. Valutazione retrospettiva

Nello studio poi degli stream di contenuto ho acquisito familiarita con: glioperatori 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 operatoridi stampa (showing) del testo (Tj, ’, " e TJ)9.

La ricerca del testo posizionale, mi ha posto a diretto contatto infine con imeccanismi di rendering (posizionamento a video) del testo all’interno delformato PDF.

4.2.2 PDF/UA e PDF/A

All’interno del progetto di stage ho avuto modo di conoscere alcune dellevarianti del formato PDF. L’assenza di una struttura logica come descrittonel capitolo 2 (vedi 2.2.3) si e dimostrata un forte impedimento nella ma-nipolazione dei file PDF. Adobe, resasi conto di questa profonda mancanzaall’interno del formato PDF (la mancanza di una struttura logica rende iPDF di fatto inaccessibili), ha iniziato a lavorare assieme ad AIIM (Asso-ciation for Information and Image Management) allo standard ISO/AWI14289 (Aprile 2009), definendo il formato PDF/UA (PDF/Universal Ac-cessibility).

La necessita da parte delle aziende di integrare l’archiviazione sostituivaa norma nei processi aziendali ha spinto Adobe a sviluppare un’altro tipo distandard. Gia a partire dal 2005 infatti e stato definito l’ISO 19005-1, cheprende il nome di PDF/A. I PDF/A sono un formato per l’archiviazione alungo termine dei documenti elettronici. PDF/A costituisce un sottoinsiemedella specifica dei PDF in quanto lascia fuori alcune caratteristiche dei PDFnon adatte all’archiviazione a lungo termine10. Sono escluse da un PDF/Ale seguenti funzionalita:

• Contenuti audio e video.

• Javascript e codice eseguibile.

• Riferimenti ad oggetti esterni (compresi link ipertestuali).

All’interno di un file PDF/A inoltre, vanno inclusi tutti i font (compresi i“14 standard”), vanno definiti gli spazi dei colori in modo assolutamenteindipendente dal sistema e non e infine permessa la crittazione.

9Sono state acquisite conoscenze parziali anche su altri tipi di operatori come: glioperatori grafici, gli operatori di colore e gli operatori per il contenuto taggato (markedcontent operator).

10Lo standard PDF nella sua versione attuale permette di inserire tra le altre coseanche filmati e audio all’interno di un documento, come pure animazioni 3D.

38

Page 45: Riconoscimento Posizionale di Testo all'Interno di un PDF

4.3. Valutazione del corso di studi

4.3 Valutazione del corso di studi

Trovo che gli argomenti affrontati durante il corso di studi siano stati adegua-ti e soprattutto utili. Lo studio di C♯ si e rivelato piu semplice considerandoi linguaggi di programmazione affrontati durante il corso (C++, Java). L’u-tilizzo di WPF, in particolare, non ha richiesto alcuno sforzo considerata lanatura XML di XAML e la somiglianza con HTML. Sono state utili anchele conoscenze acquisite riguardo alle grammatiche libere da contesto, e alfunzionamento di lexer e parser.

Mi ha sorpreso invece quanto appreso nello studio dei font e degli encoding.Spesso queste conoscenze vengono date per scontate o comunque citate solomarginalmente all’interno del corso di studi. Tuttavia ritengo che esse sianoun argomento abbastanza specifico e non strettamente necessario all’internodel corso di laurea.

39

Page 46: Riconoscimento Posizionale di Testo all'Interno di un PDF

40

Page 47: Riconoscimento Posizionale di Testo all'Interno di un PDF

Appendice AGlossario

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 e in possesso dei sorgenti da cui essisono derivati.

Ciclo passivo In questo documento il termine indica generalmente l’in-sieme dei documenti emanati dai clienti di un’aziendache neccessitano quindi di essere archiviati e indicizzatidall’azienda ricevente.

Compiler-compiler

Un “compiler-compiler” o “generatore di compilatori” euno strumento che crea lexer, parser, interpreti e com-pilatori a partire da una descrizione formale di unagrammatica.

D

Documentale Plain R© Documentale e il pacchetto software prodottoda ASI per la gestione del ciclo attivo e passivo deidocumenti aziendali.

41

Page 48: Riconoscimento Posizionale di Testo all'Interno di un PDF

Appendice A. Glossario

E

ERP (Enterprise Resource Planning) e 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 e la rappresentazione grafica di un carattere, lafigura geometrica con la quale esso appare all’interno diun media (sia esso carta stampata oppure un monitor).Un font e appunto la definizione di una mappatura tracaratteri Unicode e glifi.

O

OCR (Optical Character Recognition), un programma OCR sioccupa di tradurre immagini in cui e contenuto del testoin testo selezionabile. I programmi OCR sono una com-ponente fondamentale nella creazione di PDF Searchablea partire da documenti cartacei.

P

Posizionale Un’attivita posizionale e un’attivita legata all’utilizzo diuna o piu posizioni geometriche, in particolare il ricono-scimento posizionale come pure l’estrazione posizionaledi testo indicano la possibilita di riconoscere ed estrarreil testo da un documento una volta definita una posizioneiniziale o un’area all’interno di una pagina del documento.

42

Page 49: Riconoscimento Posizionale di Testo all'Interno di un PDF

S

Searchable Viene definito PDF Searchable un documento PDF dovesia possibile fare ricerca sul testo contenuto, deve inoltreessere possibile selezionare e copiare porzioni di testo.Questo tipo di distinzione e necessaria considerando cheall’interno di un PDF il testo puo essere presente anchecome semplice immagine raster.

Sans Viene definito “sans” abbreviazione di “sans serif” unfont che non presenta piccole decorazioni alle estremitadei glifi. Sono font “sans”: Arial, Tahoma, Verdana.

Stream Uno stream e generalmente una sequenza continua di da-ti simili resi disponibili nel tempo. All’interno dei filePDF uno stream indica una sequenza compressa di byteche contiene la definizione, per esempio, di un font, diun’immagine o del contenuto di una pagina.

T

Tagged Un Tagged PDF, e un documento PDF all’interno delquale sono stati inserite sequenze di XML in modo dadare una struttura logica a quella che altrimenti sarebbesolo una rappresentazione grafica (rendering) del testo.

U

Unicode Unicode e uno standard che permette di manipolare erappresentare correttamente il testo contenuto nella mag-gior parte dei sistemi di scrittura del mondo. L’ultimaversione dello standard contiene piu di 107.000 caratterie copre 90 sistemi di scrittura. Il successo di Unicode nel-l’unificare i vari set di caratteri presenti nel mondo e statotale 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 carattereUnicode tra 0 e 65.535.

43

Page 50: Riconoscimento Posizionale di Testo all'Interno di un PDF

Appendice A. Glossario

W

WPF (Windows Presentation Foundation) e un sistema per losviluppo di interfacce grafiche per applicazioni Windows.WPF separa l’interfaccia grafica dalla logica del program-ma, pur permettendo una veloce ed efficace integrazionetra le due.

X

XAML (eXtensible Application Markup Language) e un linguag-gio basato su XML utilizzato per la definizione delleinterfacce grafiche in WPF.

44

Page 51: Riconoscimento Posizionale di Testo all'Interno di un PDF

Bibliografia

[1] Adobe Systems Incorporated, November 2006PDF Reference Sixth edition (Adobe R© Portable Document Format Ver-sion 1.7)PDF Reference, Sixth Edition

[2] empira Software GmbH, 2009,empira PdfSharp & Migradoc Documentation

[3] Terence Parr, 2007,The Definitive ANTLR Reference (Building Domain-Specific Languages)

[4] Vic Hartog and Dennis Doomen, 2005,Coding Standard: C# (Philips Medical Systems - Software / SPI)

[5] Dennis Doomen, 2009,C# 3.0 Coding Guidelines (Guidelines for .NET development)

45

Page 52: Riconoscimento Posizionale di Testo all'Interno di un PDF

46

Page 53: Riconoscimento Posizionale di Testo all'Interno di un PDF

Indice analitico

SymbolsTlm (text-line matrix), 22

Tm (text matrix), 22

Æ (AE), 25

.NET, 2, 13, 17, 18, 32, 36, 43

fi (fi, small ligature), 10, 25

\f (Form Feed), 21

\n (Line Feed), 21

\r (Carriage Return), 21

\r\n, 21

\u0085 (Next Line), 21

\u2028 (Line Separator), 21

\u2029 (Paragraph Separator), 21

14 font standard, 29, 38

AAbstract Syntax Tree, vedi AST

accelerazione hardware, 2

accessibilita, 11

accesso all’informazione, 3

acquisizione, 1, 6

actions, 37

Adobe

Flash, 2

Reader, 8

affidabilita, 8–10, 12, 17, 18, 26, 27,35, 36

AIIM, 38

analisi

attivita di, 31, 32, 36

automatizzata, 8, 27

del PDF, 15

fase di, 11, 14, 16, 31, 32, 35

testo, 22

analisi dei requisiti, vedidocumentazione

animazioni, 2

ANSI, 37

ANTLR, 36, 37

ANTLRWorks, 20, 21, 29, 30, 36

API, 17, 18, 30

applicazione

desktop, 2

web, 2, 24

Windows, 44

WPF, 2

architetture asincrone, 36

archiviazione, 6

archiviazione sostitutiva a norma, 3,38

Arial, 29, 43

ASCII, 37

ASI, 1–3, 7–9, 12, 14, 16–18, 35, 36,41

AST, 26

astrazione, 2

47

Page 54: Riconoscimento Posizionale di Testo all'Interno di un PDF

Indice analitico

attivita

di analisi, vedi analisi

di codifica, vedi codificadi documentazione, vedi

documentazione

di progettazione, vediprogettazione

di stage, 13, 29, 36

di studio del dominio, vedistudio del dominio

di testing, vediverifica e validazione

di verifica e validazione, vediverifica e validazione

azienda, 1–3, 5, 6, 9, 12, 14, 18, 30,41, 42

Bbrowser, 11

bug, 14, 29

CC++, 13, 39

C♯, 2, 13, 14, 17, 18, 21, 32, 37, 39nomenclatura standard, 18

proprieta, 13, 18

cache, 24

campagna di test, 16

carattere, 11, 25, 42

certificazione, 1CFG (context-free grammar), 21, 39

char spacing, 25

CHM, 18, 36

ciclo

attivo, 3, 41di vita, 7, 31

passivo, 3, 5, 41

ciclo attivo del documento, vedidocumento

ciclo passivo del documento, vedidocumento

CMap, 28

codice

esempi di, 17

mantenibilita, 13, 32

testato, 16

unita del, 13, 14

codice sorgente, 9

codifica

attivita di, 30–32, 35

correttiva, 31

fase di, 13, 21, 29, 31, 32

colore, 8, 20, 25

commento XML, 13, 30, 36

compilatore, 41

compiler-compiler, 20, 41

componente, 14, 15, 35

content stream, 19–26, 28–30, 36–38,43

analisi, 36

definizione, 28

parsing, 23

controllo, 13

coordinate cartesiane, 25, 27, 30

copia cartacea, 6

corsivo, 29

costrutto sintattico, 13

Courier, 29

CPU, 2

criticita, 13, 14, 16

crittazione, 38

CTM, 22

current transformation matrix, vediCTM

Ddata binding, 2

dato

estrazione, 12, 14, 17

posizione, 26, 27

48

Page 55: Riconoscimento Posizionale di Testo all'Interno di un PDF

Indice analitico

verificato, 27, 28

dato primitivo, 19

debug, 36

decodifica, 37

design pattern

facade, 24

front controller, 24

singleton, 24

diagramma

delle classi, 29

delle componenti, 14

di attivita, 29

Use Case, 14

dimensioni della pagina, 24

DirectX, 2

DOC, 5

Documentale, 3, 7, 8, 12, 17, 41

documentazione, 18

allegata, 9, 35

analisi dei requisiti, 16

attivita di, 13, 16, 18, 31, 32

fase di, 31, 32

generazione, 13

mantenibilita, 13

manuale utente, 30

qualita della, 9, 17, 18

specifica tecnica, 16, 30

documento

acquisizione, 6, 7, 9, 41

archiviazione, 3, 38

cartaceo, 3, 6, 7, 11, 42

ciclo attivo, 1, 5, 41

ciclo di vita, 7

ciclo passivo, 1, 6, 8, 12, 28, 41

creazione, 6, 9

digitale, 6, 11, 38

HTML, 10, 11

layout, 3, 7, 10

produzione, 3, 7, 41

driver, 30

Eelenco puntato, 10, 11

encoding, 19, 24, 25, 28, 37, 39

ERP, 1, 42

errore, 7, 14, 27estrazione

attributi, 8

automatica, 28, 35

di testo, 8, 9, 17

di un dato, 7, 12, 14fallimento, 28

posizionale, 8, 9, 23, 42

Ffallimento posizionale, 28

fase

di analisi, vedi analisidi codifica, vedi codifica

di documentazione, vedidocumentazione

di progettazione, vediprogettazione

di studio del dominio, vedistudio del dominio

di testing, vediverifica e validazione

di verifica e validazione, vediverifica e validazione

filtro di codifica, 19

firma digitale, 3font, 11, 19, 20, 23–26, 37, 39, 42, 43

font monospace, 25

formato

cartaceo, 6, 7

di scambio, 7, 11elettronico, 7

intermedio, 5

principale, 5

49

Page 56: Riconoscimento Posizionale di Testo all'Interno di un PDF

Indice analitico

framework .NET, vedi .NET

Ggaranzia di sicurezza, 2, 9, 27, 28GDI, 2generazione automatica, 21, 24, 25gestionale, 1

gestioneciclo attivo, 3ciclo passivo, 3dei documenti, 3, 5

delle informazioni, 3modello di mappatura, 8

glifocolore, 11

definizione, 29, 37, 42, 43dimensione, 11, 25inclinazione, 11orientamento, 11

posizione, 11GPU, 2grammatica, 20–22, 24–26, 28–30, 36,

37, 41grammatica libera

da contesto, vedi CFG(context-free grammar)

grassetto, 29grassetto-corsivo, 29GUI, 2, 15, 30

HHelvetica, 29HTML, 10, 39

IIBM, 1immagine raster, 6, 43

intelligenza artificiale, 36

IntelliSense, 13, 36

interfaccia esterna, 23

interfaccia grafica, 2, 8, 30, 35, 44

iRef, 29

ISO 19005-1, 38

ISO 32000, 37

ISO/AWI 14289, 11, 38

iText, 18

iTextSharp, 18

JJava, 13, 18, 39, 43

javadoc, 13, 18

Javascript, 38

Llayout

di partenza, 5, 9, 10, 27

incongruenza, 9

indipendente, 11

sicuro, 12

variabile, 7, 9, 14

lexer, 20, 21, 24, 25, 39, 41

libreria

.NET, 2

criteri di scelta, 17

di rendering, 8, 9

di supporto, 8, 15, 16

individuazione, 12, 15, 16

licenza, 17

limiti del prodotto, 16, 28

linea (tracciato), 11

linea guida, 13

linguaggio di markup, 10

logica del programma, 2, 44

logo, 12

50

Page 57: Riconoscimento Posizionale di Testo all'Interno di un PDF

Indice analitico

Mmacchina virtuale, 2

MacRomanEncoding, 28

manuale utente, vedidocumentazione

MapFinder, 14–16

MapManager, 14–16

matrice

di linea di testo, vedi Tlm

di posizionamento, 26, 38

di testo, vedi Tm

posizionale, 22

stack, 22

matrice di stato, vedi state matrix

matrice di trasformazione corrente,vedi CTM

media, 42

Microsoft, 1, 14, 36

.NET, vedi .NET

nomencatura standard, 18

SQL Server, vedi SQL Server

Visual SourceSafe, vediVisual SourceSafe

Visual Studio, vedi Visual Studio

Windows, 2, 37

Windows Forms, vedi WinForms

Windows PresentationFoundation, vedi WPF

modello di ciclo di vita, 31

modello di mappatura

creazione, 9, 14

definizione, 7, 8, 26, 27, 35, 36

gestione, 35

identificazione, 14

modifica, 14

modello evolutivo, 31

monocromatico, 22

NNET (framework), vedi .NETnomenclatura, 13, 18

OOCR, 6, 7, 42oggetto di testo, vedi text objectoperatore, 21, 22, 28, 38

di colore, 22, 38di posizionamento, 22, 29, 38di stampa, 22, 25, 38

di stato, 11, 22, 38grafico, 38per il contenuto taggato, 38

operazione di traduzione, 29ore effettive, 32ore preventivate, 32

Ppackage, vedi Plain.File.Extractionpagina web, 2parser, 20, 21, 24, 26, 29, 30, 37, 39,

41PDF

analisi, 12, 15, 16, 18, 20, 22, 23,27

Body, 18contenuto, 12, 19, 37

creazione, 10, 18, 19Cross Reference Table, 18, 37dizionario, 37File Trailer, 18, 37formato chiuso, 20generatore, 6, 25, 28Header, 18, 37layout, 14

51

Page 58: Riconoscimento Posizionale di Testo all'Interno di un PDF

Indice analitico

modifica incrementale, 19name, 37operatore, vedi operatoreprogettazione, 11rendering, 8, 9specifica, 20, 32, 37, 38struttura interna, 18, 19, 37valido, 29variante, 38

PDF Searchable, 5–7, 42, 43PDF/A, 38PDF/UA, 11, 38Tagged PDF, 11, 43tradizionale, 11

versione, 181.5, 291.6, 29

PDF-DocEncoding, 28PdfAnalyzer (componente), 14–16, 23PdfSharp, 18, 19, 29plain, 1Plain.File.Extraction, 23, 24, 26,

28–30, 35PdfAnalyzer (classe), 23–26PdfChar, 24, 25PdfFont, 24–26PdfPage, 23–27PdfText, 24–26PdfTextStreamLexer, 25PdfTextStreamParser, 24, 26

portale, 1porting, 17posizionale, 42

carattere, 25estrazione, 9ricerca, 14

posizione assoluta, 11posizione del testo, vedi testoprocesso

aziendale, 38di acquisizione, 7di sviluppo, 1gestionale, 1intermedio, 9, 27

progettazione

attivita di, 13, 15, 22, 26, 30–32,35, 36

fase di, 2, 15, 16, 29–32

progetto di stage, 12, 14, 16–18, 20,35, 37, 38

proprieta, 13, 36prototipo, 31

Rrandom access, 18

rendering, 8, 9

requisito

catalogazione, 15elenco, 16

individuazione, 14, 31

verifica, 30

retrocompatibilita, 29ricerca

contenuto, 3

documento, 3

non-posizionale, 28posizionale, 14

sul testo, 43

risorsa umana, 1

SSandcastle, 30sans, 43

sans serif, 43

scanner, 6, 7

scanner OCR, 7scelta progettuale, 14, 16

sicurezza, 3

significato logico, 12

Silverlight, 2sistema di coordinate nella pagina,

11

software ERP, 1

52

Page 59: Riconoscimento Posizionale di Testo all'Interno di un PDF

Indice analitico

software gestionale, 1

sorgente, 5, 7

sorgente aperto, 8, 18

spazio bianco, 21

spazio dei colori, 37, 38

specifica tecnica, vedidocumentazione

SQL Server, 1

standard di codifica, 13, 14

StandardEncoding, 28

state matrix, 22

stile, 8

stream, 19, 37, 43

decodifica, 19

di contenuto, vedicontent stream

struttura

di supporto, 26

grafica, 11

logica, 10–12, 14, 35, 38, 43

stub, 30

studio del dominio

attivita di, 31, 32

fase di, 13, 31, 32, 36

Symbol (font), 29

Ttabella, 10

Tahoma, 43

test case, 30

test manuale, 30

testo, 11

affidabilita, 8

analisi, 12, 22

attributo del, 9, 25–27, 29

estrazione, 8, 9, 12, 23, 29

identificazione del, 12

posizionale, 26, 38

posizionamento, 22

posizione del, 8, 10, 12, 17

rendering, 38

significato, 10text leading, 25text matrix, vedi Tm

text object, 22, 38text rise, 25text size, 25text-line matrix, vedi Tlm

Times, 29Times New Roman, 29tracciato vettoriale, 11traduttore, 21

trasparenza, 2

UUML, 16Unicode, 25, 37, 42, 43

Vvalore semantico, 8Verdana, 43

verifica e validazioneattivita di, 31, 32fase di, 21, 29–32

vettoriale, 2, 11

visione d’insieme, 14Visual SourceSafe, 1Visual Studio, 1, 13, 36visualizzatore, 15

WWinAnsiEncoding, 28Windows Forms, vedi WinFormsWindows Presentation

Foundation, vedi WPF

WinForms, 2, 3word spacing, 25WPF, 2, 3, 13, 32, 36, 39, 44

53

Page 60: Riconoscimento Posizionale di Testo all'Interno di un PDF

Indice analitico

XXAML, 2, 39, 44XML, 5, 10, 11, 13, 30, 36, 39, 43, 44XPS, 5

ZZapf Dingbats (font), 29

54