Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    177

    [java][jdk][itextpdf]dopo aver aggiornato la jdk non riesco a catturare un eccezzione

    Salve forummisti, ho sviluppato un progetto in cui uso la libreria itextpdf. Ho creato una classe gestione testo che mi serve per estrarre il testo di un file pdf, dopo aver aggiornato la jdk alla versione 7 ,appena uscita, tale codice non mi esegue come prima.
    Mi da un errore sui pdf protetti da cui non riesce ad estrarre il testo, e non riesco a catturare l'eccezione per gestirla. Ma la cosa che più mi incuriosisce è che se lancio il programma dal compilatore con un main esegue normalmente mentre dal prompt dei comandi mi genera gli errori.
    codice:
    import java.io.FileInputStream;
    import java.io.IOException;
    import com.itextpdf.text.pdf.PdfReader;
    import com.itextpdf.text.pdf.parser.PdfReaderContentParser;
    import com.itextpdf.text.pdf.parser.PdfTextExtractor;
    import com.itextpdf.text.pdf.parser.SimpleTextExtractionStrategy;
    // classe per estrarre il contenuto da un file .pdf
    public class GestioneTesto{
    	private static PdfReader lettore;
    	private String fileName;
    	private PdfReaderContentParser parserLettore;
    	private static boolean protetto;
    	
    	public GestioneTesto(FileInputStream filePdf, String nome) throws IOException{
    		fileName=pulisciStringa(nome);
    		try {
    			lettore=new PdfReader(filePdf);
    			parserLettore = new PdfReaderContentParser(lettore);
    			protetto=false;
    		} catch (NoClassDefFoundError e) {
    			System.out.println("Gestione testo non creabile");
    			lettore=null;
    			parserLettore=null;
    			protetto=true;
    		}
    	}
    	//il metodo elimina spazi vuoiti ripetuti ed il carattere ' che genere problemi in alcuni casi
    	private String pulisciStringa(String testo) {
    		return testo.replaceAll("'", " ").replaceAll("\\s+", " ");
    	}
    	//ritorna il testo della pagina richiesta
    	public String getTestoPagina(int pagina) throws IOException{
    		parserLettore.processContent(pagina,new SimpleTextExtractionStrategy());
    		return pulisciStringa(PdfTextExtractor.getTextFromPage(lettore, pagina));
    	}
    	//ritorna il numero di pagine del pdf
    	public int getNumeroPg(){
    		return lettore.getNumberOfPages();
    	}
    	//ritorna il nome del pdf
    	public String getNome(){
    		return fileName;
    	}
    	public boolean protetto() {
    		return protetto;
    	}
    }
    L'errore è segnalato al comando return pulisciStringa(PdfTextExtractor.getTextFromPage(le ttore, pagina));. Ho riscritto la classe in alcuni punti per cercare di risolvere il problema, ma non riesco a catturare l'eccezione. Fatemi sapere se avete delle proposte per migliorare o risolvere la situazione o se avete bisogno di altre info.
    P.S. spero di non aver commesso qualche stupidata da qualche parte.
    Teo

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    177
    Attualmente ho fatto le seguenti modifiche,che non risolvono il problema
    codice:
            public GestioneTesto(FileInputStream filePdf, String nome) throws IOException{
    		fileName=pulisciStringa(nome);
    		try {
    			lettore=new PdfReader(filePdf);
    			parserLettore = new PdfReaderContentParser(lettore);
    			protetto=false;
    		} catch (Exception e) {
    //			lettore=null;
    //			parserLettore=null;
    			System.out.println("Il file è protetto");
    			protetto=true;
    			e.printStackTrace();
    		}
    	}
    	//ritorna il testo della pagina richiesta
    	public String getTestoPagina(int pagina) throws IOException{
    		parserLettore.processContent(pagina,new SimpleTextExtractionStrategy());
    		try{
    			return pulisciStringa(PdfTextExtractor.getTextFromPage(lettore, pagina));
    		}catch(IllegalArgumentException e){
    			protetto=true;
    			System.out.println("errore nel restituire il testo della pagina");
    			System.out.println("e");
    			e.printStackTrace();
    		}
    		return null;
    	}
    Teo

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    per cortesia, dove si può sollevare un'eccezione, oltre ai tuoi messaggi personalizzati, metti anche un bel
    codice:
    e.printStackTrace();
    che poi, una volta finita la fase di debug, andrai a togliere... altrimenti come si fa a capire che sta succedendo davvero?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    177
    Li ho inseriti, nel costruttore non entra mai nel catch e non esegue la stampa, mentre prima dell'aggiornamento entrava ed evitava l'errore generato da getTestoPagina, in cui ho inserito un IllegalArgumentException. Inoltre l'errore si ripercuote nel metodo seguente nel momento in cui crea il GestioneTesto
    codice:
    //verifica i file e li carica nel database
    private static void avviaCaricamento(String cartella) throws IOException {
    	try{
    		File f = new File (cartella);
    		File[] files = f.listFiles();
    		for (int i = 0; i < files.length; i++){
    			//verifico se e' un file
    			if(files[i].isFile()){
    				//verifico se e' un pdf
    				if(files[i].getName().toLowerCase().endsWith(".pdf")){
    					FileInputStream fis=new FileInputStream(files[i]);
    					GestioneTesto gt=new GestioneTesto(fis, files[i].getName());
    					gdb.caricaPDF(gt);
    				}
    			}
    		}
    	}catch(NullPointerException e){
    		System.out.println("La directory della cartella e' errata");
    		System.out.println(" cartella ");
    		e.printStackTrace();
    	}
    }
    Teo

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Ah, non mi ero accorto della rivisitazione nel tuo secondo intervento. Mi viene un dubbio: li trova i file? getName va bene, ma restituisce solo il nome del file, senza percorso... magari ti perdi in giro la cartella? Usa getAbsolutePath piuttosto e fai un po' di stampe di controllo.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    177
    Il metodo getNome restituisce solo il nome perché il percorso della cartella lo passo io da tastiera. I file li trova, perché l'esecuzione inizia ne legge alcuni, poi arriva sempre sullo stesso è si blocca, il pdf non è uno di quelli protetti, credo sia bloccato il testo di una data pagina. Ora provo a vedere su quale pagina si blocca il jar.
    Teo

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    177
    il problema è dovuto a org/bouncycastle/asn1/asn1octetstring che manca tra i miei jar, qui dentro è contenuto l'encryption
    Teo

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 © 2025 vBulletin Solutions, Inc. All rights reserved.