Documenti Office e Java : anteprima ed estrazione del testo.

Transcript

Documenti Office e Java : anteprima ed estrazione del testo.
UNIVERSITÀ DEGLI STUDI DELLINSUBRIA
FACOLTÀ DI SCIENZE MM. FF. NN. - VARESE
Corso di Laurea in Informatica
Documenti di Office e Java
Anteprima ed estrazione del testo
Relatore: Prof. Marco TARINI
Tesi di Laurea di:
MATTEO BASSANI
Matr. n. 608429
Anno Accademico 2004/2005
Ringraziamenti
Da fare
etc. etc.
Abstract
abstract in inglese etc. etc.
abstract in Italiano
etc. etc.
Indice
Ringraziamenti
iv
Abstract
vi
1 Introduzione
1.1 Contesto Applicativo . . . . . . . . . . . . . . . . . . . . . . .
1.2 Struttura di questo lavoro . . . . . . . . . . . . . . . . . . . .
2 Office e Java: un problema di compatibilità
2.1 Java . . . . . . . . . . . . . . . . . . . . . . .
2.2 Office . . . . . . . . . . . . . . . . . . . . . .
2.3 I formati Office . . . . . . . . . . . . . . . . .
2.3.1 Documenti di Word . . . . . . . . . .
2.3.2 I fogli di calcolo di Excel . . . . . . . .
2.3.3 Presentazioni di PowerPoint . . . . . .
2.3.4 Database Access . . . . . . . . . . . .
2.4 Analisi delle soluzioni possibili . . . . . . . .
2.4.1 XBrowser . . . . . . . . . . . . . . . .
2.4.2 iecanvas . . . . . . . . . . . . . . . . .
2.4.3 Multivalent . . . . . . . . . . . . . . .
2.4.4 Mozilla Webclient . . . . . . . . . . .
2.4.5 Jakarta POI . . . . . . . . . . . . . . .
3 Un
3.1
3.2
3.3
3.4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
ingrediente della soluzione proposta: OpenOffice.org
Storia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Caratteristiche tecniche . . . . . . . . . . . . . . . . . . . .
Internals . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Interazione con Java . . . . . . . . . . . . . . . . . . . . . .
1
1
3
.
.
.
.
.
.
.
.
.
.
.
.
.
4
4
6
7
8
9
10
11
11
11
11
12
12
12
.
.
.
.
14
14
15
16
16
4 Soluzioni
17
4.1 Strumenti e programmi necessari . . . . . . . . . . . . . . . . 17
4.2 L’estrazione del testo . . . . . . . . . . . . . . . . . . . . . . . 17
4.3 L’anteprima di documenti . . . . . . . . . . . . . . . . . . . . 20
5 Risultati e Conclusioni
23
5.1 Risultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.2 Sviluppi futuri . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.3 Conclusioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Bibliografia
30
Elenco delle figure
1.1
1.2
Schermata iniziale di DocWeaver . . . . . . . . . . . . . . . .
Schermata di ricerca documenti in DocWeaver . . . . . . . . .
2
3
2.1
Struttura interna di un file salvato con PowerPoint . . . . . .
10
4.1
4.2
4.3
4.4
4.5
4.6
4.7
Il programma demo ha estratto il testo da un file word. . . .
Codice per la connessione a un server OpenOffice . . . . . . .
Funzione che stabilisce il tipo di documento aperto . . . . . .
Estrazione del testo tramite l’accesso hai paragrafi. . . . . . .
Esportazione di un file Excel in un file HTML. . . . . . . . .
Codice necessario per modificare una singola opzione. . . . .
Caricamento di un file nel componente OpenOffice e rimozione
delle barre degli strumenti . . . . . . . . . . . . . . . . . . . .
18
19
19
20
20
21
L’estrattore del testo visualizza il testo estratto da un riassunto.
L’anteprima di un file di Word grazie ad OpenOffice. . . . . .
La barra dei file di Excel rimane visibile per mostrare il reale
contenuto della celle. . . . . . . . . . . . . . . . . . . . . . . .
Tramite i pulsanti in alto a destra é possibile par partire la
presentazione delle slide. . . . . . . . . . . . . . . . . . . . . .
24
25
5.1
5.2
5.3
5.4
22
29
29
Elenco delle tabelle
2.2
Esempio di un record BIFF di una cella di un intero . . . . .
5.1
5.2
5.3
5.4
Tempi di anteprima di file Word. . . . .
Tempi di anteprima di file Ecel. . . . . .
Tempi di anteprima di file Powerpoint. .
Le performance dell’estrattore del testo.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
24
25
25
26
Capitolo 1
Introduzione
“L’importanza della gestione dei contenuti aziendali si riflette nei vari modi in
cui le imprese utilizzano le informazioni come elemento distintivo e promotore di
competitività. [. . . ] La modalità di creazione, gestione, archiviazione e utilizzo
delle informazioni per l’espletamento di attività varie, costituisce il nocciolo della
gestione dei contenuti aziendali”. [1] In questo contesto si sviluppa la necessità
di avere un unico programma che permetta di poter visionare l’anteprima di un
qualsiasi documento, in qualsiasi formato, e di poterne estrapolare il contenuto
per memorizzarlo, e successivamente ricercarlo in un’ottica di più ampio respiro.
1.1
Contesto Applicativo
Il gruppo Irpe é un’affermata realtà che propone una serie di servizi
e soluzioni ad ampio raggio per le medie imprese. Il gruppo, tramite
le sue divisioni, offre in particolare soluzioni nell’ambito del networking, della businness continuity, dell’editoria, della gestione licenze
software, del content management. Inoltre offre corsi di formazione e
servizi di assistenza sistemistica e hardware.
Nell’ambito del content management l’azienda fornisce DocWeaver, un
prodotto che offre “strumenti informatici volti a semplificare ed automatizzare il più possibile le operazioni di archiviazione, catalogazione e ricerca
documenti, garantendo la riservatezza delle informazioni memorizzate che
potranno essere rese disponibili dopo il controllo del profilo dell’utente collegato e delle autorizzazioni che questi possiede. [. . . ] Permette alle organizzazioni di creare una linea di collegamento fra le persone, le informazioni e
1.1 Contesto Applicativo
i processi, trasformando il loro patrimonio informativo in una forma piú intelligente, ottimizzando i processi di lavoro e riducendo i rischi correlati”. [1]
DocWeaver é un programma scritto in Java, che con l’ausilio di un database
SQL, soddisfa appieno la descrizione precedente (fig.1.1), permettendo di
archiviare documenti elettronici (documenti, fogli di calcolo, presentazioni,
immagini, e-mail, . . . ) e successivamente di ricercarli (fig.1.2). Il programma sfrutta un’architettura client server, e grazie alle proprietà di Java é
multipiattaforma, permettendo di poter scegliere con la massima libertà sistemi operativi (Windows, Mac OS X, Unix, . . . ) e database server (MS SQL
Server, Oracle, Postgresql, . . . ).
Il progetto é divisibile in due parti: l’anteprima e l’estrazione del testo.
Prevede la realizzazione di una applicazione dimostrativa Java che consenta la visualizzazione dell’anteprima di documenti Office (Word, Excel, . . . ),
documenti PDF, file di testo, immagini (JPG, PNG, . . . ), etc. Il programma
potrà integrare componenti esterni quali browser e/o altro e dovrà essere
utilizzabile sia in ambiente Windows che Macintosh, Linux, . . . I risultati
saranno poi attentamente valutati per una possibile integrazione nel prodotto di archiviazione documentale DocWeaver realizzato in tecnologia Java. La
seconda parte prevede la realizzazione di una applicazione dimostrativa in
Java che consenta l’estrazione di testo da documenti Office (Word, Excel,
. . . ). L’obbiettivo é quello di integrarlo nel prodotto di archiviazione documentale DocWeaver, lato server, in modo da fornire il testo estratto al
motore di indicizzazione Full-Text già previsto dai database SQL utilizzati
(Microsoft SQL, Oracle, . . . ).
Figura 1.2: Schermata di ricerca documenti in DocWeaver
2
1.2 Struttura di questo lavoro
1.2
Struttura di questo lavoro
(un indice espanso) blah blah (capitolo 1), ....
cito: [3]Il ruolo dell’ introduzione nelle tesi é un po’convenzionale: contiene di fatto un compendio della tesi. La sua lunghezza é di circa 3 5 pagine.
Il suo scopo é di consentire una rapida valutazione del contenuto della tesi.
l’ introduzione della tua tesi ha lo scopo opposto. Tutto ciò che é contenuto
nella tesi deve essere menzionato nell’introduzione. Per questo motivo é una
delle ultime cose che viene scritta. Inoltre, visto che é la prima cosa che
viene letta da chi vuole valutare la tesi, é probabilmente una delle poche
cose lette e rilette dal tesista e dal relatore.
La lasciamo a dopo
3
Capitolo 2
Office e Java: un problema di
compatibilità
All’interno di questo capitolo affronteremo il problema legato alla piattaforma
di sviluppo e si farà una panoramica sul problema della gestione dei documenti
Microsoft Office. Prenderemo in analisi i principali programmi che compongono
la suite Office e il formato dei file che questi programmi usano. Faremo infine
una veloce sintesi dei progetti software che possono essere usati per risolvere il
problema, soffermandoci sulle problematiche legate al loro uso.
2.1
Java
Java é un linguaggio di programmazione riflessivo, orientato agli
oggetti e indipendente dalla piattaforma. Lo sviluppo di Java
inizia nel 1990 con Patrick Naughton, a lui si uniscono James
Goslinge Mike Sheridan. Il linguaggio su cui stavano lavorando
inizialmente doveva essere una nuova estensione del C++ (altro
linguaggio di programmazione ad oggetti). Però decisero che era
carente di alcune funzioni, quindi iniziarono la creazione di un
nuovo linguaggio chiamato inizialmente OAK, basato su alcune
idee di Bill Joy. Nel Giugno 1994, dopo una lunga riunione John
Gage, James Gosling, Bill Joy, Patrick Naughton, Wayne Rosing,
e Eric Schmidt decisero che
con l’avvento di Mosaic 1 , il loro linguaggio avrebbe dovuto sposarsi con il
web. Nel Novembre del 1994 in una conferenza congiunta con Netscape
mostrarono le possibilità offerte da Java. Marc Andreessen (all’epoca vice
presidente esecutivo di Netscape) in quell’occasione annunciò che Java sarebbe
stato incluso nei loro browser. Un programma o una applet2 Java hanno
bisogno di una virtual machine, un programma vero che esegue l’applicazione
scritta in Java.
I principali punti di forza e innovazioni di Java sono la presenza di una
API interna per la realizzazione di interfacce grafiche (al contrario del C++
e delle varie librerie grafiche proprietarie disponibili) e la possibilità di poter
eseguire la stessa applicazione su piattaforme diverse ottenendo i medesimi
risultati, sia computazionalmente che nella rappresentazione visiva. Il programmatore Java ha la possibilità di creare applicazioni multithread o concorrenti, o con il supporto alla riflessione, che permette di caricare dinamicamente solo le classi necessarie all’esecuzione, senza doversi preoccupare del
processo di garbage-collection, che é automatico. Tra le altre funzionalità
2.2 Office
messe a disposizione da Java abbiamo il supporto alle tecnologie di rete, per
l’accesso ai database tramite JDBC/ODBC, la manipolazione di documenti
XML e la creazione di Web Services.
Un programma scritto in Java viene compilato, ma non direttamente in
codice eseguibile dal sistema operativo, e vengono generati dei file in bytecode, i quali vengono poi interpretati dalla Java Virtual Machine (JVM) che
esegue il programma. Java risulta un linguaggio ibrido, ovvero parzialmente
compilato e parzialmente interpretato. La JVM viene implementata per
ogni sistema operativo sufficientemente diffuso e attualmente é disponibile
per Windows, Mac OS X, *nix, . . . Purtroppo il processo di interpretazione
del programma aveva dei problemi di performance, “per questo, tutte le implementazioni recenti di macchine virtuali Java hanno incorporate un JIT
compiler, cioè un compilatore interno, che al momento del lancio traduce al
volo il programma bytecode Java in un normale programma nel linguaggio
macchina del computer ospite. Inoltre, questa ricompilazione é dinamica,
cioè la virtual machine analizza costantemente il modello di esecuzione del
codice (profiling), e ottimizza ulteriormente le parti usate più frequentemente, mentre il programma é in esecuzione ” [2].
Java, fornendo delle API per la creazione di interfacce grafiche, supporta
anche alcuni componenti capaci di mostrare testo formattato, ovvero non il
solo testo, ma visualizzando a video anche le variazioni di font, di dimensioni
e di stile nei caratteri usati. I due componenti sono JEditorPane e la sua
sottoclasse JTextPane. Questi componenti sono stati creati per supportare
i seguenti formati: testo piano, HTML ed RTF (). Sia HTML che RTF
sono due linguaggi di mark-up, il primo sviluppato dal W3C (World Wide
Web Consortium) ed usato come linguaggio per la descrizione di ipertesti
sul web, il secondo sviluppato da Microsoft sin dal 1987 per lo scambio di
documenti fra piattaforme diverse. Il formato RTF ha raggiunto la versione
1.8 nell’Aprile del 2004, le sue specifiche3 sono pubblicamente disponibili.
Purtroppo questo formato é caduto in disuso poiché Word, che usa un’altro
formato, ha guadagnato una quota di mercato talmente cospicua da creare di
fatto uno standard. Nonostante JEditorPane supporti pochi formati, c’é la
possibilità di incrementare il loro numero tramite la scrittura e l’aggiunta di
alcune classi al progetto. L’aggiunta dei formati usati da Office é comunque
difficoltosa se non impossibile per la mancanza di documentazione ufficiale
aggiornata sulle specifiche interne dei formati dei file.
2.2
Office
Microsoft Office Suite é la raccolta di una serie di programmi di
produttività per l’ufficio. Nata nei primi anni 90 la suite Office
diventa il raccoglitore di un set di programmi per l’ufficio che
venivano venduti separatamente (Word, Excel, Powerpoint), ma
con il vantaggio di avere un prezzo inferiore rispetto ai prodotti
separati. Col passare degli anni i programmi che compongono
Office sono aumentati e hanno incominciato a condividere
componenti e funzionalità: il correttore ortografico, l’ OLE data Integration,
VBA (Visual Basic for Application), . . . Con il passare degli anni la suite Office si é imposta sul mercato come uno standard de facto per gli applicativi
dell’ufficio.
5
2.3 I formati Office
formule, grafici, . . . ; Powerpoint, realizza presentazioni animate con testo,
immagini e suoni; Outlook, consente di gestire i propri account di posta, ma
anche il calendario, gli appuntamenti; e infine Access, programma che permette la gestione di piccoli database relazionali e creare interfacce grafiche
per gli utenti meno esperti.
La suite comprende anche un elevato numero di programmi che possono
essere inclusi a seconda della versione di Office acquistata:
- InfoPath: Software per lavorare con i file XML
- Publisher: Software per la creazione di volantini, libretti, . . .
- FrontPage: Programma di web design
- Visio: Software per la creazione di diagrammi.
- Office Picture Manager: software di gestione delle foto.
- Photo Editor: Software di fotoritocco.
- Project: Programma per la gestione dei progetti.
- OneNote: Usato sui tablet PC per prendere rapidamente delle note.
- Developer Tools : Tool per gli sviluppatori, in particolare manualistica.
- Entourage: Programma di posta elettronica per Mac (fornito al posto
di Outlook)
Oltre ai prodotti elencati nella gamma office, si sono recentemente aggiunte delle versioni server di alcuni componenti che permettono di automatizzare la generazione di documenti o che mettono a disposizione dei servizi
Web-Based. Office viene spesso venduto in pacchetti o suite (Students, Basic, Professional, Developer, . . . ), che includono solo parte dei programmi
in modo da rispondere adeguatamente alle specifiche esigenze dell’utenza
target delle varie suite.
2.3
I formati Office
I file della suite Office più comuni sono i file di Word (.DOC), di Excel
(.XLS), di PowerPoint (.PPT) e di Access (.MDB). I file prodotti da questi
programmi sono problematici per la stessa suite Office. I motivi principali
sono:
- Versione del formato dei file: ad ogni versione della suite il formato interno dei file cambia. Questo (ad esempio) rende problematica la lettura di un documento prodotto con l’ultima versione di
Word 2003 anche solo con la versione precedente dello stesso software
(Word 2002/XP), sopratutto perché le nuove versioni usano funzionalità non previste nelle versioni precedenti. Il continuo aumento di
complessità, secondo i detrattori di Microsoft, ha raggiunto un tale
livello che nemmeno gli stessi progettisti sanno cosa ci sia dentro in un
file di Office.
- Versioning del contenuto dei file: una cosa che spesso viene ignorata dalla maggior parte degli utilizzatori dei programmi di Office é
6
2.3 I formati Office
- Dimensione dei file: é facile creare un file di Word con un paio
di righe di testo e scoprire che ha già raggiunto almeno un centinaio
di kilo-Byte. Ancora più sconcertante è il fatto che vengono salvate
anche le versioni del file e ciò comporta dover memorizzare altri dati
che spesso non servono affatto.
- Offuscamento del contenuto dei file: infine le politiche aziendali
hanno imposto anche un offuscamento del formato. Ciò ha comportato
un’ulteriore confusione su cosa ci sia in realtà all’interno di un file del
pacchetto Office. La principale motivazione al riguardo é la necessità
di evitare che suite concorrenti4 possano sfruttare come punto di forza
dei propi prodotti, oltre a un costo inferiore anche la compatibilità con
il formato più diffuso.
Alcuni file di Office possono contenere più di un oggetto, per esempio
un documento di Word può contenere immagini, suoni, documenti di Excel.
Per Ottenere questo risultato Microsoft ha adottato un sistema chiamato
Compound Document File Format[6]. Questo formato lavora come un piccolo file system e permette di contenere un numero indipendente di data
stream, organizzati tra loro tramite directory/storage. Ogni documento ha
un root storage che è il padre, diretto o indiretto, di tutte le altre directory e
di tutti gli stream. Ogni stream é formato da un header e più settori, questi
ultimi sono collegati tra loro tramite un puntatore5 . L’header definisce la
dimensione e l’inizio della lista dei settori. Nonostante i settori siano numerati in ordine crescente questo non rappresenta l’ordine reale che é invece
definito dalla lista che parte dall’header dello strem. Il Compound Document
File Format viene usato principalmente per contenere vari file che possono
venire modificati separatamente e con programmi diversi, in modo tale che
le modifiche vengano riconosciute in tutto il contesto del file. Ad esempio
potremmo avere un documento di testo con all’interno una immagine, mentre lavoriamo con possiamo scegliere di modificare l’imagine con un altro
programma. Dopo aver apportato delle modifiche all’immagine la salviamo e, quando torniamo al nostro documento, potremo vedere che anche
l’immagine all’interno é stata aggiornata. Il formato non verrà trattato ulteriormente all’interno della tesi. Questi accenni sono utili per una migliore
comprensione dei formati che verranno esposti nelle prossime sezioni.
Ora proseguiamo nell’analisi degli aspetti basilari dei quattro formati più
importanti della suite Office. Le informazioni esposte esposte nelle prossime
sezioni, sono state reperite principalmente grazie al lavoro di documentazione svolto da parte della comunità open-source. Nonostante Microsoft
abbia svolto un ampio lavoro riguardante la struttura dei formati usati dalla
suite Office, questi non sono pubblicamente disponibili ma vengono rilasciati
grazie ad accordi di partnership e grazie a delle licenze di
2.3.1
Documenti di Word
Word é un programma che permette di redarre dei documenti ed é il moderno
sostituto della macchia da scrivere. In un documento Word possono essere
incluse tabelle di Excel, immagini, grafici, formule matematiche oltre che
ovviamente testo formattato. Il formato di word é molto complicato ma
possiamo analizzarne brevemente gli aspetti principali.
Il testo viene salvato in un blocco unico nel caso in cui si sta salvando il
7
2.3 I formati Office
Record Header
Byte 0
1
2
3
Value 02 00 09 00
Opcode Lenght
8
Record Body
0
1
2
3
4
5
6
00 00 02 00 00 00 00
Row Column
CellAttr
7
8
39 00
Integer
Tabella 2.2: Esempio di un record BIFF di una cella di un intero
formato da un misto di caratteri ASCII, con alcune modifiche al significato di
alcuni caratteri6 , e di caratteri UNICODE. Attraverso una apposita tabella
possiamo sapere quali pezzi fanno parte del testo (questo nel caso di file di
tipo fastsave) e la loro lunghezza.
la formattazione del testo avviene invece attraverso stili. Questi possono essere stili di carattere o di paragrafo e vengono salvati in una tabella. Esistono inoltre due tabelle per pagina, una contente le informazione
per la gestione della formattazione da applicare ai caratteri e una per la
formattazione dei paragrafi.
2.3.2
I fogli di calcolo di Excel
Excel é forse il miglior prodotto per fogli di calcolo attualmente sul mercato. Negli anni si é dimostrato molto stabile, andando al contempo sempre in
direzione degli utenti e dell’usabilità. La sua interfaccia grafica si é rivelata
vincente, introducendo le barre degli strumenti e ispirandosi a VisiCalc 7 per
la visualizzazione dei dati e delle formule.
Il formato dei file di Excel é chiamato BIFF (BInary File Format) e
negli anni si é evoluto giungendo ormai alla sua ottava edizione. Nel 2001
con l’arrivo sul mercato di Office XP, il formato ha avuto una piccola revisione giungendo cosı̀ a BIFF8X. I file in formato BIFF sono incapsulati in un
documento OLE2, con il vantaggio di poter inserire all’interno di un file unico anche le informazioni riguardo a eventuali grafici, immagini, . . . correlati
con il foglio di calcolo.
Il file ha una struttura base, il workbook, che descrive le propietà comuni
a tutto il file (come l’autore, ultima modifica, . . . ). Il workbook ha inoltre
informazioni riguardo il numero di sheets o fogli presenti nel file, questi sheet
sono immagazzinati in stream differenti all’interno del file stesso. Lo stream
degli sheet é diviso in record di dimensione variabile, ognuno con un header
di 4 Byte. Questo é diviso in due campi di pari dimensioni, l’Header contiene un numero che identifica il tipo di record (numerico, formula, testo,
. . . ) e il Body che contiene la dimensione in byte del record a partire dal
successivo. Il formato BIFF prevede inoltre che gli interi vengano salvati
secondo il metodo Little-Endian. Questo metodo prevede che il byte meno
significativo sia salvato prima e il più significativo per ultimo (es. il seguente
intero di 32 bit 13579BDFH é convertito in DFH 9BH 57H 13H ).
Nell’esempio nella tabella 2.2 possiamo vedere un esempio di un campo
numerico intero. Il primo campo dell’header é l’Opcode, che rappresenta il
tipo di record, in questo caso 2 é quello per il record integer. Tra i vari opcode disponibili ci sono quelli per formule, numeri, stringhe, gruppi di celle,
formattazione del testo, inizio e fine del file, . . . Successivamente abbiamo il
2.3 I formati Office
Figura 2.1: Struttura interna di un file salvato con PowerPoint
iniziano i campi relativi al tipo di record indicato dall’ Opcode, quindi il numero di riga e di colonna della cella, che ci indicano che le informazioni sono
relative alla cella in posizione C1 (questo perché a video le colonne partono
dalla A e le righe da 1), i 3 byte contrassegnati da CellAttr sono una prerogativa dei record più del formato BIFF e contengono alcune informazioni
sulla rappresentazione della cella a video (i bordi intorno alla cella, il font
da usare, . . . ); infine é presente il valore della cella 57, un intero senza segno.
Uno dei punti di forza di Excel é sicuramente la velocità con cui vengono
caricati i suoi file, questo perché non obbliga a dover rivalutare tutte le formule ed espressioni presenti nel file. Questo era un grosso vantaggio rispetto
alla concorrenza negli anni 90, quando la potenza dei calcolo disponibile
nonera certo quella attuale. Da allora il formato si é evoluto aggiungendo
e rimuovendo tipi di record, ma grazie ad una struttura solida il formato
non ha subito stravolgimenti. Questa stabilità del formato ha permesso a
parecchi progetti open-source di implementare un efficace funzione di lettura
per i file di Excel.
2.3.3
Presentazioni di PowerPoint
PowerPoint negli anni si é imposto come il più usato programma per la
creazione di presentazioni e slide per Windows. Offre ampie opportunità di
personalizzazione delle presentazioni e permette di incorporare in esse immagini e video. Fornisce inoltre anche una vasta gamma di animazioni da
usare sul testo e sul contenuto delle presentazioni.
Dal punto di vista tecnico i file di PowerPoint sono un perfetto esempio
di file che sfruttano tutte le potenzialità dei file OLE2. Il file contiene due
tipi di oggetti: gli atom e i container. I primi rappresentano le unità basilari
dei contenuti del file, possono essere stream di file oppure atom contenenti
le informazioni riguardo gli oggetti della presentazione (es. un’animazione,
un suono, i colori del testo, . . . ). Il compito dei container non sono che gli
storage precedentemente presentati, possono contenere altri container e/o
altri atom.
Un file PPT ha 5 container principali: Pictures, contiene gli stream delle
immagini usate nella presentazione; Current User, contiene le informazioni
dell’utente che sta accedendo al file; PowerPoint Document, contiene le in-
9
2.4 Analisi delle soluzioni possibili
Nonostante il formato del file non sia stato stravolto, con il passare
delle versioni sono stati aggiunti nuovi atom, che rappresentano in particolar modo nuove animazioni ed effetti di transizione fra diapositive. Queste
modifiche sono documentate, ma non pubblicamente disponibili.
2.3.4
Database Access
Il formato di Access esula dai nostri scopi perché ritenuto marginale nei
confronti degli altri formati della suite Office. Inoltre per qualsiasi necessità
di database il prodotto DocWeaver richiede la presenza di un database server
(Microsoft SQL server, Postgresql, . . . ), che potrà essere usato per coprire
anche le altre esigenze dell’azienda.
2.4
Analisi delle soluzioni possibili
Il problema principale é l’anteprima e l’estrazione del testo di documenti della suite Microsoft Office, che come abbiamo visto precedentemente é ostica.
Si é rivelato quindi prioritario trovare un sistema che permette l’anteprima
e l’estrazione del testo da questo tipo di file. É seguito un lungo lavoro di
ricerca e valutazione di progetti e librerie volti alla soluzione, anche solo
parziale del problema.
Una soluzione alternativa consiste nel utilizzo di uno strumento complesso che ricalca le funzioni di Microsoft Office. OpenOffice.org. Questa
é stata la strada effettivamete intrapresa, nel capitolo ?? analizzeremo in
dettaglio le caratteristiche di questo strumento. Ora invece si soffermeremo
sulle soluzioni vagliate prima di effettuare la scelta su quella finale.
2.4.1
XBrowser
XBrowser8 é un progetto che ha sviluppato un web browser, completamente
in Java. Questo permette l’anteprima di file HTML, di immagini e di file di
solo testo. Purtoppo il progetto risulta abbandonato dall’Agosto del 2001,
questo comporta per l’azienda anche il dover mantenere e aggiungere anche
una buona parte di lavoro per l’aggiornamento del prodotto stesso.
2.4.2
iecanvas
iecanvas9 un piccolo progetto che punta all’inclusione all’interno di un programma Java, di una finestra del famoso browser Internet Explorer. Internet
Explorer può caricare dei plug-in che gli permettono di aprire file della suite
Office, tecnicamente questo sarebbe stato possibili anche per la finestra inclusa nel programma Java. Purtroppo anche questo progetto oltre a essere
abbandonato dall’Ottobre del 2003, si é anche rivelato incapace di fornire
l’anteprima di documenti Word o Excel.
2.4.3
Multivalent
Questo progetto fornisce un gruppo di classi e interfacce in Java per l’anteprima e la lettura di svariati tipi di file, tra cui anche il formato PDF. Il progetto
non gestendo i file in formato Word ed Excel é stato scartato anche per il
complessa lavoro di integrazione necessaio. http://multivalent.sourceforge.net/
8
http://xbrowser.sourceforge.net/
10
2.4 Analisi delle soluzioni possibili
2.4.4
Mozilla Webclient
Il progetto Mozilla Webclient 10 nasce con lo scopo di creare un set di API
scritte in Java che forniscono vari aspetti della navigazione su internet, quali
rendering dei contenuti del web, navigazione sul web, . . . Il progetto iniziato
da Kirk Baker e Ian Wilkinson si chiamava RaptorCanvas. Dopo lo scioglimento dell’accordo tra AOL, Netscape e Sun, il progetto riparte sotto l’egida
della sola Sun con il nome di Blackwood project e il cui scopo é quello di
aumentare l’integrazione tra Java e Mozilla. Uno dei sotto-progetti é appunto WebClient che grazie al contibuto di Kirk, Ian e di tecnici di Sun
Microsystem fornisce un’API per Java verso la webshell di Mozilla.11
Grazie a questo componente la realizzazione della parte di anteprima
dedicata a immagini, HTML e testo piano é molto semplice. Inoltre la
webshell di Mozilla mantiene le stesse propietà del browser. Se infatti gli
si fa aprire un file che non può gestire internamente, controlla se esiste
un plug-in che ne consente l’apertura. Grazie a questa feature é possibile
aprire anche file Adobe Acrobat, nel caso sia stato installato sul anche il solo
Acrobat Reader12 . Questa particolarità di Webclient estende le possibilità
di anteprima del programma anche ai file non elencati nelle specifiche di
progetto come i file Macromedia Flash (SWF).
2.4.5
Jakarta POI
Il progetto POI, acronimo di “Poor Obfuscation Implementation”, é un progetto che punta alla creazione
di una serie di librerie Java per la lettura e la scrittura
di file creati con la suite Microsoft Office. L’acronimo
del progetto si riferisce, in modo scherzoso, al tentativo di Microsoft di oscurare il codice dei propi formati
di file. Il sistema di offuscamento dei file é stato però
analizzato, scoperto e aggirato tramite tecniche
di Reverse Engineering 13 . Il progetto POI é ospitato dalla open-source
Apache Software Foundation 14 . La fondazione porta avanti molti progetti
open-source, alcuni sviluppati in Java. Il gruppo di progetti Jakarta, raccoglie buona parte dei progetti in linguaggio Java della fondazione. Tutti i
progetti open-source della fondazione Apache sono rilasciati sotto la Apache
License, un tipo di licenza open-source che permette di includere il codice
in software e progetti commerciali.
Alcune parti del progetto sono state sviluppate con maggior inpegno
e sono pertanto molto affidabili, tra queste le classi per la lettura degli
oggetti OLE2, la lettura scrittura di file di Excel (XLS). Sono invece molto
acerbe le componenti per la lettura scrittura di file di Word (DOC), dei file
di PowerPoint (PPT) e delle propietà dei file (tra le propietà dei ci sono:
autore, data di modifica, revisioni, . . . ). Poichè il progetto é incompleto non
´è stato possibile sceglierlo per la parte di estrazione del testo.
10
11
Capitolo 3
Un ingrediente della
soluzione proposta:
OpenOffice.org
Qui parlo un po’di openoffice, spiego cosa fa come funziona, le api che mette a
disposizione
3.1
Storia
La storia di OpenOffice ha inizio nel 1994 quando StarDivison 1 pubblicò la
prima versione di StarOffice, una suite di programmi per l’ufficio in diretta
concorrenza con Microsoft Office. Fino alla versione 4.2 StarOffice si basava
sulle librerie C++ multipiattaforma StarView. Durante l’Agosto del 1999
Sun Microsystem stava cercando una suite per l’ufficio per entrare in concorrenza con Microsoft, cosı̀ comprò da StarDivision il codice e i diritti su
StarOffice per circa 70 milioni di dollari. Ben presto rilasciò la versione 5.2
di StarOffice gratuita per uso personale.
Nel luglio del 2000 Sun rilascia buona parte del codice di StarOffice sotto
le licenze LGPL2 e SISSL3 . Nasce cosı̀ OpenOffice, ereditando il codice di
StarOffice e raccogliendo intorno a sè una attiva comunità di sviluppatori
open source. OpenOffice si deve però scontrare prima con un problema di
marchi registrati, cosı̀ il nome ufficiale del prodotto viene cambiato divenendo OpenOffice.org. Informalmente ci si riferisce al progetto con il nome di
OpenOffice o con l’abbreviazione OOo. Nell’Ottobre del 2001 la build 638c
diventa la prima beta pubblica, mentre la versione 1.0 viene rilasciata il primo Maggio 2002. Attualmente la versione stabile é la 1.5 rilasciata nel mese
di Settembre di quest’anno, la quale probabilmente sarà l’ultima della serie
1.x. Dopo molti mesi di versioni beta, siamo vicini al rilascio della prima
Release Candidate della versione 2.0 di OpenOffice.
3.2
Caratteristiche tecniche
OpenOffice è formato da diversi sottoprogrammi che condividino un’ampia
base di codice, permettendo di caricare più programmi della suite contemporaneamente senza appesantire eccessivamente il sistema. La suite é com1
2
Software house tedesca fondata nel 1986 da Marco Börries
3.2 Caratteristiche tecniche
posto da 5 programmi principali e da alcuni elementi condivisi da tutti i
programmi della suite:
- Writer: programma di videoscrittura molto simile a Microsoft Word.
Le sue qualità principali sono, oltre alla familiarità dei controlli rispetto
alla controparte, la possibilità di aprire e salvare i file in formato DOC
e PDF senza la necessità di alcun plugin.
- Calc: permette di creare e gestire fogli di calcolo, grafici e tabelle nella
massima semplicità, propio come in Microsoft Excel, ma va anche oltre
permettendo di generare grafici in quasi totale autonomia e di salvare
i risultati direttamente in formato PDF.
- Impress: programma adatto alla creazione di presentazioni simile a
Microsoft PowerPoint, con il vantaggio di poter esportare le presentazioni direttamente in formato Macromedia Flash, rendendo necessaria la sola presenza del plugin Flash (solitamente incluso nei browser)
e non di tutto OpenOffice per visionare le presentazioni.
- Draw: programma di grafica vettoriale con caratteristiche simili a
quelle di CorelDRAW. Supporta inoltre la possibilità di facilitare la
creazione di flow-chart.
- Base: é un motore di database molto simile al Microsoft Access, supporta inoltre una maggior varietà di database da quelli Microsoft, come
Access (JET) e le connessioni tramite ODBC, a quelli per piattaforme
*NIX, come MySQL e Postgresql. Base diventerà parte della suite
OpenOffice dalla versione 2.0 ed é attualmente in beta-testing.
- Math: componente studiato per inserire negli altri documenti OpenOffice formule matematiche, pensato per poter esportare i risultati nel
formato PDF.
- Macro: semplice linguaggio di scripting che permette di creare degli
shortcut per le operazioni più lunghe e noiose. Macro nasce dall’esperienza maturata da StarOffice Basic.
- Quickstarter: piccolo programma che parte all’avvio del computer
e permettendo di caricare più velocemente i programmi della suite
OpenOffice quando richiesto.
I formati usati per salvare i file di OpenOffice sono basati sull’XML e la
compressione ZIP, che rende i file più leggeri del complesso formato binario
di Office. Questa di mantenere i file della suite in solo testo ha permesso
una maggiore interoperabilità degli stessi tra le varie piattaforme supportate,
ma sopratutto ne ha favorito uno dei suoi aspetti chiave: l’essere multipiattaforma. Attualmente sono disponibili versioni per Microsoft Windows,
GNU/Linux, Mac OS X, OS/2 ed altri sistemi UNIX-Like.
La prossima versione 2.0 di OpenOffice mira a lanciare il nuovo formato
OpenDocument, promosso da OASIS4 , ma anche una maggiore integrazione
al look&feel e all’interoperabilità nei vari sistemi operativi supportati, usando sopratutto le widget grafiche messe a disposizione (Windows, Qt, GTK,
Aqua, . . . ), e infine migliorare il tempo di lancio delle applicazioni e le
possibilità di scripting.
13
3.3 Internals
3.3
Internals
3.4
Interazione con Java
14
Capitolo 4
Soluzioni
Qui spiego come ho realizzato la soluzione al problema richiesto
[nascondere la barra] [box di codice]
4.1
Strumenti e programmi necessari
Per lo sviluppo dei due programmi richiesti sono stato usato un computer
fornito dall’azienda. La macchina é un normale PC che monta un processore
Intel Pentium 4 a 2,4GHz, 512 MB di ram, con installato Microsoft Windows
XP service pack 2. Erano inoltre pre-installati i seguenti software utili per
lo sviluppo del progetto: Microsoft Office XP professional, Microsoft Visual
Studio .NET, Mozilla 1.7, Borland JBuilder 9 professional.
Per la realizzazione é stato necessario installare OpenOffice.org 1.4 (in
lingua inglese). Anche per far eseguire i programmi realizzati su altri computer é stato necessario installare OpenOffice, con l’accorgimento di abilitare
l’opzione server. La procedura per abilitare questa funzione del programma
é molto semplice ed é descritta in modo dettagliato nella guida dello sviluppatore di OpenOffice[3] nel capitolo 2 sezione 3.31 .
JBuilder é un programma scritto in Java per programmare in Java. La
prima versione risale al 1996. É molto apprezzato in ambito professionale e ha vinto per parecchi anni il premio come miglior IDE2 per la programmazione in Java. Per lo sviluppo degli applicativi é stato usato il solo
JBuilder.
4.2
L’estrazione del testo
La soluzione creata per l’estrazione del testo si compone di due parti: un
client scritto in Java e un server OpenOffice. Il programma DocWeaver,
su cui andrà integrato l’estrattore é composto di svariati client e un server centrale che gestisce i documenti. Questi vengono inviati dai client al
server il quale poi li salva in una cartella detta filestore a cui solo lui ha
accesso. Partendo da questi presupposti sappiamo che il server ha accesso
in lettura e scrittura al filestore. Spesso quest’ultimo é una cartella all’interno del filesystem del server oppure una cartella condivisa, fisicamente su
un’altro computer, tramite Samba, XFS, . . . Pertanto il server aprirà dei file
che sono locali per la struttura del filesystem. É consigliato che sia il client
che il server del mio applicativo siano posizionati sullo stesso computer per
4.2 L’estrazione del testo
Come potete vedere dalla figura 4.1 il programma é molto semplice esteticamente, una barra che contiene l’indirizzo del file aperto, un bottone che
consente tramite il selettore di file di Java di scegliere un file e il contenuto
estratto un’area di testo. Il programma é altrettanto semplice internamente,
per prima cosa é stato necessario includere in fase di compilazione le classi
Java di OpenOffice per permettere al programma di poter usare gli oggetti,
e funzioni messi a disposizione dal programma.
Figura 4.1: Il programma demo ha estratto il testo da un file word.
Una volta scelto il file da aprire, viene creata una connessione TCP al server
OpenOffice (fig.4.2), questo é molto semplice dato che negli esempi forniti
con il pacchetto SDK di OpenOffice é uno dei primi elementi trattati. Una
volta che il client si collega al server é pronto per richieder l’apertura del
file. Se l’operazione ha avuto successo restituisce un oggetto XComponent,
che purtoppo indica solo che il file é stato aperto senza alcun rifermento al
tipo di file con cui stiamo trattando.
// This connection string to connect the office
String sConnectionString = "uno:socket,host=192.168.1.20,port=8100;
urp;StarOffice.NamingService";
MultiServiceFactory xMSF = null;
try {
xMSF = connect(sConnectionString);
}
catch (Exception ea) {
ea.printStackTrace(System.out);
return;
}
Figura 4.2: Codice per la connessione a un server OpenOffice
Per capire se é stato aperto un file di Excel o un documento di testo é
stato usato un sitema semplice, per esclusione tramite dei cast dell’oggetto
XComponent é possibile risalire al tipo di documento (fig.4.3). Se non é
16
4.3 L’anteprima di documenti
che sfrutta le capacità di OpenOffice all’interno di Java, mentre per problemi legati alla natura dei file di Excel si é ricorsi ad un approccio più creativo.
OpenOffice una volta aperto il documento di testo lo rappresenta attraverso un insieme di paragrafi parole e caratteri. L’oggetto che rappresenta
un paragrafo fornisce un metodo per leggere e modificare il testo dell’intero
paragrafo. L’operazione di estrazione si limita quindi ad accedere in modo
sequenziale ai paragrafi estraendo il testo, quando presente, e appendendolo
ad una stringa. Quando si giunge alla fine del documento sarà sufficiente
ritornare la stringa (fig.4.4). Il codice é stato prodotto velocemente grazie
all’uso degli esempi e dei tutorial forniti nel SDK di OpenOffice.
L’estrazione del testo da fogli di calcolo invece é stata difficoltosa. Un
foglio di calcolo é infatti strutturato tramite celle, queste sono identificate
tramite una griglia di righe e colonne. Questa griglia é di dimensioni consistenti: 32.000 righe e altrettante colonne. Nonostante la gran mole di documentazione disponibile sull’organizzazione interna degli oggetti di OpenOffice non é stato possibile rintracciare in quali parametri é memorizzato il
numero di righe e colonne effettivamente usato. La documentazione del
SDK di OpenOffice mostra alcuni esempi di salvataggio ed esportazione di
un file di Excel tramite codice. Tra i vari formati di esportazione disponibili
c’é anche un formato HTML. I file esportati in questo formati sono formati
da solo testo formattato tramite tag HTML, inoltre viene esportato tutto il
contenuto di tutti i fogli di calcolo presenti nel file originale. La soluzione
adottata prevede di esportare il file in un formato più semplice da gestire
in un file di appoggio, accedere al file esportato caricandolo in un stringa e
ripulirlo dai tag HTML tramite uno StringTokenizer.
4.3
L’anteprima di documenti
Il programma creato per mostrare l’anteprima di file prodotti con la suite
Microsoft Office é molto semplice, ma necessita l’installazione di OpenOffice
sul computer che lo vuole eseguire. Il funzionamento é semplice, si crea una
finestra normalmente, tra i pannelli si aggiunge l’oggetto BasicOfficeBean,
che può essere trovato nella sezione Java del SDK della Developer Guide di
OpenOffice. Questo oggetto si limita a inserire all’interno dell’applicazione
Java l’ambiente e la strumentazione di OpenOffice.Il problema di questa
soluzione é la continua persenza a video delle barre delle opzioni legate a
OpenOffice, che permettono di modificare il contenuto del file. Questo comportamento dell’applicativo é errato, infatti bisogna fornire un’anteprima
del file e non una finestra per modificarlo.
Negli esempi di codice forniti nel SDK é stata trovata una soluzione simile
ma che nasconde tramite del codice alcune opzioni. Una ricerca nella documentazione ha mostrato una quantità impressionante di opzioni disponibili,
protected Object getType(\emph{XComponent} xC) {
XSpreadsheetDocument xSpreadsheetDocument = (XSpreadsheetDocument)
UnoRuntime.queryInterface(XSpreadsheetDocument.class, xC);
if (xSpreadsheetDocument!=null) return xSpreadsheetDocument;
XTextDocument xTextDocument = (XTextDocument)
UnoRuntime.queryInterface(XTextDocument.class, xC);
if (xTextDocument!=null) return xTextDocument;
17
4.3 L’anteprima di documenti
XText xText = xTextDocument.getText();
XEnumeration xParagraphEnumeration = null;
XTextContent xTextElement = null;
// create an enumeration access of all paragraphs of a document
XEnumerationAccess xEnumerationAccess = (XEnumerationAccess)
UnoRuntime.queryInterface(XEnumerationAccess.class, xText);
xParagraphEnumeration = xEnumerationAccess.createEnumeration();
// Loop through all paragraphs of the document
while (xParagraphEnumeration.hasMoreElements()) {
xTextElement = (XTextContent)
UnoRuntime.queryInterface(XTextContent.class, xParagraphEnumeration.nextElement());
XServiceInfo xServiceInfo = (XServiceInfo)
UnoRuntime.queryInterface(XServiceInfo.class, xTextElement);
// check ifs the current paragraph really a paragraph or an anchor of a frame or picture
if (xServiceInfo.supportsService("com.sun.star.text.Paragraph")) {
XTextRange xTextRange = xTextElement.getAnchor();
//System.out.println("This is a Paragraph");
to += xTextRange.getString();
}
}
Figura 4.4: Estrazione del testo tramite l’accesso hai paragrafi.
XStorable xStorable = (XStorable)
UnoRuntime.queryInterface(XStorable.class, xSpreadsheetDocument);
// Set up the Overwrite and FilterName properties
PropertyValue[] propertyvalue = new PropertyValue[2]; ;
propertyvalue[0] = new PropertyValue();
propertyvalue[0].Name = "Overwrite";
propertyvalue[0].Value = new Boolean(true);
propertyvalue[1] = new PropertyValue();
propertyvalue[1].Name = "FilterName";
propertyvalue[1].Value = "HTML (StarCalc)";
// Store the document
xStorable.storeToURL(cAppFileUrl, propertyvalue);
Figura 4.5: Esportazione di un file Excel in un file HTML.
tra le quali alcune per limitare la libertà di azione dell’utente. Il codice in
figura 4.6 mostra il codice necessario per nasconder la barra dei menu dal
pannello caricato nell’applicazione.
Per evitare di dover scrivere molte volte del codice simile, che aumenta
la confusione nel codice e la possibilità di sbagliare durante le modifiche, é
stata creata una classe per eseguire questo genere di operazioni ripetitive.
La classe creata però non contiene direttamente i valori su cui poter agire,
questi infatti sono troppo numerosi per stare in un’unica classe. Estendendo
la classe sono state create sette sottoclassi che coprono ognuna delle specifiche aree delle funzioni offerte dal programma. La classe CommandGlobal
contiene i comandi globali di OpenOffice (es. Save, OptionBarVisible, . . . )
mentre la classe CommandCalc contiene le opzioni per modificare l’aspetto
e il funzionamento della parte legata alla gestione dei fogli di calcolo (es.
EuroConverter, DrawChart, . . . ).
OfficeCommand command;
if (isDocumentLoaded() == true) {
command = new OfficeCommand(SID_TOGGLEMENUBAR);
command.appendParameter("MenuBar", new Boolean(false));
command.execute(this);
18
4.3 L’anteprima di documenti
officeBean.load(file.toURL().toString());
glob.setCommand("Save", false, this.officeBean);
glob.setCommand("MenuBarVisible", false, this.officeBean);
glob.setCommand("StatusBarVisible", false, this.officeBean);
glob.setCommand("FunctionBarVisible", false, this.officeBean);
glob.setCommand("CommonTaskBarVisible", false, this.officeBean);
glob.setCommand("NavigationBarVisible", false, this.officeBean);
glob.setCommand("ObjectBarVisible", false, this.officeBean);
glob.setCommand("OptionBarVisible", false, this.officeBean);
glob.setCommand("ToolBarVisible", false, this.officeBean);
officeBean.setVisible(true);
Figura 4.7: Caricamento di un file nel componente OpenOffice e rimozione
delle barre degli strumenti
Grazie all’uso di queste classi la creazione del programma é stata molto
semplice e si limita a poche righe di codice. L’interfaccia grafica ricalca quella del programma di estrazione del del testo, presenta la barra con l’indirizzo
del file aperto, in pulsante per scegliere il file da aprire tramite le funzioni
di selezione file di Java e il pannello con all’interno OpenOffice. Questo programma permette di effettuare anteprime di tutti i formati supportati da
OpenOffice : Word, Excel, PowerPoint, HTML, RTF, i formati proprietari
della suite, . . .
19
Capitolo 5
Risultati e Conclusioni
Dopo aver svolto il lavoro di implementazione é necessario analizzare i risultati
ottenuti dai programmi. Il tempo impiegato dai programmi é un buon metro
di valutazione per applicativi dimostrativi come quelli realizzati. Oltre al lavoro
di valutazione obbiettiva é necessario guardare oltre e iniziare a valutare nuove
soluzioni al problema, che potranno essere realizzate con strumenti oggigiorno
non ancora disponibili.
5.1
Risultati
I programmi sono stati testati su tre computer, il computer su cui é stato
sviluppato, un pc linux con un processore P4ht 2,4GHz cun 1 GB di RAM e
un portatile con Intel Clereon 1.2 GHz con 256 MB di RAM. Il portatile ha
installato Windows XP Home Edition con Service Pack 2, mentre il computer di sviluppo la versione Professional con Service Pack 2. La macchina linux
invece ha installato un distribuzione Slackware 10.1 con kernel 2.6.11.10 ricompilato per supportare la RAM. I primi due computer non hanno avuto
problemi ad eseguire i due programmi con prestazioni simili e tempi di caricamento pressoché uguali. Il portatile invece ha avuto difficoltà ad eseguire
i due programmi, questo perché la poca memoria disponibile nel sistema
rallentava molto le operazioni di caricamento. Dopo questi test pertanto é
consigliabile eseguire i programmi sucomputer dotati almeno di 512 MB di
RAM, per evitare eccessivi rallentamenti durante il caricamento dei componenti necessari all’esecuzione.
I programmi prodotti con JBuilder sono semplici e funzionali, questo per
permettere una corretta valutazione delle reali prestazioni del codice che fa
uso della componente OpenOffice.org. Come é possibile vedere nell’immagine 5.1 l’estrattore del testo si limita a mostrare il contenuto della stringa
estratta a video. Questa non é era specificato nel testo della consegna, ma
risulta utile per valutare il corretto funzionamento del programma. Nel caso
in cui vengano integrati gli oggetti all’interno di un altro prodotto, i metodi
a loro associati ritornano delle stringhe.
Il programma Anteprima, funziona anch’esso molto bene, ma mantiene
una particolarità: nel pannello presentato all’interno della finestra Java gli
strumenti presenti rispecchiano il tipo di file aperto. Come é possibile vedere
in figura 5.2 i documenti di testo presentano il classico righello con le dimensioni della pagina. Nel caso di file di Excel rimane visibile la barra che
5.1 Risultati
Figura 5.1: L’estrattore del testo visualizza il testo estratto da un riassunto.
schermo.
Figura 5.2: L’anteprima di un file di Word grazie ad OpenOffice.
Per valutare l’efficenza dei due programmidi prova, é stato misurato il
tempo necessario per eseguire le operazioni di anteprima ed estrazione del
testo. Queste misurazioni sono state effettuate tramite una piccola classe
cronometro che calcola il tempo passato tramite l’orologio di sistema. Le
misurazioni pertanto sono da ritenersi sperimentali e strettamente dipendenti dal sistema operativo e dal numero di processi attivi durante l’esecuzione
dei test.
Come é possibile osservare nelle seguenti tabelle il programma Anteprima, ha bisogno di caricare l’interfaccia grafica di OpenOffice all’apertura del
primo file della sessione. Questa operazione é in genere abbastanza laboriosa
21
5.1 Risultati
22
[todo]Tabella di word
Tabella 5.1: Tempi di anteprima di file Word.
il tempo necessario a visualizzare l’anteprima di un file di word dipende dalla
lunghezza del testo e dalle dimensioni del file. Fattore da non escludere é
la complessità del file, molte immagini, grafici, ed elementi complessi rallentano l’anteprima dei file. I file usati come bozze sono anche ricchi di testo
aggiuntivo dovuto al salvataggio progressivo del file, come spiegato nella
sezione [todo riferimento].
[todo]Tabella di Excel
Tabella 5.2: Tempi di anteprima di file Ecel.
Anche nei file di Excel la dimensione e il numero di celle presenti nel file
sono elementi che determinano la performance delle operazioni di anteprima.
Ma l’elemento che forse più ne penalizza le performance é la quantità di formattazione presente all’interno delle celle. Questa più é complessa maggior
tempo richiede per una corretta visualizzazione dei file.
[todo]Tabella di powerpoint
Tabella 5.3: Tempi di anteprima di file Powerpoint.
Per l’anteprima le presentazioni di PowerPoint é molto importante il numero di slide che fanno parte della presentazione. Per ognuna di esse infatti
viene generata una anteprima al volo e mantenuta in memoria in attesa che
venga visualizzata. Altri file inclusi nella presentazione, quali musiche, immagini, grafici, non rallentano molto l’apertura perché vengono caricati solo
quando effettivamente necessari. Gli effetti tra le slide vengono usati solo
durante la visualizzazione della presentazione a pieno schermo e durante il
processo di anteprima vengono ignorati.
le prestazioni dell’estrattore del testo come é possibile vedere dalla tabella [todo riferimento] sono molto buone su file di dimensioni contenute. Man
mano che la dimensione del file aumenta anche il tempo di esecuzione della
funzione di estrazione. Questa non è propiamente una pecca poiché l’estrazione del testo e la sua successiva immissione all’interno della base di dati
non necessita del un response time necessario per un’interfaccia grafica.
5.2 Sviluppi futuri
[todo]Tabelle di estrazione del testo
Tabella 5.4: Le performance dell’estrattore del testo.
5.2
Sviluppi futuri
Il lavoro svolto all’interno dell’azienda, tramite la realizzazione dei due programmi demo, si é rivelato molto utile. Ha permesso di conoscere prodotti
e soluzioni potenti per risolvere il problema. I programmi demo richiedono
comunque delle modifiche, atte sopratutto a migliorarne le prestazioni. All’interno della classe che gestisce i comandi settabili all’interno del pannello
di OpenOffice, visto nel paragrafo [todo ref], andrebbero migliorati gli algoritmi di ricerca delle chiavi. L’estrattore invece ha bisogno di un nuovo
set di codice per gestire l’estrazione del testo dai file PowerPoint, negli algoritmi di estrazione andrebbe rivista il sistema di allocazione dello spazio
delle stringhe che può portare a un sovraccarico del sistema, con relativo
rallentamento delle altre applicazioni ospiti.
Inoltre il rapido sviluppo della suite OpenOffice ha portato molte novità
all’interno del panorama futuro delle applicazioni d’ufficio. La prossima release di OpenOffice, la 2.0, promette un nuovo standard per il salvataggio dei
file. Il nuovo formato, chiamato OpenDocument, é basato su file XML1 compressi. Il nuovo formato promette una maggiore interoperabilità tra le varie
applicazioni che ne faranno uso. Lo standard é promosso da OASIS (Organization for the Advancement of Structured Information Standards), un’organizzazione che promuove standard aperti. Recentemente lo standard é stato
sottoposto all’International Organization for Standardization (ISO) per far
diventare OpenDocument uno standard ISO/IEC. Gli sforzi di OASIS per
rendere OpenDocument il formato standard per la prossima genereazione di
applicativi per l’ufficio rischiano di essere nulli se Microsoft non includerà
il supporto a tale formato nella prossima versione della sua suite. Infatti,
nonostante faccia parte del consorzio OASIS, ha già annunciato che nel nuovo Office 12, previsto per il prossimo anno, il formato di default per salvare
i file sarà basato sulle specifiche WordprocessingML, SpreadsheetML e altri
formati basati su XML. La comunità open-source é molto scettica rispetto
ai nuovi formati di Office. Nonostante infatti le specifiche sono state pubblicate dalla stessa Microsoft, molti temono che il formato non sia ancora
completo, cosa che potrebbe a portare a modifiche in corso d’opera. Il tipo
di licenza utilizzato da Microsoft é incompatibile con le licenze usate solitamente da progetti open-source come la GPL, infine sono state usate alcune
licenze Microsoft all’interno del formato che minano la possibilità di ottenere
implementazioni di terze parti. WordML e i nuovi formati di Office 12 sono
molto simili allo standard OpenDocument, infatti ambedue usano dei file
XML comepressi tramite algoritmi di compressione ZIP.
La release della nuova versione di OpenOffice é molto importante perché
permetterà di installare all’interno dei browser prodotti da Mozilla Foundation un plug-in che permetterà di aprire i documenti supportati dalla suite
nella finestra del browser stesso. Questo plug-in permetterà di ottenere un
effetto simile a quello offerto da Internet Explorer insieme ad Microsoft Office. Grazie a questo plug-in la soluzione al problema di anteprima può
essere risolto tramite il solo uso di WebClient, il cui funzionamento abbiamo
illustrato nella sezione [todo ref]. Infatti sarà il componente di WebCliente
23
5.3 Conclusioni
5.3
Conclusioni
Quasi, ma non prorio, l’intro al passato.
24
5.3 Conclusioni
Figura 5.3: La barra dei file di Excel rimane visibile per mostrare il reale
contenuto della celle.
Figura 5.4: Tramite i pulsanti in alto a destra é possibile par partire la
presentazione delle slide.
25
Bibliografia
[1] Irpe Presentazione di DocWeaver. Irpe,
19-Set-2005.
[2] Wikipedia Wikipedia. Wikipedia, http://www.wikipedia.org
[3] OpenOffice.Org Developer’s Guide. OpenOffice.org, http://api.
openoffice.org/DevelopersGuide/DevelopersGuide.html,
26-Aug-2003.
[4] Java Sun Developer Network. Sun Microsystem http://java.sun.
com/docs/books/
[5] OpenOffice.org http://www.openoffice.org.
[6] Daniel Rentz Microsoft Compound Document File Format
OpenOfice.org,
24-Mar-2005. http://sc.openoffice.org/compdocfileformat.pdf.
[7] Daniel Rentz Microsoft Excel File Format OpenOfice.org,
24-Mar-2005. http://sc.openoffice.org/excelfileformat.pdf.
[8] Microsoft Microsoft Word 97 Binary File Format Microsift,
21-Dec-1998. http://www.wotsit.org/download.asp?f=wword8.
[9] Microsoft Microsoft PowerPoint 97 File Format SDK OpenOfice.org,
24-Mar-2005.
http://www.wotsit.org/download.asp?f=
powerpoint97.