吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 20283|回复: 141
收起左侧

[Windows] 【Python自制软件】什么?老板又给了100份合同要扫描归档?

    [复制链接]
d8349565 发表于 2020-12-5 00:20
本帖最后由 d8349565 于 2020-12-5 00:35 编辑

“专业的IT人员不做繁琐的日常文件管理工作,专业的白领也负担不起软件定制与维护”
    以上大概就是我开始自学Python编程的原因吧!
-----------------------------------------------------------------------------------------------------------------------------------------------
软件介绍:
    很久没更新,大概就是因为标题中指的时不时一大堆合同给耽误了吧。
    日常工作中,确实有很多类似于合同、协议、表单等,在扫描完成后,需要进行归档存储。大部分的扫描仪都只能帮你自动按照时间流水号,相信很多人都痛苦与扫描后一个个打开手动重命名的工作了。
所以,我临时搜索自学了下,制作了以下软件。

使用方法:
1、以下为举例的扫描后需要重命名存档的PDF文件:


1、说明1.PNG

2、还好每个文件都有一份固定格式的评审表(虚拟的),通过代码识别合同名称、合同签订方后面的文本内容:

2、说明2.PNG

3、双击打开软件,示例如下:

3、操作示例2.gif

4、特别注意:
    由于代码中调用了百度文本识别的API,高精度识别版本,每天免费调用500次,可以到以下网址进行申请“申请应用获取的 ID,下同  链接:https://ai.baidu.com/tech/ocr/general
    每个人的文件内容都不一样,请在根目录下的txt中修改关键字1和关键字2

image.png

5、代码分享
[Python] 纯文本查看 复制代码
'''
文件扫描自动重命名
@Auther Lee
@software: Pycharm
@Version:1.0
'''

import easygui as g
from PyPDF2 import PdfFileReader,PdfFileWriter # 读和写
import fitz  # fitz                pip install PyMuPDF
import os
from aip import AipOcr
import re

def get_files(path):
    pdf_files=list(os.scandir(path))
    return pdf_files

def get_page1(pdf_file):
    read_PDF = PdfFileReader(pdf_file)
    write_pdf = PdfFileWriter()  # 实例化对象
    write_pdf.addPage(read_PDF.getPage(0)) # 将遍历出的每一页添加到实例化对象中
    pdf_path=f'{os.path.dirname(pdf_file)}\\临时.pdf'
    with open(pdf_path, "wb") as b:
        write_pdf.write(b)
    return pdf_path

def pyMuPDF_fitz(pdfPath):
    imagePath=os.path.dirname(pdfPath)
    pdfDoc = fitz.open(pdfPath)
    page = pdfDoc[0]
    rotate = int(0)
    # 每个尺寸的缩放系数为1.3,这将为我们生成分辨率提高2.6的图像。
    # 此处若是不做设置,默认图片大小为:792X612, dpi=96
    zoom_x = 1.33333333  # (1.33333333-->1056x816)   (2-->1584x1224)
    zoom_y = 1.33333333
    mat = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
    pix = page.getPixmap(matrix=mat, alpha=False)
    if not os.path.exists(imagePath):  # 判断存放图片的文件夹是否存在
        os.makedirs(imagePath)  # 若图片文件夹不存在就创建
    png_path = imagePath + '\\临时.png'
    pix.writePNG(png_path)  # 将图片写入指定的文件夹内
    return png_path

def baiduOCR(picfile):
    # APP_ID = '自行填写'                     # 申请应用获取的 ID,下同  链接:https://ai.baidu.com/tech/ocr/general
    # API_KEY = '自行填写'
    # SECRECT_KEY = '自行填写'
    client = AipOcr(APP_ID, API_KEY, SECRECT_KEY)
    image = open(picfile, 'rb')
    rb_data = image.read()
    message = client.basicAccurate(rb_data)  # 通用文字高精度识别,每天 500 次免费
    image.close()
    return message

def rename_pdf(pdf_file_path,a,b):
    new_path=f'{os.path.dirname(pdf_file_path)}\\{a}-{b}.pdf'
    os.rename(pdf_file_path,new_path)
    return new_path


def main():
    path=g.diropenbox(msg='请选择需要处理的文件夹')              # 获取文件夹路径
    pdf_files=get_files(path)                   # 获取所有文件
    for i in range(0,len(pdf_files)):
        pdf_file=pdf_files[i]                       # 获取第n个文件
        file_path=os.path.abspath(pdf_file)         # 获取此文件的路径
        try:
            page1_path=get_page1(file_path)             # 将PDF文件的第一页提取并保存为《临时.pdf》  返回绝对路径
        except:
            print(f'失败:将{pdf_file}的第一页提取并保存为《临时.pdf》')
            continue
        try:
            png_file=pyMuPDF_fitz(page1_path)           # 将《临时.pdf》转换为《临时.png》  返回绝对路径
        except:
            print(f'失败:将{pdf_file}的《临时.pdf》转换为《临时.png》')
            continue
        message=baiduOCR(png_file)                  # 通过百度ocr识别《临时.png》中的文本内容
        content=message.get('words_result')         # 筛选出文本内容部分
        The_text=[i.get('words') for i in content]  # 筛选出文本内容部分为列表
        choices=[]                                  # 设置一个空列表
        try:
            for i in The_text:
                if 关键字1 in i or 关键字2 in i:    # 如果文本中有此关键字,则进行以下内容
                    i = i.split(':')[-1]                              # 取冒号右侧内容
                    cop = re.compile("[^\u4e00-\u9fa5^a-z^A-Z^0-9]")  # 匹配不是中文、大小写、数字的其他字符
                    i=cop.sub('', i)                                  # 将匹配到的字符替换成空字符
                    choices.append(i)                                 # 添加到空列表中
        except:
            print(f'失败:{pdf_file}无此关键内容')
            continue
        try:
            new_path=rename_pdf(file_path,choices[0],choices[1])               # 通过关键字筛选出的文本来重命名文件
            print(f'成功:{new_path}已完成重命名')
        except:
            print(f'失败:{pdf_file}无法重命名')
            continue
        try:
            os.remove(page1_path)                                     # 删除临时文件《临时.pdf》
            os.remove(png_file)                                       # 删除临时文件《临时.png》
        except:
            continue


if __name__ == '__main__':
    with open ('信息补充.txt','r',encoding='utf-8') as t:
        txt=t.readlines()
        # print(txt)
        APP_ID = txt[0].split("=")[-1].strip()
        API_KEY = txt[1].split("=")[-1].strip()
        SECRECT_KEY = txt[2].split("=")[-1].strip()
        关键字1=txt[3].split("=")[-1].strip()
        关键字2=txt[4].split("=")[-1].strip()
        # print(APP_ID,API_KEY,SECRECT_KEY,关键字1,关键字2)
    main()


6、exe文件分享

蓝奏云:https://leezfy.lanzouj.com/in83mj26jqh 密码:c43y


5、文件清单.PNG

免费评分

参与人数 68吾爱币 +56 热心值 +58 收起 理由
CoolKids + 1 + 1 地址失效了 楼主
sexyback_123 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
小杨今天很迷茫 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lin10001 + 1 谢谢@Thanks!
记得住记得住 + 1 + 1 热心回复!
奈何天NHT + 1 + 1 厉害厉害
小黑蛋 + 1 + 1 我很赞同!
俺是新会员 + 1 谢谢@Thanks!
娟然俊逸 + 1 + 1 热心回复!给大佬倒一杯82年的可乐
niubi52 + 1 + 1 大佬我正需要,请联系我,修改个东西。有偿
亿信 + 1 + 1 谢谢@Thanks!
九月喵 + 1 谢谢@Thanks!
耶夜子 + 1 谢谢@Thanks!
墨染青衫 + 1 + 1 谢谢@Thanks!
cwc5540102 + 1 + 1 谢谢@Thanks!
gamewww + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
如醉 + 1 + 1 我很赞同!
frsoce + 1 我很赞同!
oksun + 1 热心回复!
962499 + 1 鼓励转贴优秀软件安全工具和文档!
a5228172 + 1 + 1 谢谢@Thanks!
aikexue + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zmcom + 1 + 1 用心讨论,共获提升!
四季雨歌 + 1 我很赞同!
天地人2019 + 1 + 1 谢谢@Thanks!
我的宝宝 + 1 + 1 我很赞同!
符华 + 1 + 1 我很赞同!
Pony21 + 1 + 1 谢谢@Thanks!
Sumi_小书 + 1 + 1 谢谢@Thanks!
混元灵通 + 1 + 1 虽然没有遇到这种问题,但是就是支持原创党
狐白本白 + 1 + 1 谢谢@Thanks!
Unpro + 1 谢谢@Thanks!
jdw6140320 + 1 + 1 我很赞同!
大奶萝莉粉红鲍 + 1 + 1 我很赞同!
austinma + 1 我很赞同!
jefflo + 1 我很赞同!
哇哈哈大笑 + 1 我很赞同!
Tauch + 1 用心讨论,共获提升!
sisao + 1 + 1 谢谢@Thanks!
st1118 + 1 + 1 谢谢@Thanks!
fishcs + 1 + 1 谢谢@Thanks!
yh13100157396 + 1 热心回复!
zjun777 + 1 谢谢@Thanks!
losen1989 + 1 + 1 大佬牛逼注释详细。
wyangdh + 1 + 1 我很赞同!
tsks12 + 1 我很赞同!
zhangjiti + 1 + 1 谢谢@Thanks!
yanglinman + 1 谢谢@Thanks!
z2740 + 1 + 1 谢谢@Thanks!
学网络 + 1 + 1 我很赞同!
blindcat + 1 + 1 用心讨论,共获提升!
kissfast + 1 + 1 谢谢@Thanks!
macafreeviurs + 1 + 1 热心回复!
光年之外 + 1 + 1 热心回复!
qiujunjian1 + 1 + 1 谢谢@Thanks!
qdxxglb3 + 1 + 1 我很赞同!
xxscwsrym + 1 + 1 我很赞同!
Crystallee + 1 + 1 我很赞同!
S1280P + 1 我很赞同!
woyucheng + 1 + 1 谢谢@Thanks!
18135453050 + 1 + 1 热心回复!
zsz1204 + 1 + 1 用心讨论,共获提升!
cdlsz + 1 + 1 谢谢@Thanks!
dmf007 + 1 谢谢@Thanks!
咖喱土豆 + 1 + 1 谢谢@Thanks!
神枪泡泡丶 + 2 + 1 用心讨论,共获提升!
5爱石皮角刀牛 + 1 + 1 我很赞同!
Azad + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

bookaccount 发表于 2020-12-5 01:30
ocr不是100%准确的                                            
 楼主| d8349565 发表于 2020-12-5 09:16
haidibingjing 发表于 2020-12-5 08:55
这个只能识别非首页的,他有字段限制。 他给的字段没有“住址”

使用高精度版本api
因为格式都是一样的,所以可以在这段代码里面修改下,找到对应内容的下标,如果是2个,就拼接起来

[Asm] 纯文本查看 复制代码
message=baiduOCR(png_file)                  # 通过百度ocr识别《临时.png》中的文本内容
        content=message.get('words_result')         # 筛选出文本内容部分
        The_text=[i.get('words') for i in content]  # 筛选出文本内容部分为列表
Azad 发表于 2020-12-5 00:29
xjqxzlydy 发表于 2020-12-5 00:45
感谢楼主分享!!!
liuzdk 发表于 2020-12-5 00:56
认真学习下啊啊
5爱石皮角刀牛 发表于 2020-12-5 00:57
半夜开始闲逛了
种子田里的XD 发表于 2020-12-5 03:07
刚好有重命名的需求 感谢分享 我也要学python了
lovetanjie 发表于 2020-12-5 05:03
多谢分享,办公必备
uruliang 发表于 2020-12-5 06:36
即能用,还能学,谢谢分享!
cdlsz 发表于 2020-12-5 07:03
下载试试。感谢分享资源
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 提醒:禁止复制他人回复等『恶意灌水』行为,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-2 17:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表