2013-05-15 8 views
6

Come determinare se una pagina PDF contiene testo o è puramente immagine, utilizzando Java?Determinare se una pagina PDF contiene testo o è puramente immagine

Ho cercato in molti forum e siti Web, ma non riesco ancora a trovare una risposta.

E 'possibile estrarre il testo da PDF, per sapere se la pagina è nel formato immagine o testo?

PdfReader reader = new PdfReader(INPUTFILE); 
     PrintWriter out = new PrintWriter(new FileOutputStream(OUTPUTFILE));    
     for (int i = 1; i <= reader.getNumberOfPages(); i++) { 
     // here I want to test the structure of the page !!!! if it's possible       
     out.println(PdfTextExtractor.getTextFromPage(reader, i)); 
     } 
+1

Questo sembra abbastanza coinvolto in modo accidentale. Forse avrai bisogno di una taglia qui – Coffee

+1

Grazie Mr Adel lo spero :) –

risposta

6

Non esiste un modo impermeabile per fare ciò che si desidera.

Il testo può essere visualizzato in modi diversi all'interno di un file PDF. Per esempio: si possono disegnare tutti glifi usando gli operatori dello stato grafico invece di usare lo stato del testo. (Mi dispiace se ti sembra cinese, ma posso assicurarti che è un linguaggio PDF corretto.)

Se una soluzione ad hoc che copre le situazioni più comuni e manca un PDF esotico una volta ogni tanto è OK per te, quindi hai già una buona soluzione prima.

Nel codice, si esegue il loop su tutte le pagine e si chiede a iText se nella pagina è presente del testo. Questa è già una buona indicazione.

Internamente, il codice utilizza l'interfaccia RenderListener. iText analizza il contenuto di una pagina e attiva i metodi in un'implementazione specifica RenderListener. Questa è un'implementazione di un'implementazione personalizzata: MyTextRenderListener. Questa implementazione personalizzata viene utilizzata nell'esempio ParsingHelloWorld.

C'è anche un metodo renderImage() (vedere ad esempio MyImageListener). Se questo metodo è attivato, sei sicuro al 100% che ci sia anche un'immagine nella pagina, e puoi usare l'oggetto ImageRenderInfo per ottenere la posizione, la larghezza e l'altezza dell'immagine (cioè: se sai come interpretare il Matrix restituito dal metodo getImageCTM()).

Utilizzando tutti questi elementi, è già possibile ottenere molto per ottenere ciò che è necessario, ma essere consapevoli del fatto che ci saranno sempre PDF esotici che sfuggiranno a tutti gli assegni.

+0

Grazie mille Mr @ Bruno Lowagie –