使用python开发一个pdf合并工具
老婆给女儿整理打印学习资料,希望能从很多个pdf中抽取一些页码来合并成一个文件,
就希望我能写一个程序来实现这个功能。刚好最近正在学习python,就用python开发了一个
pdf合并工具,也算是学以致用吧。
界面如下:
最多可以选取10个pdf文件,输入要合并的页码范围,最后会把选择的页码合并为一个文件。
或者可以选择一个文件夹,合并其中所有pdf的所有页码为一个文件。
由于时间紧,任务重,对python还有点生疏,所有界面功能难免简单粗暴,幼稚可笑, 还请多多包涵。
系统界面用得是python 3.7.4版本自带的标准tkinter GUI工具包,提供了丰富的GUI组件,使用起来相当
方便,没有什么可以说的。
要实现pdf合并功能,需要引入PyPDF2库。因为python 3.7.4版本自带了python 库的安装工具pip,所以
安装PyPDF2库也相当简单,联网情况下,直接命令行:pip install pypdf2 就好了。
然后使用其中的pdfFileReader读取pdf,pdfFileWriter写入pdf,都非常直观简单,唯一要注意的是,pdf
文件的编码。python 3缺省的编码格式是utf-8,在合并gbk编码的pdf时,会报错:
File
"D:\Python\Python37\Lib\site-packages\PyPDF2\generic.py", line 484,
in
readFromStream
return
NameObject(name.decode(
'utf-8'
))
UnicodeDecodeError:
'utf-8'
codec can't decode byte
0xc8
in
position
10
: invalid continuation byte
上网搜一把,很多人都遇到过这个问题,如 coderkkk的CSDN博客:
PyPDF2 编码问题 PyPDF2.utils.PdfReadError Illegal character in Name Object
链接:https://blog.csdn.net/kmesky/article/details/102695520
修改generic.py 484行,加上except出错时尝试gbk编码:
然后同时修改Lib/site-packages/PyPDF2/utils.py 第238行,加上utf-8的编码:
看博客的回复,这个修改解决了别人的问题。但是在我这里却无法成功。尝试把第一个文件的gbk改为big5,bg2312,也尝试给第二个文件加上big5,等等其它编码方式,但是始终报那个错误。
实在无计可施了,心想既然utils.py中原来就是用latin-1的编码,那generic.py也用latin-1的编码,不就可以了么?反正
合并pdf是按页进行的,文本名称编码应该涉及不到。这样修改之后,utils.py都不用改,竟然合并成功了!!!
到这来功能已经完成了,但是老婆不会运行py文件,所以还得打包成exe给她用。好在python的打包库使用起来很方便,比
java打包exe还简单。同样pip install pyinstaller,安装完成后,命令行执行:
pyinstaller -F -w -i c:/users/dumbbellyang/Desktop/pdfMerger.ico c:/users/dumbbellyang/Desktop/pdfMerger.py
其中-F表示打包成一个文件,w表示windows应用,隐藏python的命令行窗口,i表示icon文件路径,最后是python代码文件。
执行完成后,就会生成一个exe:
代码是使用python自带的集成开发环境IDLE,缺省是没有代码行显示的,而且白色的背景看起来也很不舒服,
所以就上网搜了下显示代码行及改变背景的方法:
改变背景很简单:D:\Python\Python37\Lib\idlelib\config-highlight.def 配置文件中添加:
[Obsidian]
definition-foreground = #678CB1
error-foreground = #FF0000
string-background = #293134
keyword-foreground = #93C763
normal-foreground = #E0E2E4
comment-background = #293134
hit-foreground = #E0E2E4
builtin-background = #293134
stdout-foreground = #678CB1
cursor-foreground = #E0E2E4
break-background = #293134
comment-foreground = #66747B
hilite-background = #2F393C
hilite-foreground = #E0E2E4
definition-background = #293134
stderr-background = #293134
hit-background = #000000
console-foreground = #E0E2E4
normal-background = #293134
builtin-foreground = #E0E2E4
stdout-background = #293134
console-background = #293134
stderr-foreground = #FB0000
keyword-background = #293134
string-foreground = #EC7600
break-foreground = #E0E2E4
error-background = #293134
[tango]
definition-foreground = #fce94f
error-foreground = #fa8072
string-background = #2e3436
keyword-foreground = #8cc4ff
normal-foreground = #ffffff
comment-background = #2e3436
hit-foreground = #ffffff
break-foreground = #000000
builtin-background = #2e3436
stdout-foreground = #eeeeec
cursor-foreground = #fce94f
hit-background = #2e3436
comment-foreground = #73d216
hilite-background = #edd400
definition-background = #2e3436
stderr-background = #2e3436
break-background = #2e3436
console-foreground = #87ceeb
normal-background = #2e3436
builtin-foreground = #ad7fa8
stdout-background = #2e3436
console-background = #2e3436
stderr-foreground = #ff3e40
keyword-background = #2e3436
string-foreground = #e9b96e
hilite-foreground = #2e3436
error-background = #2e3436
然后在IDLE的菜单Options->Config IDLE 的highlights tab中选择:
代码添加行号,要引入一个IDLE的扩展IDLEX,下载:
http://idlex.sourceforge.net/extensions.html
解压后,把LineNumbers.py从idlex-1.18\idlex-1.18\idlexlib\extensions 目录复制到python IDLE目录:
Python37\Lib\idlelib,并修改64和65行:
from idlelib.Delegator import Delegator
from idlelib.Percolator import Percolator
为:
from idlelib.delegator import Delegator
from idlelib.dercolator import Percolator
同时把configHandler.py 从idlex-1.18\idlex-1.18\idlexlib\idlefork\idlelib 目录复制到python安装路径下的
IDLE目录:Python37\Lib\idlelib
然后在同目录下config-extensions.def文件中加入LineNumbers的配置:
[LineNumbers]
enable=1
enable_editor=1
enable_shell=0
visible=1
[LineNumbers_cfgBindings]
linenumbers-show =True
重新打开IDLE,你会发现,背景已修改,代码行已经显示:
代码已经上传:https://download.csdn.net/download/yangdanbo1975/12112329
使用python开发一个pdf合并工具相关推荐
- 再见所有的翻译工具!我使用了有道云+Python开发一个批量文档翻译工具!
一.需求分析 需求: 最近有个任务,需要对一批文件进行汉译英的翻译 刚开始想着挺简单的呀,那就直接复制到翻译软件中,在复制出来呗. 有很多办法可以实现翻译: 可以使用谷歌翻译,这个完全免费的.但是不好 ...
- 【办公自动化】基于Python开发的PDF批量转换-合并应用程序
场景描述: 日常处理文件时,经常遇到将word批量转换成pdf文件,以及合并多个pdf文件的需求. 那么问题来了 1.市面上的office程序只能支持单个文件转换,批量与合并是收费的. 2.而网页上的 ...
- 用Python制作一个PDF转Word工具
用Python制作一个PDF转Word工具 工具:Python3.9.13,VSCode1.73.1,pdf2docx0.5.6,tkinter,Win10Home PDF文件不易编辑,想要编辑需要转 ...
- 微软的python开发工具_面向 Python 开发人员的 Azure 工具
面向 Python 开发人员的 Azure 工具Azure tools for Python developers 08/06/2020 本文内容 Visual Studio CodeVisual S ...
- Python开发一个股票类库
前言 使用Python开发一个股票项目. 项目地址: https://github.com/pythonstock/stock 相关资料: http://blog.csdn.net/freew ...
- python开发的著名软件公司_软件开发公司_软件外包_项目外包平台基于Python开发一个全文检索系统...
基于Python开发一个全文检索系统.功能要求为: 使用全文检索引擎对文本进行检索.文本的格式为Word.PDF.TXT. 同时按数据域进行复合条件检索.数据域指文本对应的信息,例如创建人.文件编号. ...
- 用Python写一个纪念日计算工具
用python写一个纪念日计算工具 前言 主要内容 日期计算函数 GUI布局 用pyinstaller打包生成.exe文件 打包后的.exe文件预览 运行结果 最后提前祝马英俊生日快乐吧~ 前言 纪念 ...
- 【办公常用软件】万彩办公大师教程丨PDF合并工具帮助文档
PDF合并工具是一款简单.快捷的桌面应用程序,可以合并两个或多个图像/PDF格式文件至一个PDF文档中.生成的文档能兼容 Adobe Acrobat Reader 5 或更高版本. 使用PDF合并工具 ...
- 云展网教程 | 云展网PDF合并工具使用说明
云展网PDF合并工具是一款完全免费的多功能PDF处理工具,处理好输出的文件不带任何logo水印. 它的主要功能为: 1.将多个文件(仅支持图片以及PDF格式)合并成一个PDF: 2.添加页码: 3.设 ...
最新文章
- Tomcat - 源码构建Tomcat 8.5.55 启动
- 把之前写的几个项目放到了github上
- Python error: Unable to find vcvarsall.bat
- linux uname 命令 打印系统信息
- onhashchange
- Sql Server中查看/修改identity(自增列)的值
- arduino 休眠 节能_优化arduino程序存储空间
- Flash 与数学:圆的切线(2)
- javascript监听输入框_html通过JS/jQuery实现 实时监听输入框input的内容
- 如何从 Hibernate官网下载 hibernate原码 和hibernatetools
- simulink——产生阶梯波
- Windows右键菜单项管理讲解(RightMenuMgr)
- 网络协议:透彻解析HTTP协议
- JavaScript在表格中实现九九乘法表
- c++ cout 不能正常打印uint8_t
- 网络重置后WLAN网络找不到怎么办?
- 【数据库系统】第一部分 数据库基础(4) 数据库安全性
- Selenium工作原理_Sinno_Song_新浪博客
- 哈工大软件构造笔记1
- 计算机丢失quartz.dll什么意思,计算机中丢失quartz.dll解决方法
热门文章
- 2021-2027全球与中国户外建筑用大理石市场现状及未来发展趋势
- 通过第三方jar实现中文转换为拼音
- 【利用Nginx实现白名单功能】
- JEM software ticket45:Console output error of nQP when LCU level rate control is enabled
- Things_androidThings入门
- GitChat·前端 | 从软件工程角度看大前端技术栈
- 人脸识别原理检测及实现
- minicap java_minicap_工具使用
- ES设置自定义分词器
- 在web页面预览PDF文件