在使用apache tika解析pdf文件时,将每个字符分成单独的行(每个字符串转到新行)

时间:2016-08-09 15:09:17

标签: apache-tika

我正在尝试使用Tika解析pdf文件。当我解析我的pdf文件时,我将每个字符放在单独的行中。例如,我的pdf文件内容是“Hello World”。我希望得到像“ Hello World“,但我得到如下输出。

H
e
l
l
o

W
o
r
l
d.

请帮我解决这个问题。以下是我的计划。

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;
    }

}

我尝试了@ https://stackoverflow.com/a/27551264/4579100给出的解决方案 但仍然得到相同的输出。

1 个答案:

答案 0 :(得分:0)

您可以简单地覆盖BodyContentHandler中的字符方法,并在每个字符后添加换行符

@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);
    }
}