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

    Problemi con IText e con TextExtractionStrategy

    Salve sto usando IText per estrarre il testo da un pdf. Il codice che ho attualmente sviluppato è il seguente:

    codice:
    public static void main(String[] args) throws IOException {
    		FileInputStream f=new FileInputStream("TestPiùPagine.pdf");
    		PdfReader lettore = new PdfReader(f);
    		System.out.println(testoPagina(lettore,1));
    		}
    	
    public static String testoPagina(PdfReader lettore,int paginaAttuale) throws IOException{
    		if(paginaAttuale==lettore.getNumberOfPages()){
    			return PdfTextExtractor.getTextFromPage(lettore, paginaAttuale);
    		}
    		String s = PdfTextExtractor.getTextFromPage(lettore, paginaAttuale);
    		return s+testoPagina(lettore,paginaAttuale+1);
    	}// metodo che gestisce ricorsivamente la copiatura del testo
    
    Il metodo legge e stampa tutto il contenuto della pagine solo che non rispetta nessun ordine. Per mantenere l'ordine dovrei usare il metodo:
          PdfTextExtractor.getTextFromPage(lettore,paginaAttuale,strategia);
    dove strategia è un implementazione dell interfaccia:
    
    public class Strategia implements TextExtractionStrategy {
    	public void beginTextBlock() {
    		// TODO Auto-generated method stub}
    	public void endTextBlock() {
    		// TODO Auto-generated method stub}
    	public void renderImage(ImageRenderInfo arg0) {
    		// TODO Auto-generated method stub}
    	public void renderText(TextRenderInfo arg0) {
    		// TODO Auto-generated method stub}
    	public String getResultantText() {
    		// TODO Auto-generated method stub
    		return null;}
    il mio problema sta proprio in questa interfaccia, non riesco a trovare una documentazione utile che mi faccia capire come implementarla oppure un alternativa (con IText o altro) che mi faccia estrarre il testo rispettando spaziature invii ed ordine parole.Spero di essere stato molto chiaro nel descrivere il mio problema.

    Teo

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    177

    ho risolto

    Problema risolto, ho creato una piccola classe che opera sul testo restituendolo in una stringa, rispetta tutti gli ordini del testo ed esclude automaticamente le immagini. Se avete consigli per migliorarlo sono ben accetti.

    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;
    import com.itextpdf.text.pdf.parser.TextExtractionStrategy;
    
    public class EstrattoreTesto{
    	private static PdfReader lettore;
    	private FileInputStream pdf;
    	private PdfReaderContentParser parserLettore;
    	TextExtractionStrategy strategia;
    	
    	public EstrattoreTesto(FileInputStream filePdf) throws IOException{
    		pdf=filePdf;
    		lettore=new PdfReader(pdf);
    		parserLettore = new PdfReaderContentParser(lettore);
    	}
    
    	public String getTestoIterativo() throws IOException{
    		strategia = parserLettore.processContent(1, new SimpleTextExtractionStrategy());
    		String s = PdfTextExtractor.getTextFromPage(lettore,1);
    		for(int i=2;i<=lettore.getNumberOfPages();i++){
    			strategia = parserLettore.processContent(i, new SimpleTextExtractionStrategy());
    			s+=PdfTextExtractor.getTextFromPage(lettore,i);
    		}
    		return s;
    	}
    
    	public String getTestoRicorsivo(int paginaAttuale) throws IOException{
    		if(paginaAttuale==lettore.getNumberOfPages()){
    			strategia = parserLettore.processContent(paginaAttuale,new SimpleTextExtractionStrategy());
    			return PdfTextExtractor.getTextFromPage(lettore,paginaAttuale);
    			}
    		strategia = parserLettore.processContent(paginaAttuale, new SimpleTextExtractionStrategy());
    		String s = PdfTextExtractor.getTextFromPage(lettore, paginaAttuale);
    		return s+getTestoRicorsivo(paginaAttuale+1);
    	}
    	
    	public String getTestoPagina(int pagina) throws IOException{
    		strategia = parserLettore.processContent(pagina,new SimpleTextExtractionStrategy());
    		return PdfTextExtractor.getTextFromPage(lettore, pagina);
    	}	
    }
    per verificarlo basta un semplice main
    Teo

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Quando posti del codice, inseriscilo all'interno degli appositi tag CODE, come richiesto dal Regolamento interno, altrimenti si perde in leggibilità.

    Sistemo io i tuoi post.


    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

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.