Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [JAVA] Estrazione metadati e gestione PDF

    Salve a tutto di nuovo.
    Dopo aver risolto i problemi con McKoi grazie al vostro aiuto, torno da voi chiedendo consigli sulla seconda fare sel software che devo implementare ovvero la gestione dei PDF.

    L'esigenza è quella di riuscire ad ottenere il maggior numero di informazioni automaticamente, a partire da un PDF. Per informazioni intendo il titolo del documento, la versione, l'autore ecc... (considerando anche la differenza tra le due. Per esempio posso avere un documento pdf che contiene un paper scritto da Mickey Mouse intitolato "Topolinia in serie A" ma l'autore del file vero e proprio è un altro ovvero quello che ha creato il file vero e proprio)

    Ho cercato su questo forum tutto ciò che era inerente Java ed i PDF ma ho trovato solo qualche post su come stamparli (interessanti comunque) ed alcuni altri che parlavano di conversioni tra pdf ed rtf con purtroppo pochi post di risposta.

    La mia esigenza è quella di poter:
    1. Recuperare i metadati del pdf ovvero i dati contenuti nei tag del PDF (come gli id tag degli MP3);
    2. Riuscire in qualche modo a fare un parsing del documento per cercare di caprirne più informazioni possibili, con magari anche il recupero delle informazioni sulle eventuali indicizzazioni, elenco capitoli ecc...)

    Ho guardato un po' sulla rete ma a parte una applicazione da 6000$, ho trovato solo qualche piccola classe come PDFTextStream che tra l'altro mi tocca richiamare da remoto e questo non mi va bene dato che devo fare una applicazione stand alone.

    Mi rivolto quindi alla vostra esperienza.

    Grazie e alla prossima...
    .:[Mr.Mime]:.

  2. #2

    Re: [JAVA] Estrazione metadati e gestione PDF

    Originariamente inviato da Mr.Mime
    Salve a tutto di nuovo.
    Dopo aver risolto i problemi con McKoi grazie al vostro aiuto, torno da voi chiedendo consigli sulla seconda fare sel software che devo implementare ovvero la gestione dei PDF.

    L'esigenza è quella di riuscire ad ottenere il maggior numero di informazioni automaticamente, a partire da un PDF. Per informazioni intendo il titolo del documento, la versione, l'autore ecc... (considerando anche la differenza tra le due. Per esempio posso avere un documento pdf che contiene un paper scritto da Mickey Mouse intitolato "Topolinia in serie A" ma l'autore del file vero e proprio è un altro ovvero quello che ha creato il file vero e proprio)

    Ho cercato su questo forum tutto ciò che era inerente Java ed i PDF ma ho trovato solo qualche post su come stamparli (interessanti comunque) ed alcuni altri che parlavano di conversioni tra pdf ed rtf con purtroppo pochi post di risposta.

    La mia esigenza è quella di poter:
    1. Recuperare i metadati del pdf ovvero i dati contenuti nei tag del PDF (come gli id tag degli MP3);
    2. Riuscire in qualche modo a fare un parsing del documento per cercare di caprirne più informazioni possibili, con magari anche il recupero delle informazioni sulle eventuali indicizzazioni, elenco capitoli ecc...)

    Ho guardato un po' sulla rete ma a parte una applicazione da 6000$, ho trovato solo qualche piccola classe come PDFTextStream che tra l'altro mi tocca richiamare da remoto e questo non mi va bene dato che devo fare una applicazione stand alone.

    Mi rivolto quindi alla vostra esperienza.

    Grazie e alla prossima...
    Scusa ma Itext l'hai provata?
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    C'è anche questo http://www.accesspdf.com/pdftk/ che però non è una librerie java è un programma già pronto
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  4. #4
    Da quello che so IText permette di creare PDF.
    Quello che serve a me è invece ravanare dentro ad un pdf che ho già.

    Comunque ora controllo meglio la libreria nel caso abbia anche dei metodi che possano fare al caso mio.

    Grazie e ciao.
    .:[Mr.Mime]:.

  5. #5
    Allora.
    Dopo una giornata di ricerche, ecco quello che ho ottenuto nella speranza che possa servire a qualcuno e che possa invogliare qualcuno a postare eventuali reply con soluzioni migliori.

    Per quanto riguarda il discorso ravanamento ovvero andare a recuperare il contenuto vero e proprio, attualmente ho trovato solo la già citata API PDFTextStream che però è a pagamento ed infatti estrare solo 8 pagine nella sua versione trial;

    Qualche passo l'ho fatto nell'estrazione dei metadati tramite la libreria PJX (http://www.etymon.com/epub.html)
    che permette di recuperare/modificare i metadati di un PDF.

    Di seguito il codice per provarlo:

    import com.etymon.pj.Pdf;
    import com.etymon.pj.object.PjInfo;
    import com.etymon.pj.object.PjObject;

    public class GetPDFInfo {
    public static void main (String args[]) {
    try {
    Pdf pdf = new Pdf("Nomefile.pdf");
    System.out.println("# of pages is " + pdf.getPageCount());

    int y = pdf.getMaxObjectNumber();
    for (int x=1; x <= y; x++) {
    PjObject obj = pdf.getObject(x);
    if (obj instanceof PjInfo) {
    System.out.println("Title: " + ((PjInfo)
    obj).getTitle());
    System.out.println("Author: " + ((PjInfo)
    obj).getAuthor());
    System.out.println("Creator: " + ((PjInfo)
    obj).getCreator());
    System.out.println("Subject: " + ((PjInfo)
    obj).getSubject());
    System.out.println("Keywords: " + ((PjInfo)
    obj).getKeywords());

    }
    }
    }
    catch (java.io.IOException ex) {
    System.out.println(ex);
    }
    catch (com.etymon.pj.exception.PjException ex) {
    System.out.println(ex);
    }
    }
    }

    Mi rivolgo ancora a voi per avere nuovi suggerimenti su come fare parsing del documento ovvero cercare nel testo al suo interno.

    Ciao e alla prossima...
    .:[Mr.Mime]:.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da Mr.Mime
    Da quello che so IText permette di creare PDF.
    Quello che serve a me è invece ravanare dentro ad un pdf che ho già.
    iText è una libreria per la manipolazione di PDF: non solo permette di crearli, ma anche di leggerli (compresi i metadati).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Originariamente inviato da LeleFT
    iText è una libreria per la manipolazione di PDF: non solo permette di crearli, ma anche di leggerli (compresi i metadati).


    Ciao.
    Infatti!
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  8. #8
    Effettivamente dopo vari tentativi e lo spulciamento del sito di riferimento, sono riuscito a leggere anche i metadati quali autore, titolo ecc... (rimane il dubbio sul formato della data ma ho postato in un altro topic).

    Tuttavia ancora non riesco a trovare il modo per estrarre il contenuto. Per esempio ho la necessit' di recuperare le prime righe del PDF per fare dei confronti.

    E' possibile? SUlle FAQ del sito non viene fatta menzione se non il caso della apertura del PDF che pero' viene demandata alla libreria JPedal.

    Ciao e alla prossima...
    .:[Mr.Mime]:.

  9. #9
    Finalmente sono riuscito a fare qualcosa che si avvicina a quello che devo fare.
    Sono andato a pescare un vecchio post su un forum Cinese ricostruendo il codice della classe:

    Questa classe usa la libreria PDFBox.

    codice:
     
    import org.pdfbox.pdmodel.PDDocument;
    import org.pdfbox.pdfparser.PDFParser;
    import java.io.*;
    import org.pdfbox.util.PDFTextStripper;
    import java.util.Date;
    
    public class PdfExtracter {
    	
    	public PdfExtracter() {
    	 }
    	
    	public String GetTextFromPdf(String filename) throws Exception
    	{
             String temp = null;
             PDDocument pdfdocument = null;
             FileInputStream is = new FileInputStream(filename);
             PDFParser parser = new PDFParser( is );
             parser.parse();
             pdfdocument = parser.getPDDocument();
             ByteArrayOutputStream out = new ByteArrayOutputStream();
             OutputStreamWriter writer = new OutputStreamWriter( out );
             PDFTextStripper stripper = new PDFTextStripper();
             stripper.writeText(pdfdocument.getDocument(), writer);
             writer.close();
             byte[] contents = out.toByteArray();
    
             String ts = new String(contents);
             System.out.println("the string length is"+contents.length+"\n");
             return ts;
    	}
    }
    Pre provarla, nel vostro main mettete le seguenti righe:

    codice:
      
    PdfExtracter pf = new PdfExtracter();
    try{
         String ts=pf.GetTextFromPdf("prova.pdf");
         System.out.print("IL contenuto e': \n" + ts);       
        }
    catch (Exception e)
    {
         e.printStackTrace();
    }
    .:[Mr.Mime]:.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.