我想从我的银行帐户对帐单中提取数据。
操作显示如pdf中的操作:
使用pdftotext,我得到这样的数据:
03/01/2011 03/01/2011 XXXXXX
0400262553990000000000713596003
03/01/2011 03/01/2011 PAIEMENT CB 0201 XXXX
XXXX
XXXXXXXX
04/01/2011 04/01/2011 PAIEMENT CB 0201 XXXXX
XXXXXXX
//some other operation in the same format
XXXXXX //my account balance
31,00
32,70
68,00
//some other amounts
我希望能够以正确的数量可靠地识别所有操作。
所以:
使用一些正则表达式:
var operations= pdftext.match(/[0-9]{2}\/[0-9]{2}\/[0-9]{4}\ [0-9]{2}\/[0-9]{2}\/[0-9]{4}[^\n]*/g);
var amounts = pdftext.match(/\n[0-9]+\,[0-9]{2}\n/g);
我得到了更正结果但我看到了一些问题:
答案 0 :(得分:1)
正则表达式很棒,但我认为您拥有的所有报告都在页面上保持几乎相同的表和列位置。
所以我首先通过在pdftext
命令行参数-x 10 -y 10 -W 100 -H 300
中指定裁剪矩形来逐列(或者逐行)数据,因此它将仅从裁剪区域返回文本。请注意,这些命令行选项仅在poppler-utils
版本中可用:
-x number
Specifies the x-coordinate of the crop area top left corner
-y number
Specifies the y-coordinate of the crop area top left corner
-W number
Specifies the width of crop area in pixels (default is 0)
-H number
Specifies the height of crop area in pixels (default is 0)
PDF分辨率为72
每英寸点数,因此您可以通过按原样打印PDF并以英寸为单位并乘以72或通过设置PDF查看器以100%显示PDF来轻松找到列或行测量坐标缩放,制作屏幕截图并根据屏幕截图测量位置。
此外,还有一个跨平台开源Tabula项目,旨在从PDF文件中的表中提取数据,也许它可以更好地用于您的目的(尽管设置可能比{{1更复杂) }})