Salve ho scritto questa classe di utilità che mediante itextpdf mi permette di utilizzare il contenuto di un file pdf, la classe funziona, però, magari un occhio esterno può trovare qualche piccolo difetto o miglioria che a me sfuggita. Oppure semplicemente sarà utile a qualcuno che deve fare le mie stesse cose.
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;

public class PDF {
	
	private static PdfReader lettore;
	private String nomeFile;
	private PdfReaderContentParser parser;
	private static boolean protetto;
	
	public PDF(FileInputStream filePDF, String nome){
		nomeFile=pulisciStringa(nome);
		try{
			lettore=new PdfReader(filePDF);
			parser=new PdfReaderContentParser(lettore);
			protetto=false;
		}catch (Exception e) {
			System.out.println(">>>> Il file "+nomeFile+" e' protetto");
			protetto=true;
//			e.printStackTrace();
		}
	}
	private String pulisciStringa(String testo) {
		return testo.replaceAll("'", " ").replaceAll("\\s+", " ");
	}
	public String getTestoPagina(int pagina) throws IOException{
		try{
			parser.processContent(pagina,new SimpleTextExtractionStrategy());
			return pulisciStringa(PdfTextExtractor.getTextFromPage(lettore, pagina));
		}catch(IllegalArgumentException e){
			System.out.println(">>>> Pagina "+pagina+" con testo protettto");
//			e.printStackTrace();
			return null;
		}
	}
	public int getNumeroPg(){
		return lettore.getNumberOfPages();
	}
	public String getNome(){
		return nomeFile;
	}
	public boolean isProtetto() {
		return protetto;
	}
}
La parte in rosso diciamo che è quella poco ottimizzata perché non uso nessuna strategia di estrazione testo e quindi alle volte è una cosa problematica.