我有一个pdf文件,它有两种类型的页面,普通文本页面和来自扫描文档的页面。可以使用PDFBox或Tika轻松提取文本内容。但是这些库不能进行OCR,我需要像Tess4J这样的东西。但是,我如何将Tess4J和PDFBox(或Tika)结合在一起,以便从文本和扫描页面中提取所有内容?
EDITED:------ 我发现了一个如下解决方案,但效果不佳
for(PDPage page:pages){
PDPropertyList pageFonts = page.getResources().getProperties();
Map<String,PDXObjectImage> img = page.getResources().getImages();
Set<String> keys = img.keySet();
Iterator iter = keys.iterator();
while(iter.hasNext()){
String k = (String) iter.next();
System.out.println(k);
PDXObjectImage ci = img.get(k);
ci.write2file(k);
File imageFile = new File(k+".jpg");
Tesseract instance = Tesseract.getInstance();
try{
String result = instance.doOCR(imageFile);
System.out.println(result);
}
catch(TesseractException e){
System.err.println(e.getMessage());
}
}
}
问题是尽管保存的图像具有良好的质量,但Tess4J在它们上运行不好并且大多数都是无意义的。然而,如果首先将pdf传递给它,Tess4J能够非常好地对它们进行OCR。
总之,通过PdfBox提取图像会影响OCR过程的质量,有谁知道为什么?