Java 如何从包含文本和图像的pdf中提取内容?
我有一个pdf文件,它有两种类型的页面,普通文本页面和来自扫描文档的页面。可以使用PDFBox或Tika轻松提取文本内容。然而,这些库不能做OCR,我需要类似的东西。但是如何将Tess4J和PDFBox(或Tika)结合在一起,以便从文本和扫描页面中提取所有内容 编辑:------ 我找到了如下的解决方案,但效果不好Java 如何从包含文本和图像的pdf中提取内容?,java,pdf,tesseract,pdfbox,apache-tika,Java,Pdf,Tesseract,Pdfbox,Apache Tika,我有一个pdf文件,它有两种类型的页面,普通文本页面和来自扫描文档的页面。可以使用PDFBox或Tika轻松提取文本内容。然而,这些库不能做OCR,我需要类似的东西。但是如何将Tess4J和PDFBox(或Tika)结合在一起,以便从文本和扫描页面中提取所有内容 编辑:------ 我找到了如下的解决方案,但效果不好 for(PDPage page:pages){ PDPropertyList pageFonts = page.getResources().ge
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());
}
}
}
for(PDPage:pages){
PDPropertyList pageFonts=page.getResources().getProperties();
Map img=page.getResources().getImages();
设置键=img.keySet();
迭代器iter=keys.Iterator();
while(iter.hasNext()){
字符串k=(字符串)iter.next();
系统输出println(k);
PdxObjectImageCI=img.get(k);
ci.write2文件(k);
File imageFile=新文件(k+“.jpg”);
Tesseract instance=Tesseract.getInstance();
试一试{
字符串结果=instance.doOCR(imageFile);
系统输出打印项次(结果);
}
捕获(Tesseracte异常){
System.err.println(e.getMessage());
}
}
}
问题是,虽然保存的图像具有良好的质量,但Tess4J在这些图像上运行得并不好,而且大部分都是提取无意义的内容。然而,如果首先简单地将pdf传递给Tess4J,则Tess4J能够很好地对其进行OCR
总之,通过PdfBox提取图像会影响OCR过程的质量,有人知道原因吗?我对此不太了解,但为了解决您的问题,您不能将Tess4J同时用于文本页面和扫描文档吗?也许可以看看这个?假设PDF中的每个图像都是JPG图像。这不是真的。我想这是PDFBox的假设。有什么解决办法吗?