帮你自动化办公的python - 自动提取pdf指定页(项目概述)

2023-05-16

概述

身为一个苦逼的IT男,每天必不可少的就是要上网查资料,在网上总是经常能看到python、自动化办公、白领的福音之类的字眼,虽然自己主要做嵌入式方面的底层开发,每天也就是码码代码,也没多少办公文件需要我来处理,不过还是怀着好奇的心打算一探究竟。

背景

某一天,就跟正常的每一天一样的某一天,xxx给我发消息,说他们部门马上进入繁忙期,每个人都不能幸免,要开始拼命加班了,不明所以的我还以为他们接了什么大项目,后来一问才知道原来是他们公司把近几年所有同事的工资信息扫描录入一个pdf文件里面,而他们需要找到每个人的工资条并标注,然后单独提取出来放在一个新的pdf文件里面,由于员工的数量庞大,而且信息较多,所以需要动用大量的人力来完成。

听完之后,我这聪明好动的小脑袋马上就开始想了,不是python自动化办公这么牛吗,是不是这种时候就能体现出来了,既然如此,我是不是可以设计一个软件,自动化完成这一系列的工作呢?

思考

需求:设计软件之前第一步必须是分析需求,这一步重中之重,很多人不注重这一点,拿到项目马上就一股脑盲目的写代码,觉得自己灵感迸发,文思泉涌,如有神助,等到设计出来展示给用户,才发现原来这根本就不是用户想要的,悲哀的自己原来从一开始就走偏了,或者说是跑偏了。

既然需求这么重要,那么我们第一件事就是弄懂xxx的需求,经过反复向xxx求证,明确需求如下图所示:

总体来说,xxx需要做的有三件事。

1. 在原文档(包含所有员工工资信息,如上图的3月张三工资信息.pdf文件)中找到指定员工(张三)所在位置,并用特殊颜色(黄色)标记出来。

2. 将将文档中指定员工所在页(如上图中的第3页)外其它页全部删除。

3. 使用上面的规则完成所有员工的处理。

xxx也向我展示了一下她的文件目录,如下图所示:

文件结构还是比较简单,

1. 首先有一个根目录(工资信息),存放所有员工工资信息,不同员工之间以目录的方式分开存放,如张三、李四等。

2. 每个员工目录下,将每年的工资信息通过子目录分开存放。

3. 每年的目录下存放着员工当年的工资信息文档,文档以月份为单位,格式为pdf。

设计

整个项目软件设计围绕用户需求展开,大致完成三个功能;

1. 在文档中,找到指定用户,并标记。

2. 删除文档中指定用户所在页外的其它页。

3. 遍历处理所有员工。

技术点:

1. 解析pdf文档内容。

难点:pdf文档存储内容为扫描文件,解析相对比较麻烦。

思路:先将文档所有页转换为jpg格式,然后调用OCR软件解析图片,找到相关的信息。

实施:应用开源软件tesseract。

结果:由于扫描原因,很多内容清晰度并不高,解析效果显得并不理想,不过因为时间有限,也暂时没有时间研究其它的OCR软件,所以此功能暂时放弃。

2. 处理pdf文档。

调用PyPDF2实现对pdf文档的操作,不过该调用库处理pdf文档需要以页为单位,对于本项目也已经足够了。

3. 多文件处理。

调用os库,遍历指定文件夹下所有.pdf文件(注意:对于子目录,需要递归遍历),存储为列表,然后再进行循环处理即可。

4. ui界面

原计划打算调用pyqt5设计用户界面,不过发现项目功能太过单一,所以改用tkinter库搭建。

功能修改:

考虑到pdf文档解析的复杂性,以及项目时间的紧张的原因,最终将项目功能1交给用户实现,软件仅仅完成功能2和3,也正是因为项目只完成了提取页码的工作,所以被命名为《自动提取pdf指定页》。

项目实施:

1. 用户通过肉眼查找文档中指定员工位置,找到后标注,并修改文件名,在文件名前两位加上页码数字(用于后期软件判断),如下图所示。

2. 通过软件提取页码,删除文档其它页。

3. 遍历处理所有员工信息,查找部分交于用户,删除部分交由软件。

往期 · 推荐

也没想象中那么神秘的数据结构-一种通用化的双向链表设计(底层源码)

也没想象中那么神秘的数据结构-一环扣一环的“链表”(双向链表)

我用C语言玩对象,框架化的模板模式

我用C语言玩对象,偷偷关注着你的观察者模式(基类设计)

我用C语言玩对象,独一无二的单例模式

关注

更多精彩内容,请关注微信公众号:不只会拍照的程序猿,本人致力分享linux、设计模式、C语言、嵌入式、编程相关知识,也会抽空分享些摄影相关内容,同样也分享大量摄影、编程相关视频和源码,另外你若想要本文章源码请关注公众号:不只会拍照的程序猿,后台回复:PDF拆解源码,也可点击此处下载

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

帮你自动化办公的python - 自动提取pdf指定页(项目概述) 的相关文章

  • Mac 连接显示器,外接显示器不出影像

    1 现象 转换头 xff0c 连接线已正确连接 xff1b 显示器电源等也亮 xff0c 且是已有视频信号的状态 xff1b 查看设置 显示器 xff0c 里面也显示识别出已连接外接显示器 2 解决办法 显示器支持的 最高刷新率 与 系统设
  • idea多模块打包

    多模块打包的办法有两个 1 在parent的pom下执行deploy 这样就会自动将父 pom以及子 module都发布到仓库 在模块中添加如下选项 lt distributionManagement gt lt repository gt
  • Xcode 模拟器如何录屏

    1 touch bar 录制图标 有touch bar的MacBook xff0c 模拟器为当前最前窗口事 xff0c touch bar 上点击录制图标即可 xff1b 2 快捷键 选中模拟器界面 xff0c command 43 R 3
  • iOS 组件中设置文件支持MRC

    1 设置该文件的Compiler Flags 为 fno objc arc 使用cocopods 加载此组件时 xff0c 在 Pods 下的 Build Phases 中的 Compile Sources目录中 找到想要设置的文件 xff
  • Null passed to a callee that requires a non-null argument 【iOS常见报错收集】

    1 问题描述 xff1a xcode提示如下 xff1a 2 问题原因 此处某参数未设置 Nullable xff0c 但是赋值了nil xff0c xcode自动提示防止nil导致异常 xff1b 3 解决办法 将此处有可能传入nil的参
  • win10扩展EFI分区

    Win10扩展EFI分区 由于需要在Win10上安装Ubuntu18 04双系统 xff0c 硬盘格式为GPT xff0c 安装过程中需要将Ubuntu的引导分区设置Win10的EFI分区 xff0c 但是win10的EFI分区装系统时默认
  • 桌面图标美化,图包分享

    图标修改教程 先放效果图 xff1a 直接进入正题 xff1a 此电脑 网络 回收站等 xff1a 桌面右键 gt 个性化 gt 主题 gt 相关的设置 gt 桌面图标设置 应用等 xff1a 右键应用 gt 属性 系统图标 xff0c 以
  • Spring注解原理的详细剖析与实现

    一 注解的基本概念和原理及其简单实用 注解 xff08 Annotation xff09 提供了一种安全的类似注释的机制 xff0c 为我们在代码中添加信息提供了一种形式化得方法 xff0c 使我们可以在稍后某个时刻方便的使用这些数据 xf
  • Java实现集合的组合(从组合中取出K个元素进行组合的所有情况)

    1 利用递归进行取出数据 span class hljs keyword public span static span class hljs subst lt span T span class hljs subst gt span sp
  • 浅谈Dockerfile文件

    DockerFile dockerfile是用来构建Docker镜像的构建文件 xff0c 是由一系列命令和参数构成的脚本 DockerFile构建过程解析 Dockerfile内容基础知识 每条保留字指令都必须为大写字母且后面要跟随至少一
  • Java基础学习 100 问

    Java基础学习 100 问 来源 xff1a 赢在面试 xff08 Java知音 javascript void 0 x1f609 xff09 一 Java基础篇 1 一个 34 java 34 源文件中是否可以包括多个类 xff08 不
  • Windows下误删EFI分区重建引导简单教程

    环境 xff1a windows10 xff0c 其余环境未经测试 EFI百度词条解释如下 xff1a EFI system partition ESP xff0c EFI 系统分区通常指数据存储介质中的一个分区 xff0c 通常用于硬盘或
  • maven导入本地jar包

    最近看 https github com junicorn kira 实现的java的代码 有个库发现没法使用maven安装 https mvnrepository com artifact com bladejava blade kit
  • TensorFlow入门教程(23)将图像超分辨率模型SRGAN移植到安卓APP(下)

    作者 xff1a 韦访 博客 xff1a https blog csdn net rookie wei 微信 xff1a 1007895847 添加微信的备注一下是CSDN的 欢迎大家一起学习 1 概述 上一讲我们将SRGAN模型由HDF5
  • (四)生产者消费者模式

    xff08 一 生产者消费者模式原理 xff1a 在一个系统中 xff0c 存在生产者和消费者两种角色 xff0c 他们通过内存缓冲区进行通信 xff0c 生产者生产消费者需要的资料 xff0c 消费者把资料做成产品 生产消费者模式如下图
  • Ubuntu 18.04串口终端开机免密自动登录

    Ubuntu 18 04串口终端开机免密自动登录 serial getty开机设置选项 ubuntu18 04已经不再使用initd管理系统 改用systemd serial getty span class token comment v
  • NRF52840 用RTT打印log配置方法

    1 在sdk config h中配置两个宏 xff1a NRF LOG ENABLED 1 NRF LOG BACKEND RTT ENABLED 1 2 需要初始化NRF LOG static void log init void ret
  • Unable to add window ,is your activity running?

    Unable to add window xff0c is your activity running span class hljs label android view WindowManager BadTokenException s
  • Python爬虫爬取NBA数据

    爬取的网站为 xff1a stat nba com xff0c 本文爬取的是NBA2016 2017赛季常规赛至2017年1月7日的数据 改变url header和url tail即可爬取特定的其他数据 源代码如下 xff1a coding
  • 也没想象中那么神秘的数据结构-先来后到的“队列”(顺序队列)

    概念 队列是一种特殊的线性表 xff0c 特殊之处在于它只允许在表的前端 xff08 front xff09 进行删除操作 xff0c 而在表的后端 xff08 rear xff09 进行插入操作 xff0c 和栈一样 xff0c 队列是一

随机推荐