Shell脚本(17)——批量提取pdf内容
创作者俱乐部成员
今天的问题是:要从很多pdf文件里提取需要的信息
目前税务系统需要的是xml文件,查看用的是ofd文件,pdf在这里只能用来预览,所以下面只是用样例做个试验,批量从中提取信息,实际工作不会太常用
💡 | for i in *.pdf; do pdftotext -raw "$i" - | awk '{d[NR]=$0}/日$/{a=NR}/^¥[^ ]*$/{b=NR}END{for(i=a-2;i<a+2;i++){printf d[i]","}printf "=\x22"d[a+2]"\x22,";for(i=b-6;i<b;i++){printf d[i]","}print d[b]}'; done | iconv -f utf-8 -t gbk -c > out.csv |
这里用的是WSL环境,代码写在一行里,有点乱
for i in *.pdf; do xxx done,用来循环处理当前目录里的所有pdf文件
用pdftotext命令将pdf文件转为文本
用awk命令找到需要的数据所在行,以逗号分隔输出
将结果从utf-8编码转为gbk,存入out.csv,可以用wps表格打开进一步处理
确实有点乱,但逻辑还算清晰。。。
当我尝试用windows自带的powershell写同样的处理时,pdftotext输出的是utf-8编码的文本,但powershell管道里,会自动用gbk解码外部命令输出的比特流,就导致乱码,而转码在powershell里又有些麻烦
在这种情况下,反倒是写linux shell脚本更直接、简便
总之,遇到这种格式比较统一的pdf文件时,写脚本,用pdftotext命令,加上-raw参数,将pdf转为比较规整的文本,再通过正则提取需要的数据,是一种轻量简便的获取数据的方法。不过现在税务方面大多用xml和ofd了,批量处理pdf可能不太常用了。。。
创作者俱乐部成员
创作者俱乐部成员