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

目录
  • 1.问题描述
  • 2.实现流程
  • 3.功能代码
    • 3.1pdf转为图片
    • 3.2表格图片文字识别到excel
  • 4.案例说明

1.问题描述

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

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

图-1

图-2

2.实现流程

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

3.功能代码

3.1 pdf转为图片

import fitz # pdf转为图片
from aip import AipOcr # 图片文字识别
import time # 程序运行时间间隔以避免出错
import docx # 将识别结果保存为docx文件
from docx.oxml.ns import qn # 设置docx文件的字体

""" 你的 APPID AK SK """
APP_ID = 'xxxxxx'
API_KEY = 'xxxxxxxx'
SECRET_KEY = 'xxxxxxxxxxxxxxxxxxxxxxx'

client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

'''
将PDF转化为图片
pdfPath pdf文件的路径
imgPath 图像要保存的路径
zoom_x x方向的缩放系数
zoom_y y方向的缩放系数
rotation_angle 旋转角度
zoom_x和zoom_y一般取相同值,值越大,图像分辨率越高
返回目标pdf的名称和页数,便于下一步操作

'''
def pdf_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
    # 逐页读取PDF
    for pg in range(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()
    return name, num

'''
将图片读取为docx文件
imgPath 图像所在路径
生成的docx也保存在图像所在路径中
name为pdf名称(不含后缀)
num为pdf页数
name和num均可由上一个函数返回

'''
def ReadDetail_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'宋体')
    # 读取图片
    for n in range(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文档
        for i in range(len(content)):
            doc.add_paragraph(content[i].get('words'))
    # 保存doc文档
    doc.save(imgPath + name + '.docx')

def pdf_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 = "JRT 0197-2020金融数据安全 数据安全分级指南.pdf"
# 图片和生成的docx文件的储存路径
img_path = r"G:\imges\\"
# 调用函数
pdf_to_docx(pdf_path, img_path)

3.2 表格图片文字识别到excel

import pandas as pd
import numpy as np
import re
# 图片识别
from aip import AipOcr
# 时间模块
import time
# 网页获取
import requests
# 操作系统接口模块
import os

image_path = ''

# 获取文件夹中所有图片

def get_image():
    images = []  # 存储文件夹内所有文件的路径(包括子目录内的文件)
    for root, dirs, files in os.walk(image_path):
        path = [os.path.join(root, name) for name in files]
        images.extend(path)
    return images

def Image_Excel(APP_ID, API_KEY, SECRET_KEY):
    #  调用百度AI接口
    client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
    # 循环遍历文件家中图片
    images = get_image()
    for image in images:
        # 以二进制方式打开图片
        img_open = open(image, 'rb')
        # 读取图片
        img_read = img_open.read()
        # 调用表格识别模块识别图片
        table = client.tableRecognitionAsync(img_read)
        # 获取请求ID
        request_id = table['result'][0]['request_id']
        # 获取表格处理结果
        result = client.getTableRecognitionResult(request_id)
        # 处理状态是“已完成”,获取下载地址
        while result['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 扫描件转DOCX EXCEL的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python自动化办公实战案例详解(Word、Excel、Pdf、Email邮件)

    目录 背景 实现过程 1)替换Word模板生成对应邀请函 2)将Word邀请函转化为Pdf格式 4)自动发送邮件 5)完整代码 总结 背景 想象一下,现在你有一份Word邀请函模板,然后你有一份客户列表,上面有客户的姓名.联系方式.邮箱等基本信息,然后你的老板现在需要替换邀请函模板中的姓名,然后将Word邀请函模板生成Pdf格式,之后编辑统一的邀请话术(邮件正文),再依次发送邀请函附件到客户邮箱,你会怎么做? 正常情况下,我们肯定是复制粘贴Excel表格中的客户姓名,之后挨个Word文档进行替换

  • python实现PDF中表格转化为Excel的方法

    这几天想统计一下<中国人文社会科学期刊 AMI 综合评价报告(2018 年):A 刊评价报告>中的期刊,但是只找到了该报告的PDF版,对于表格的编辑不太方便,于是想到用Python将表格转成Excel格式. 看过别人写的博客,发现Python解析PDF有以下四种方式: -pdfminer:擅长文字的解析,把表格解析成普通的文本,没有格式: -pdf2html:把pdf解析成html,但html的标签并没有规律,解析一个表格还可以,多个表格的话不太好提取: -tabula:对于简单的表格,即单元

  • Python读取pdf表格写入excel的方法

    背景 今天突然想到之前被要求做同性质银行的数据分析.妈耶!十几个银行,每个银行近5年的财务数据,而且财务报表一般都是 pdf 的,我们将 pdf 中表的数据一个个的拷贝到 excel 中,再借助 excel 去进行求和求平均等聚合函数操作,完事了还得把求出来的结果再统一 CV 到另一张表中,进行可视化分析- 当然,那时风流倜傥的 老Amy 还熟练的玩转着 excel ,也是个秀儿~ 今天就思索着,如果当年我会 Python 是不是可以让我成为班级最靓的崽!用技术占领高地,HHH,所以今天我来了,

  • python3如何将docx转换成pdf文件

    本文实例为大家分享了python3将docx转换成pdf文件的具体代码,供大家参考,具体内容如下 直接上代码 # -*- encoding:utf-8 -*- """ author:lgh """ from win32com.client import Dispatch, constants, gencache def doc2pdf(input, output): w = Dispatch('Word.Application') try: #

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

    目录 1.问题描述 2.实现流程 3.功能代码 3.1pdf转为图片 3.2表格图片文字识别到excel 4.案例说明 1.问题描述 应项目需求需要获取PDF扫描文件的内容,但寻遍整个网络能达到这种功能的产品,都要会员充值.苦于囊中羞涩也只好编写功能代码来实现了. 如PDF中表格图片图-1效果生成图-2 图-1 图-2 2.实现流程 整个步骤为:读取PDF文件->生成图片->ORC获取图片内容->写入Excel 3.功能代码 3.1 pdf转为图片 import fitz # pdf转为

  • Android 二维码扫描和生成二维码功能

    在APP开发中,常遇到二维码扫描功能和生成二维码的需求.Android大部分是集成了zxing这个开源项目的扫码功能. 开源项目地址 下面给大家介绍一下具体的集成步骤 集成步骤 参考demo 1.demo展示如下: 1.1demo首页 1.2扫描界面 可以根据需求修改,我实际项目中界面截图如下: 1.3生成二维码 2.引入文件 2.1 下载demo,拷贝demo中的com.google.zxing5个包和com.utils包引入到自己的项目中. 2.2 拷贝本项目demo中的布局activity

  • Python实现PDF文字识别提取并写入CSV文件

    目录 1.前言 2.需求描述 3.开始动手动脑 3.1安装相关第三方包 3.2导入需要用到的第三方库 3.3读取pdf文件,并识别内容 3.4对识别的数据进行处理,写入csv文件 总结 1. 前言 扫描件一直受大众青睐,任何纸质资料在扫描之后进行存档,想使用时手机就能打开,省心省力.但是扫描件的优点也恰恰造成了它的一个缺点,因为是通过电子设备扫描,所以出来的是图像,如果想要处理文件上的内容,直接操作是无法实现的. 那要是想要引用其中的内容怎么办呢?别担心,Python帮你解决问题. 2. 需求描

  • 教你使用Python根据模板批量生成docx文档

    一.需求说明 能够根据模板批量生成docx文档.具体而言,读取excel中的数据,然后使用python批量生成docx文档. 二.实验准备 准备excel数据: 这里是关于学生语数英成绩的统计表,文件名为score.xls 准备模板: 这是给学生家长的成绩通知书,文件名为template.doc 另外,在使用python进行实验之前,需要先安装第三方库docxtpl和xlrd,直接pip install就行: pip install docxtpl pip install xlrd 然后将xls

  • Python提取PDF指定内容并生成新文件

    在之前的Python办公自动化案专题中,我们已经介绍了如何有选择的提取某些页面进行合并. 但是很多时候,我们并不会预知希望提取的页号,而是希望将包含指定内容的页面提取合并为新PDF,本文就以两个真实需求为例进行讲解. 01需求描述 数据是一份有286页的上市公司公开年报PDF,大致如下 现在需要利用 Python 完成以下两个需求 " 需求一:提取所有包含 战略 二字的页面并合并新PDF 需求二:提取所有包含图片的页面,并分别保存为 PDF 文件 " 02前置知识和逻辑梳理 2.1 P

  • Python实现pdf文档转txt的方法示例

    本文实例讲述了Python实现pdf文档转txt的方法.分享给大家供大家参考,具体如下: 首先,这是一个比较粗糙的版本,因为已经够用了,而且对pdf的格式不熟悉,所以暂时没有进一步优化. 还有,这是转成txt的,所以如果是有图片的pdf是无法保存图片的. 至于本来就是图片的文本,这里是无法分析出来的.那些图片的pdf,估计要用图形匹配的方式来处理,类似于超速拍摄的车牌识别. 不过这样的程度,已经不是文本处理了.扯远了... 转出来的文字,好像按照pdf里面的所展示的来换行了,看不到有什么规则还原

  • 详解用Python把PDF转为Word方法总结

    先讲一下为啥要写这个文章,网上其实很多这种PDF转化的代码和软件.我一直想用Python做,但是网上搜到的代码很多都不能用,很多是2.7版本的代码,再就是PDF需要用到的库在导入的时候,很多的报错,解决起来特别费劲,而且自从2021年初以来,似乎网上很少有关PDF转化的代码出现了.我在研究了很多代码和pdfminer的用法后,总结了几个方法,目前这几种方法可以解决大多数格式的转化,后面我也专门放了提取PDF表格的代码,文末有高效的免费在线工具推荐. 下面这个是我最最推荐的方法 ,简单高效 ,只要

  • Python实现PDF转Word的方法详解

    由于PDF的文件大多都是只读文件,有时候为了满足可以编辑的需要通常可以将PDF文件直接转换成Word文件进行操作. 看了网络上面的python转换PDF文件为Word的相关文章感觉都比较复杂,并且关于一些图表的使用还要进行特殊的处理. 本篇文章主要讲解关于如何使用python是实现将PDF转换成Word的业务过程,这次没有使用GUI应用的操作. 由于可能存在版本冲突的问题,这里将开发过程中需要使用的python非标准库的版本列举出来. python内核版本:3.6.8 PyMuPDF版本:1.1

  • Android实现二维码扫描和生成的简单方法

    这里简单介绍一下ZXing库.ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口.Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码.该项目可实现的条形码编码和解码.目前支持以下格式:UPC-A,UPC-E.EAN-8,EAN-13.39码.93码.ZXing是个很经典的条码/二维码识别的开源类库,以前在功能机上,就有开发者使用J2ME运用ZXing了,不过要支持JSR-234规范(自动对焦)的手机才能发挥其威力. ZXing

  • 基于PHP与XML的PDF文档生成技术

    摘要 本论文简要介绍了PHP.XML.PDF等技术的原理以及它们的应用情况.力图运用PHP面向对象的特性,构建出一套基于PHP和XML的在线PDF文档生成系统.文中详细探讨了整个系统的组成部分以及各自的实现过程.并在最后给出一个运用这套系统实现的动态创建报表的实例. AbstractThis article introduced the fundamentls of PHP,XML and PDF and their application situation at present,expect

随机推荐