2012-04-02 67 views
4

这似乎是一个老问题,但我没有找到花半小时寻遍打完一个详尽的答案。提取与路线的位置的所有文本从PDF

我使用PDFBox的,我愿与每个字符串的坐标沿着提取所有文字从一个PDF文件。我使用他们的PrintTextLocations例子(http://pdfbox.apache.org/apidocs/org/apache/pdfbox/examples/util/PrintTextLocations.html),但那种PDF我在用的(电子机票)的程序无法识别字符串,分别打印每个字符。输出是一个字符串列表(每个代表TextPosition对象)是这样的:

String[414.93896,637.2442 fs=1.0 xscale=8.0 height=4.94 space=2.2240002 width=4.0] s 
String[418.93896,637.2442 fs=1.0 xscale=8.0 height=4.94 space=2.2240002 width=4.447998] a 
String[423.38696,637.2442 fs=1.0 xscale=8.0 height=4.94 space=2.2240002 width=1.776001] l 
String[425.16296,637.2442 fs=1.0 xscale=8.0 height=4.94 space=2.2240002 width=4.447998] e 

虽然我想程序才能识别字符串“销售”作为一个独特的TextPosition,并给我自己的立场。我也尝试玩setSpacingTolerance()setAverageCharacterTolerance()PDFTextStripper方法,在标准值(分别为FYI分别为0.5和0.3)上设置不同的值,但输出完全没有变化。我哪里错了?提前致谢。

+1

啊,PDF的乐趣。根据创建的内容,“text”可能只是某些位置上的字形集合,所以您必须根据位置进行猜测以找出字词和空格的位置。 – Joey 2012-04-02 12:09:53

回答

4

至于乔伊提到,PDF只是一个指令,告诉您应打印某个字符集。

为了提取的词或行,你将不得不执行一些数据分割:研究的字符的边界框应该让你认识那些在相同的行,然后其中一个形式的话。

+1

感谢您的回复。这就是我最终做的:为每个PDF“模板”创建一组矩形,并将其应用于基于位置提取文本部分。这需要大量的手工工作来维持,但它似乎是唯一可靠的方法。 – 2012-06-04 13:31:55