使用OCR从PDF中提取Java文本

使用OCR从PDF中提取Java文本,java,pdf,pdfbox,text-extraction,pdftextstream,Java,Pdf,Pdfbox,Text Extraction,Pdftextstream,我有一个pdf文件(下面给出了其中的一部分),想从中提取文本。我使用了PDFTextStream,但它不适用于此文件。(不过,它与其他具有简单文本的文件一起工作) 其他哪些OCR库能够做到这一点 请帮忙。 多谢各位 我尝试使用PDFBox,结果令人满意 以下是使用PDFBox从PDF中提取文本的代码: import java.io.*; import org.apache.pdfbox.pdmodel.*; import org.apache.pdfbox.text.PDFTextStrip

我有一个pdf文件(下面给出了其中的一部分),想从中提取文本。我使用了PDFTextStream,但它不适用于此文件。(不过,它与其他具有简单文本的文件一起工作)

其他哪些OCR库能够做到这一点

请帮忙。 多谢各位


我尝试使用PDFBox,结果令人满意

以下是使用PDFBox从PDF中提取文本的代码:

import java.io.*;

import org.apache.pdfbox.pdmodel.*;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.pdfbox.util.*;

public class PDFTest {

 public static void main(String[] args){
 PDDocument pd;
 BufferedWriter wr;
 try {
         File input = new File("C:/BillOCR/data/bill.pdf");  // The PDF file from where you would like to extract
         File output = new File("D:/SampleText.txt"); // The text file where you are going to store the extracted data
         pd = PDDocument.load(input);
         System.out.println(pd.getNumberOfPages());
         System.out.println(pd.isEncrypted());
         pd.save("CopyOfBill.pdf"); // Creates a copy called "CopyOfInvoice.pdf"
         PDFTextStripper stripper = new PDFTextStripper();
         stripper.setStartPage(1); //Start extracting from page 3
         stripper.setEndPage(1); //Extract till page 5
         wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(output)));
         stripper.writeText(pd, wr);
         if (pd != null) {
             pd.close();
         }
        // I use close() to flush the stream.
        wr.close();
 } catch (Exception e){
         e.printStackTrace();
        }
     }
}

您的pdf是否只包含原始文档的扫描纸质副本?你不能期望OCR的结果100%准确,尤其是在这样复杂的文档中。文本和行在许多地方重叠是一个大问题。这使得算法很难区分单个字形。@HåkenLid文本和行也不重叠,我放大了,所以看起来是这样。@HåkenLid这个文档对OCR来说太复杂了吗?然而,我不需要所有的文本。我只需要提取名称、地址(从顶部部分)和过去的会费/退款表。OCR用于扫描文档。如果文件不是从纸质原件生成的,则OCR根本不相关。PDF是一种可以包含各种内容的文件格式。它是用来打印和在屏幕上查看的。没有从PDF文件中提取数据的通用方法。从这个特定文档中提取数据可能是完全可能的。但是仅仅从图像预览是不可能分辨出来的。所以你根本不需要OCR。如果你有一个格式良好的pdf,这将起作用。如果有人拍照并另存为pdf,则不会给出结果。为此,您需要OCR