Newsgroup: it.comp.java
Titolo: Leggere con java il contenuto di PDF e file Microsoft Word

Ciao a tutti!
Sono alle prese con lo sviluppo di un'applicazione RSVP in java e al
momento mi sono scontrato contro una forte limitazione, cioè posso
solo far visualizzare alla mia applicazione i file txt... :(
A questopunto mi sono detto: "Se devo fare una bella applicazione, che
sia davvero utile devo almeno renderla in grado di leggere qualcosa di
+ del solo file di testo" e ho iniziato a cercare in rete una qualche
libreria per leggere i file PDF e una per leggere i file doc.
Questa ricerca ho scoperto essere troppo dispersiva e gravemente
mutilata dalla mia conoscenza della lingua inglese.. per cui ho
pensato di rivolgermi a voi.
Qualcuno di voi sa darmi una mano in un qualsiasi modo? Vanno bene
consigli e suggerimenti di qualsiasi genere
ciao a tutti e grazi ein anticipo
Marco


tali file...pdf o word..li devi leggere e manipolare....solo mostrarli
a video.....o che??
Linus

devo leggere il testo che contengono e poi mostrarlo parola per parola
Non mi interessa per adesso la formattazione, cioè non mi interessa se
una parola è scritta in grassetto o corsivo, o se è scritta in blu
anzichè in verde.
certo la formattazione sarebbe un bel upgrade ma teneiamocelo per la
prox versione... o no? ;)
Ciao
Marco

per quanto riguarda il testo io ho utilizzato la libreria
jpedal(
www.jpedal.org
).
per quanto riguarda word ora non ricordo quale sia la libreria
utilizzata ma esiste di sicuro.
ma se devi solo visualizzare il contenuto di un file non ti conviene
aprirlo con l'editor predefinito(acrobat reader,word,ecc..)??

Il fatto è che con word acrobat e simili puoi anche modificare il
file, mentre io vorrei solo visualizzarlo.
Poi con queste applicazioni il testo devi scorrerlo tu, mentre con la
mia tieni fermo lo sguardo su un punto dello schermo e ci pensa il
programma a farti vedere in quel punto le parole (1, 2, 3 o quante
vuoi per volta), in quel riquadro di spazio. In questo modo impieghi
meno tempo a leggere un documento
ti farebbe schifo questa possibilità? :)
in caso di problemi con l alibreira posso chiederti aiuto? Grazie cmq
Marco

scusami...i file che dovresti visualizzare dove risiedono...nel disco
fisso dell'utente che usa il tuo programma??e non può modificarlo lo
stesso?se non vuoi che lo modifichi settalo come di sola lettura....
e poi Acrobat Reader non ti permette di modificare il file.
Linus

i file che possono essere aperti possono risiedere sul disco fisso
dell'utente, in una LAN oppure su server remoto
il problema non è il modificare, o meno, il file am di ridurre i tempi
necessari per la lettura di un documento.
Ipotesi, se con questo programma puoi recuperare anche solo il il 5 o
il 10% del tempo nella lettura del documento, questo tempo recuperato
puoi investirlo in qualche altra attività o dedicarlo alla tua dolce
metà o alle tue passioni.
Marco

io ho scritto acrobat, non acrobat reader....
è un dettaglio ma acrobat può scriver i pdf...

 è un dettaglio ma acrobat può scriver i pdf...
è vero...
anche se sono in pochi ad avere la licenza di acrobat....costa un
botto....
cmq se vuoi questo è il codice per leggere i pdf...
package com.federico.pdfreader;
import java.io.*;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import org.jpedal.PdfDecoder;
import org.jpedal.exception.PdfException;
import org.jpedal.exception.PdfSecurityException;
import org.jpedal.grouping.PdfGroupingAlgorithms;
import org.jpedal.objects.PdfPageData;
import org.jpedal.utils.LogWriter;
import org.jpedal.utils.Strip;
public class EstrattoreTesto extends Thread {
	private String filename;
	private int wordsExtracted;
        private PdfDecoder decodePdf;
        private String outputDir;
        private Pdfreader frame;
	public EstrattoreTesto(String filename,pdfreader frame) {
		this.filename=filename;
                this.frame=frame;
	}
	public void estrai() {
            this.start();
        }
        public void run() {
            PdfDecoder.useTextExtraction();
            outputDir ="c:\\pdfreader\\";
            try {
                decodePdf = new PdfDecoder(false);
                decodePdf.setExtractionMode(1);
                decodePdf.init(true);
                PdfGroupingAlgorithms.useUnrotatedCoords = false;
                System.out.println("Apertura file :" + filename);
                decodePdf.openPdfFile(filename);
            }
            catch(Exception ex) {
                System.out.println(ex.toString());
            }
            if(decodePdf.isEncrypted() && !
decodePdf.isPasswordSupplied() && !decodePdf.isExtractionAllowed()) {
                    System.out.println("Impossibile eseguire
l'estrazione per politiche di sicurezza sul file");
            }
            else {
                boolean flag = true;
                int j = decodePdf.getPageCount();
                try {
                    for(int k = ((flag) ? 1 : 0); k < j + 1; k++)
                    {
                        decodePdf.decodePage(k);
                        PdfGroupingAlgorithms pdfgroupingalgorithms =
decodePdf.getGroupingObject();
                        PdfPageData pdfpagedata =
decodePdf.getPdfPageData();
                        int l = pdfpagedata.getMediaBoxX(k);
                        int i1 = pdfpagedata.getMediaBoxWidth(k) + l;
                        int j1 = pdfpagedata.getMediaBoxX(k);
                        int k1 = pdfpagedata.getMediaBoxHeight(k) -
j1;
                        System.out.println("Estrazione pagina "+k);
//                        JFrame f=new JFrame();
//                        JTextField tp=new JTextField("Estrazione
pagina "+k);
//                        f.add(tp);
//                        f.setVisible(true);
                        Vector vector = null;
                        try {
                            vector =
pdfgroupingalgorithms.extractTextAsWordlist(l, k1, i1, j1, k, false,
true, "&:=()!;.,\\/\"\"''");
                        }
                        catch(PdfException ex)
                        {
                            decodePdf.closePdfFile();
                            System.err.println("Eccezione = " + ex );
                        }
                        if(vector == null) {
                            System.out.println("Testo non trovato");
                        }
                        else {
                            File file = new File(outputDir);
                            if(!file.exists())
                                file.mkdirs();
                            int l1 = vector.size() / 5;
                            wordsExtracted = wordsExtracted + l1;
                            OutputStreamWriter outputstreamwriter =
new OutputStreamWriter(new FileOutputStream(outputDir + "pagina-" + k
+ ".doc"), "UTF-8");
                            String s2;
                            int i2;
                            int j2;
                            int k2;
                            int l2;
                            for(Iterator iterator = vector.iterator();
iterator.hasNext(); outputstreamwriter.write(s2+" ")) {
                                s2 = (String)iterator.next();
                                s2 = Strip.convertToText(s2);
                                i2 =
(int)Float.parseFloat((String)iterator.next());
                                j2 =
(int)Float.parseFloat((String)iterator.next());
                                k2 =
(int)Float.parseFloat((String)iterator.next());
                                l2 =
(int)Float.parseFloat((String)iterator.next());
                            }
                            outputstreamwriter.close();
                        }
                        decodePdf.flushObjectValues(false);
                    }
                }
                catch(Exception ex)
                {
                    decodePdf.closePdfFile();
                    System.err.println("Eccezione: " + ex);
                    ex.printStackTrace();
                }
                decodePdf.flushObjectValues(true);
                System.out.println("Testo letto");
            }
            decodePdf.closePdfFile();
            decodePdf = null;
            JOptionPane.showMessageDialog(frame,"Estrazione
effettuata");
    }
}
questa classe usa altre classi del mio progetto...
cmq è lei che si occupa della lettura del file pdf...
estrapola ciò che ti serve...
e in bocca al lupo
Linus

questa classe esporta il pdf in txt?
se si è proprio una manna la cosa!!!
Grazie 1000!!!!
appena il programma sarà pronto te ne farò avere una copia dato che
penso di rilasciarlo in gpl per lo scopo didattico sul sito di un mio
amico...
ciao
Marco


Se vai sul sito c'è un ampia documentazione....con tanti esempi.....e
a quanto mi risulta si può fare quello che dici tu....
a me non serviva mantenere l'impaginazione...questo programma l'ho
usato per leggere i pdf sull'ipod...
Linus