2016-08-09 13 views
0

Ich versuche, eine PDF-Datei mit Tika.Parse analysieren, wenn ich meine PDF-Datei analysieren, bekomme ich jedes Zeichen getrennt line.Zum Beispiel ist mein pdf-Dateiinhalt "Hello World". Ich erwarte, dass es wie "Hello World" herauskommt, aber ich werde wie folgt ausgegeben.jedes Zeichen in einer separaten Zeile (jedes Zeichen wird in eine neue Zeile) während der Analyse einer PDF-Datei mit Apache Tika

H 
e 
l 
l 
o 

W 
o 
r 
l 
d. 

bitte helfen Sie mir, dieses Problem zu lösen.Folgen ist mein Programm.

import java.io.BufferedInputStream; 
import java.io.FileInputStream; 
import java.io.InputStream; 

import org.apache.tika.metadata.Metadata; 
import org.apache.tika.parser.AutoDetectParser; 
import org.apache.tika.parser.DefaultParser; 
import org.apache.tika.sax.BodyContentHandler; 
import org.xml.sax.ContentHandler; 

public class TikaTest { 
    public static void main(String args[]) { 
     TikaTest test = new TikaTest(); 
     System.out.println(test.getContent()); 
    } 

    public String getContent() { 
     String content = ""; 
     Metadata mData = null; 
     ContentHandler cHandler = null; 
     AutoDetectParser adp = null; 

     try { 

      InputStream inStream = new BufferedInputStream(new FileInputStream(
        "/home/prasad/Desktop/kc/Purchase Order Detail - TEXT.pdf")); 
      mData = new Metadata(); 
      cHandler = new BodyContentHandler(); 
      adp = new AutoDetectParser(); 
      DefaultParser pdfParser = new DefaultParser(); 
      adp.parse(inStream, cHandler, mData); 

      content = cHandler.toString(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return content; 
    } 

} 

Ich habe versucht, das @https://stackoverflow.com/a/27551264/4579100 gegebene Lösung aber immer noch die gleiche Leistung zu bekommen.

+0

Welche Version von Apache Tika nach jedem Zeichen Zeilenendmarke hinzufügen verwenden Sie? Und wenn es nicht das Neueste ist, was passiert beim Upgrade? – Gagravarr

+0

PDF kann jedes Zeichen einzeln liefern (selbstgemachtes Kerning). Dann müssen räumliche Informationen verwendet werden. Habe Tika nicht selbst benutzt. –

+0

Hi @Gagravarr, ich benutze tika-app-1.13.jar – prasad

Antwort

0

Sie können einfach Zeichen Methode in BodyContentHandler außer Kraft setzen und

@Override 
public void characters(char[] arg0, int arg1, int arg2) throws SAXException { 

    if(arg0.length!=1) 
    { 
     char[] arr=new char[arg0.length*2]; 
     for(int i=0;i<arr.length;i+=2) 
     { 
      arr[i]=arg0[i/2]; 
      arr[i+1]='\n'; 

     } 
     super.characters(arr,arg1, arr.length); 
    } 
    else 
    { 
     super.characters(arg0, arg1, arg2); 
    } 
} 
+0

Hallo aravinth, vielen Dank für Ihre prompte Antwort. Ich habe versucht mit Ihrem Code auch, aber es funktioniert nicht für mich. Weil für jeden "arg0" ich Ich bekomme ein neues Zeichen. Wenn ich ein ganzes Wort als "arg0" bekomme und wenn es ein Zeilenumbruchzeichen zwischen jedem Zeichen enthält, dann funktioniert deine Lösung. Ich denke aber, da ich ein einzelnes Zeichen pro Aufruf bekomme, kann ich das Problem nicht lösen Kannst du mir bitte eine Idee geben? – prasad

+0

Fügen Sie nur einen Haken für ein einzelnes Zeichen innerhalb dieser Methode – aravinth

+0

Hallo Aravinth, ich habe Ihre Antwort nicht bekommen, können Sie mir sagen, wie das geht? – prasad

Verwandte Themen