如何根据PDF的位置从PDF中提取文本?

时间:2014-03-14 21:31:03

标签: linux pdf pdfminer

我有多个PDF,我想从第一页中提取某个地区的文字。 因此,如果我有PDF中文本的边界框的坐标,我如何使用命令行提取该文本。

我研究了一下,发现PDFMiner和PDFBox可以做到这一点。但是PDFMiner的记录非常糟糕。

有人可以告诉我如何使用PDFMiner执行此操作吗?或者,如果你可以建议其他解决方案?

PS:我在Linux终端上。

2 个答案:

答案 0 :(得分:4)

pdftotext(使用最新的基于Poppler的版本之一)确实允许您定义页面区域以从中提取文本。

试试这个:

pdftotext    \
  -f 5       \
  -l 7       \
  -x 200     \
  -y 700     \
  -W 144     \
  -H 80      \
   input.pdf \
   output.txt

选择页面范围5-7,宽度= 144点(72 points == 1 inch),高度= 80点的矩形,左上角位于x坐标200,y坐标700。 / p>

答案 1 :(得分:2)

您可以使用PDFBox。 https://pdfbox.apache.org/apidocs/org/apache/pdfbox/util/PDFTextStripperByArea.html

PDFTextStripperByArea stripper = new PDFTextStripperByArea();
stripper.setSortByPosition( true );
List allPages = document.getDocumentCatalog().getAllPages();
PDPage firstPage = (PDPage)allPages.get( 0 );
stripper.extractRegions( firstPage );
stripper.addRegion( "class1", rectangle );
System.out.println( "Text in the area:" + rectangle );
System.out.println( "Text: " + stripper.getTextForRegion( "class1" ) );

这里rectange是java.awt包的Rectangle类的对象。 http://docs.oracle.com/javase/7/docs/api/java/awt/Rectangle.html

Rectangle rectange = new Rectangle(int x, int y, int width, int height);