2017-10-06 107 views
0

我正在使用iText java TextExtraction从PDF文件中读取文本。我使用下面的代码和它正常工作PDF的英文现在我有PDF包含数据作为图像。我想从该图像读取数据从PDF中的图像读取数据

public class pdfreader { 
    public static void main(String[] args) throws IOException, DocumentException, TransformerException { 
     String SRC = ""; 
     String DEST = ""; 

     for (String s : args) { 
      SRC = args[0]; 
      DEST = args[1]; 
     } 
     File file = new File(DEST); 
     file.getParentFile().mkdirs(); 
     new pdfreader().readText(SRC, DEST); 
    } 

    public void readText(String src, String dest) throws IOException, DocumentException, TransformerException { 
     try { 
       PdfReader pdfReader = new PdfReader(src); 
       PdfReaderContentParser PdfParser = new PdfReaderContentParser(
         pdfReader); 
       PrintWriter out = new PrintWriter(new FileOutputStream(
         dest)); 
       TextExtractionStrategy textStrategy; 
       for (int i = 1; i <= pdfReader.getNumberOfPages(); i++) { 
        textStrategy = PdfParser.processContent(i, 
          new SimpleTextExtractionStrategy()); 
        out.println(textStrategy.getResultantText()); 
       } 
       out.flush(); 
       out.close(); 
       pdfReader.close(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

回答

0

iText不支持OCR从图像中提取文本。尝试使用Tesseract或其他东西。

+0

我可以使用iText从PDF中提取图像吗 – hrishi

+0

是的,您可以使用iText从PDF中提取图像,然后将图像提供给Tessaract,但这不是您的问题。 –

+0

我正在考虑首先提取图像,然后从图像中读取数据 – hrishi

1

您可以使用iText实现OCR工作流程。正如Amedee已经暗示的那样,这是我们在iText尝试过的,具有非常有希望的结果。

的算法(高层):

  1. 实施IEventListener解析您的文档的页面
  2. 查找出ImageRenderInfo事​​件,当PDF解析器命中的图像,他们被解雇
  3. 您可以致电getImage()事件并最终得到一个BufferedImage
  4. 将BufferedImage馈送到Tesseract
  5. 应用坐标变换(tesseract不使用相同的co坐标空间为iText)
  6. 现在,您已经在图像中的texf和位置,您可以使用iText覆盖PDF上的文本。或者干脆将其解压。
+0

OCR是否可以扫描图像? – hrishi

+1

是的,这就是点。 –

0

如果在线解决方案是可以接受的,你可以使用这个在线PDF OCR API。每个文档的前3页是免费的。

如果先提取图像,也可以使用other OCR APIs