文中共享一个根据PDF的Python办公系统的实例解决方法,这也是一位金融业妹纸明确提出的真正要求。大家先一起来看看要求。
要求叙述
一个文件夹名称下有好几个PDF种类的税票。
每一张税票PDF全是纯图片种类,里边的文本信息内容是不可以手动式拷贝的(实际上绝大多数税票都能够拷贝一些文本,可是大家以照片的方式抛出来表述),大概如下图所显示:
必须符合的需要是:获得总额,经营者鉴别号和出票人,即下列三个框位:
最终融合批量操作,获得之上信息内容后,储存在Excel中!
念头和编码完成。
要求的实质是一个识别图片难题,由于PDF中的具体内容是图片类型,不能用基本方式立即获取文字。解决方法是应用电子光学图像识别(OCR)来图片识别中的标识符。与此同时必须特别注意的是,PDF终究并不是照片。为了更好地进行OCR,除开OCR自身,还必须免费下载Ghostscript和ImageMagick开展数据转换。以Windows为例子,电子计算机上必须安裝下列三个手机软件:
Ghostscript 32 位ImageMagick 32 位tesseract-OCR 32 位
三个软件的下载安裝没什么尤其的(三阶魔方配备有点儿繁杂,可是互联网上面许多实例教程,这儿也就不反复了),阅读者能够自主快速下载配备。编码表述如下所示。最先导进需要的控制模块:
fromwand.imageimportImagefromPILimportImageasPIimportpyocrimportpyocr.buildersimportioimportreimportosimportshutil
请参照下列特殊控制模块采用的特殊编码。必须附加安裝Wand和pyocr,由于他们是是非非标准库。开启cmd键入:
pipinstallwandpipinstallpyocr
这一要求还牵涉到连接Excel,我们可以考虑到应用openpyxl库的Workbook建立新的Excel文档:
fromopenpyxlimportWorkbook
税票。要求中的pdf放到桌面。根据电脑操作系统控制模块,您能够利用下列编码获得桌面路径:
#获得桌面路径包裝成一个涵数defGetDesktopPath():returnos.path.join(os.path.expanduser("~"),'Desktop')path=GetDesktopPath() r'税票.pdf'
获得已配备的宇宙魔方,便于之后启用:
tool=pyocr.get_available_tools()[0]
根据法杖控制模块将PDF文件格式转换为屏幕分辨率为300的jpeg图像:
image_pdf=Image(filename=path,resolution=300)image_jpeg=image_pdf.convert('jpeg')
将照片分析为二进制引流矩阵:
image_lst=[]forimginimage_jpeg.sequence:img_page=Image(image=img)image_lst.append(img_page.make_blob('jpeg'))
应用IO控制模块的BytesIO方式载入照片方式的二进制內容:
new_img=PI.open(io.BytesIO(image_lst[0]))new_img.show()
下面,捕获必须独立保存的一部分的字符串数组的图象,尽可能只制做图象中必须鉴别的一部分,那样解决和获得所需內容就简便易行。
最先,以总产量为例子,图象的四个主要参数。拍攝照片的剪裁((左,上,右,下))必须不断调节才可以明确。明确四个主要参数为1600 760 1830 900后,试着捕获并浏览照片:
###分析1Z开始码left=350top=600right=1300bottom=730image_obj1=new_img.crop((left,top,right,bottom))image_obj1.show()
阻拦取得成功后,能够交到OCR。编码是tool.image_to_string()。
txt1=tool.image_to_string(image_obj1)print(txt1)
一样,根据调节方位,能够精确激光切割出必须鉴别的零件:
left=560top=1260right=900bottom=1320image_obj2=new_img.crop((left,top,right,bottom))#image_obj2.show()txt2=tool.image_to_string(image_obj2)#print(txt2)
最终,抽屉柜的鉴别。
left = 1420top = 1420right = 1700bottom = 1500image_obj3 = new_img.crop((left, top, right, bottom))# image_obj3.show()txt3 = tool.image_to_string(image_obj3)# print(txt3)left = 1420 top = 1420 right = 1700 bottom = 1500 image _ obj 3 = new _ img . crop((左,上,右,下))# image _ obj 3 . show()txt 3 = tool . image _ to _ string(image _ obj 3)# print(txt 3)
必须确定鉴别的信息是不是恰当。假如鉴别准确度不太好,能够考量用图象处理技术性清除噪音,或是去官方网站下载一个准确度高些的练习包,提升鉴别准确度。
到此,大家早已取得成功鉴别出三条信息内容:总额,经营者鉴别号和出票人。随后,大家根据了解的openpyxl将他们载入Excel,并应用os模块完成批量操作。
workbook=Workbook()sheet=workbook.activeheader=['总额','经营者鉴别号','开税票人']sheet.append(header)sheet.append([txt1,txt2,txt3])workbook.save(GetDesktopPath() r'归纳.xlsx')
总的来说,全部要求早已取得成功完成,从实际效果看来或是很出色的!详细的源码能够由原文中的编码构成(全部编码都早已在原文中共享过去了),有兴趣的阅读者能够自主试着!
最终,实际上,很多好用的办公系统脚本制作都能够从这一实例中导出来,比如:
大批量测算税票额度并举取名文件夹名称依据发票种类大批量归类依据税票大批量制做付款申请单··· ···
1.本站大部分内容均收集于网络!若内容若侵犯到您的权益,请发送邮件至:duhaomu@163.com,我们将第一时间处理!
2.资源所需价格并非资源售卖价格,是收集、整理、编辑详情以及本站运营的适当补贴,并且本站不提供任何免费技术支持。
3.所有资源仅限于参考和学习,版权归原作者所有,更多请阅读网站声明。