Python如何实现PDF扫描件生成DOCX或EXCEL功能(docx,pdf,python,开发技术)

时间:2024-05-04 18:24:52 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    1.问题描述

    应项目需求需要获取PDF扫描文件的内容,但寻遍整个网络能达到这种功能的产品,都要会员充值。苦于囊中羞涩也只好编写功能代码来实现了。

    如PDF中表格图片图-1效果生成图-2

    Python如何实现PDF扫描件生成DOCX或EXCEL功能

    图-1

    Python如何实现PDF扫描件生成DOCX或EXCEL功能

    图-2

    2.实现流程

    整个步骤为:读取PDF文件->生成图片->ORC获取图片内容->写入Excel

    Python如何实现PDF扫描件生成DOCX或EXCEL功能

    3.功能代码

    3.1 pdf转为图片

    importfitz#pdf转为图片fromaipimportAipOcr#图片文字识别importtime#程序运行时间间隔以避免出错importdocx#将识别结果保存为docx文件fromdocx.oxml.nsimportqn#设置docx文件的字体"""你的APPIDAKSK"""APP_ID='xxxxxx'API_KEY='xxxxxxxx'SECRET_KEY='xxxxxxxxxxxxxxxxxxxxxxx'client=AipOcr(APP_ID,API_KEY,SECRET_KEY)'''将PDF转化为图片pdfPathpdf文件的路径imgPath图像要保存的路径zoom_xx方向的缩放系数zoom_yy方向的缩放系数rotation_angle旋转角度zoom_x和zoom_y一般取相同值,值越大,图像分辨率越高返回目标pdf的名称和页数,便于下一步操作'''defpdf_image(pdfPath,imgPath,zoom_x=10,zoom_y=10,rotation_angle=0):#获取pdf文件名称name=pdfPath.split("\\")[-1].split('.pdf')[0]#打开PDF文件pdf=fitz.open(pdfPath)#获取pdf页数num=pdf.pageCount#逐页读取PDFforpginrange(0,num):page=pdf[pg]#设置缩放和旋转系数trans=fitz.Matrix(zoom_x,zoom_y).preRotate(rotation_angle)pm=page.getPixmap(matrix=trans,alpha=False)#开始写图像pm.writePNG(imgPath+name+"_"+str(pg)+".png")pdf.close()returnname,num'''将图片读取为docx文件imgPath图像所在路径生成的docx也保存在图像所在路径中name为pdf名称(不含后缀)num为pdf页数name和num均可由上一个函数返回'''defReadDetail_docx(imgPath,name,num):#建立一个空doc文档doc=docx.Document()#设置全局字体doc.styles["Normal"].font.name=u"宋体"doc.styles["Normal"]._element.rPr.rFonts.set(qn('w:eastAsia'),u'宋体')#读取图片forninrange(0,num):i=open(imgPath+name+"_"+str(n)+".png",'rb')time.sleep(0.1)img=i.read()message=client.basicAccurate(img)content=message.get('words_result')#将内容写入doc文档foriinrange(len(content)):doc.add_paragraph(content[i].get('words'))#保存doc文档doc.save(imgPath+name+'.docx')defpdf_to_docx(pdfPath,imgPath,zoom_x=10,zoom_y=10,rotation_angle=0):print("正在将pdf文件转换为图片...")#调用函数一将pdf转换为图片,并获得文件名和页数name_,num_=pdf_image(pdfPath,imgPath,zoom_x,zoom_y,rotation_angle)print("转换成功!")#print("正在读取图片内容...")#调用函数二逐页读取图片并逐行保存在docx文件中#ReadDetail_docx(imgPath,name_,num_)#print("名为{}.pdf的pdf文件共有{}页,已成功转换为docx文件!".format(name_,num_))#pdf储存路径pdf_path="JRT0197-2020金融数据安全数据安全分级指南.pdf"#图片和生成的docx文件的储存路径img_path=r"G:\imges\\"#调用函数pdf_to_docx(pdf_path,img_path)

    3.2 表格图片文字识别到excel

    importpandasaspdimportnumpyasnpimportre#图片识别fromaipimportAipOcr#时间模块importtime#网页获取importrequests#操作系统接口模块importosimage_path=''#获取文件夹中所有图片defget_image():images=[]#存储文件夹内所有文件的路径(包括子目录内的文件)forroot,dirs,filesinos.walk(image_path):path=[os.path.join(root,name)fornameinfiles]images.extend(path)returnimagesdefImage_Excel(APP_ID,API_KEY,SECRET_KEY):#调用百度AI接口client=AipOcr(APP_ID,API_KEY,SECRET_KEY)#循环遍历文件家中图片images=get_image()forimageinimages:#以二进制方式打开图片img_open=open(image,'rb')#读取图片img_read=img_open.read()#调用表格识别模块识别图片table=client.tableRecognitionAsync(img_read)#获取请求IDrequest_id=table['result'][0]['request_id']#获取表格处理结果result=client.getTableRecognitionResult(request_id)#处理状态是“已完成”,获取下载地址whileresult['result']['ret_msg']!='已完成':time.sleep(2)#暂停2秒再刷新result=client.getTableRecognitionResult(request_id)download_url=result['result']['result_data']print(download_url)#获取表格数据excel_data=requests.get(download_url)#根据图片名字命名表格名称xlsx_name=image.split(".")[0]+".xlsx"#新建excel文件xlsx=open(xlsx_name,'wb')#将数据写入excel文件并保存xlsx.write(excel_data.content)if__name__=='__main__':image_path=r"G:\imgs\\"APP_ID='xxxxxxxx'API_KEY='xxxxxxx'SECRET_KEY='xxxxxxxxxxxxxxxxxxxxxx'Image_Excel(APP_ID,API_KEY,SECRET_KEY)

    4. 案例说明

    我这里是获取JRT 0197-2020金融数据安全 数据安全分级指南.pdf扫描文件,将内部表格数据写入到excel文件。

    Python如何实现PDF扫描件生成DOCX或EXCEL功能

    Python如何实现PDF扫描件生成DOCX或EXCEL功能

     </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
    本文:Python如何实现PDF扫描件生成DOCX或EXCEL功能的详细内容,希望对您有所帮助,信息来源于网络。
    上一篇:Entity Framework如何加载控制Loading Entities下一篇:

    16 人围观 / 0 条评论 ↓快速评论↓

    (必须)

    (必须,保密)

    阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18