我正在尝试使用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给出的解决方案 但仍然得到相同的输出。
答案 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);
}
}