Shell脚本(17)——批量提取pdf内容

wils
wils

创作者俱乐部成员

今天的问题是:要从很多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可能不太常用了。。。

海南省
浏览 551
2
9
分享
9 +1
4
2 +1
全部评论 4
 
dhzgfchx
pdftotext能处理扫描版pdf吗?如果要批量读取扫描版pdf里的公司名,用来给pdf重命名,要怎么做才方便?
· 广东省
回复
wils
wils

创作者俱乐部成员

那就是ocr了,abbyy也行
· 海南省
回复
 
方盛
方盛

创作者俱乐部成员

我是一张一张的转,用WPS自带功能。
· 湖北省
1
回复
 
陈洪太
5
· 福建省
回复