Java - 使用OCR从PDF中提取文本

4
我有一个pdf文件(以下是部分内容),想从中提取文本。我已经使用了PDFTextStream,但它不能处理这个文件。(然而,它可以处理其他简单文本的文件。)
还有哪些OCR库能够完成这个任务?
请帮忙。
谢谢。

Glimpses of pdf file

glipmses of pdf file


你的 PDF 文件只包含原始文件的扫描纸质副本吗?不要期望OCR能够提供100%精确的结果,特别是在像这样复杂的文档中。文本和线条在许多地方重叠是一个大问题,这使得算法难以区分单个字形,甚至可能做不到。 - Håken Lid
@HåkenLid 文本和线条没有重叠,我放大了画面所以看起来像是重叠了。 - Dax Amin
@HåkenLid 这份文档对OCR来说是否太过复杂?不过我只需要从顶部的姓名、地址和过期款项/退款表格中提取信息。 - Dax Amin
OCR技术用于扫描文档。如果文件不是由纸质原件生成的,则OCR无关紧要。PDF是一种可以包含各种不同内容的文件格式,适用于打印和屏幕查看。从PDF文件中提取数据没有通用方法。 - Håken Lid
从这个特定的文档中提取数据是完全可能的。但仅仅通过查看图像预览是无法确定的。 - Håken Lid
我尝试了PDFBox,结果令人满意。谢谢! - Dax Amin
1个回答

5

我尝试使用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();
        }
     }
}

9
所以你根本不需要OCR。 - Amedee Van Gasse
5
如果您有一个格式良好的PDF文件,这将起作用。如果某人拍照并保存为PDF,则不会得到结果。为此,您需要OCR。 - Nitin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接