Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从包含文本和图像的pdf中提取内容?_Java_Pdf_Tesseract_Pdfbox_Apache Tika - Fatal编程技术网

Java 如何从包含文本和图像的pdf中提取内容?

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

我有一个pdf文件,它有两种类型的页面,普通文本页面和来自扫描文档的页面。可以使用PDFBox或Tika轻松提取文本内容。然而,这些库不能做OCR,我需要类似的东西。但是如何将Tess4J和PDFBox(或Tika)结合在一起,以便从文本和扫描页面中提取所有内容

编辑:------ 我找到了如下的解决方案,但效果不好

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的假设。有什么解决办法吗?