Java 使Tess4J从PDF文件中获取图像

Java 使Tess4J从PDF文件中获取图像,java,parsing,pdf,tesseract,Java,Parsing,Pdf,Tesseract,如何使Tess4J从PDF文件中获取图像 我正在使用OCR(Tess4J)将图像文件转换为文本。它的作品很好,我已经测试的形象,它是伟大的 File imageFile = new File("D:\\HEAD2.png"); Tesseract instance = Tesseract.getInstance(); // JNA Interface Mapping // Tesseract1 instance = new Tesseract1(); // JNA Direct Mapping

如何使Tess4J从PDF文件中获取图像

我正在使用OCR(Tess4J)将图像文件转换为文本。它的作品很好,我已经测试的形象,它是伟大的

File imageFile = new File("D:\\HEAD2.png");
Tesseract instance = Tesseract.getInstance();  // JNA Interface Mapping
// Tesseract1 instance = new Tesseract1(); // JNA Direct Mapping

try {
    String result = instance.doOCR(imageFile);
    System.out.println(result);
} catch (TesseractException e) {
    System.err.println(e.getMessage());
}
但我面临着这个问题。我会解析一个包含图像的pdf文件。我不知道该怎么做,也没有找到任何带有pdf的Tess4J示例

我用Asprise测试了这个例子,但在Tess4J上没有找到这样的例子

import com.asprise.util.pdf.PDFReader;
import com.asprise.util.ocr.OCR;

PDFReader reader = new PDFReader(new File("my.pdf"));
reader.open(); // open the file. 
int pages = reader.getNumberOfPages();

for(int i=0; i < pages; i++) {
   BufferedImage img = reader.getPageAsImage(i);

   // recognizes both characters and barcodes
   String text = new OCR().recognizeAll(image);
   System.out.println("Page " + i + ": " + text); 
}

reader.close(); // finally, close the file.
import com.asprise.util.pdf.PDFReader;
导入com.asprise.util.ocr.ocr;
PDFReader reader=newpdfreader(新文件(“my.pdf”);
reader.open();//打开文件。
int pages=reader.getNumberOfPages();
对于(int i=0;i
像处理图像一样使用它。

Tess4j依赖于pdfbox,因此您可以使用此库。可能是这样的:

import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;

PDDocument document = PDDocument.load(new File("YOUR_PDF_FILE_PATH"));
PDFRenderer pdfRenderer = new PDFRenderer(document);

ITesseract tesseract = new Tesseract();

tesseract.setDatapath("tessdata");
tesseract.setLanguage("spa");

for (int page = 0; page < document.getNumberOfPages(); page++) {
    BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB);

    try {
        String str = tesseract.doOCR(bufferedImage);
        System.out.println(str);
    } catch (TesseractException ex) {
        Logger.getLogger(OCR.class.getName()).log(Level.SEVERE, null, ex);
    }
}
document.close();
import net.sourceforge.tess4j.ITesseract;
导入net.sourceforge.tess4j.Tesseract;
导入net.sourceforge.tess4j.TesseractException;
导入org.apache.pdfbox.pdmodel.PDDocument;
导入org.apache.pdfbox.rendering.ImageType;
导入org.apache.pdfbox.rendering.PDFRenderer;
PDDocument document=PDDocument.load(新文件(“您的PDF文件路径”);
PDFRenderer PDFRenderer=新的PDFRenderer(文件);
ITesseract tesseract=新的tesseract();
setDatapath(“tesseract”);
tesseract.setLanguage(“spa”);
对于(int page=0;page
我在这里使用的是Tessj4.5和pdf box 2.0。 你也可以查一下
.

这段代码实际上很好,但在我的目录中,创建PDF文件图像的位置是。是否有必要?对于具有多个页面的大型PDF,它可能会将图像保存到磁盘以节省一些内存。我目前不知道如何绕过这一点。但是你可以在以后删除那些.pdf文件。