老婆给女儿整理打印学习资料,希望能从很多个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合并工具相关推荐

  1. 再见所有的翻译工具!我使用了有道云+Python开发一个批量文档翻译工具!

    一.需求分析 需求: 最近有个任务,需要对一批文件进行汉译英的翻译 刚开始想着挺简单的呀,那就直接复制到翻译软件中,在复制出来呗. 有很多办法可以实现翻译: 可以使用谷歌翻译,这个完全免费的.但是不好 ...

  2. 【办公自动化】基于Python开发的PDF批量转换-合并应用程序

    场景描述: 日常处理文件时,经常遇到将word批量转换成pdf文件,以及合并多个pdf文件的需求. 那么问题来了 1.市面上的office程序只能支持单个文件转换,批量与合并是收费的. 2.而网页上的 ...

  3. 用Python制作一个PDF转Word工具

    用Python制作一个PDF转Word工具 工具:Python3.9.13,VSCode1.73.1,pdf2docx0.5.6,tkinter,Win10Home PDF文件不易编辑,想要编辑需要转 ...

  4. 微软的python开发工具_面向 Python 开发人员的 Azure 工具

    面向 Python 开发人员的 Azure 工具Azure tools for Python developers 08/06/2020 本文内容 Visual Studio CodeVisual S ...

  5. Python开发一个股票类库

    前言 使用Python开发一个股票项目.  项目地址:  https://github.com/pythonstock/stock  相关资料:  http://blog.csdn.net/freew ...

  6. python开发的著名软件公司_软件开发公司_软件外包_项目外包平台基于Python开发一个全文检索系统...

    基于Python开发一个全文检索系统.功能要求为: 使用全文检索引擎对文本进行检索.文本的格式为Word.PDF.TXT. 同时按数据域进行复合条件检索.数据域指文本对应的信息,例如创建人.文件编号. ...

  7. 用Python写一个纪念日计算工具

    用python写一个纪念日计算工具 前言 主要内容 日期计算函数 GUI布局 用pyinstaller打包生成.exe文件 打包后的.exe文件预览 运行结果 最后提前祝马英俊生日快乐吧~ 前言 纪念 ...

  8. 【办公常用软件】万彩办公大师教程丨PDF合并工具帮助文档

    PDF合并工具是一款简单.快捷的桌面应用程序,可以合并两个或多个图像/PDF格式文件至一个PDF文档中.生成的文档能兼容 Adobe Acrobat Reader 5 或更高版本. 使用PDF合并工具 ...

  9. 云展网教程 | 云展网PDF合并工具使用说明

    云展网PDF合并工具是一款完全免费的多功能PDF处理工具,处理好输出的文件不带任何logo水印. 它的主要功能为: 1.将多个文件(仅支持图片以及PDF格式)合并成一个PDF: 2.添加页码: 3.设 ...

最新文章

  1. Tomcat - 源码构建Tomcat 8.5.55 启动
  2. 把之前写的几个项目放到了github上
  3. Python error: Unable to find vcvarsall.bat
  4. linux uname 命令 打印系统信息
  5. onhashchange
  6. Sql Server中查看/修改identity(自增列)的值
  7. arduino 休眠 节能_优化arduino程序存储空间
  8. Flash 与数学:圆的切线(2)
  9. javascript监听输入框_html通过JS/jQuery实现 实时监听输入框input的内容
  10. 如何从 Hibernate官网下载 hibernate原码 和hibernatetools
  11. simulink——产生阶梯波
  12. Windows右键菜单项管理讲解(RightMenuMgr)
  13. 网络协议:透彻解析HTTP协议
  14. JavaScript在表格中实现九九乘法表
  15. c++ cout 不能正常打印uint8_t
  16. 网络重置后WLAN网络找不到怎么办?
  17. 【数据库系统】第一部分 数据库基础(4) 数据库安全性
  18. Selenium工作原理_Sinno_Song_新浪博客
  19. 哈工大软件构造笔记1
  20. 计算机丢失quartz.dll什么意思,计算机中丢失quartz.dll解决方法

热门文章

  1. 2021-2027全球与中国户外建筑用大理石市场现状及未来发展趋势
  2. 通过第三方jar实现中文转换为拼音
  3. 【利用Nginx实现白名单功能】
  4. JEM software ticket45:Console output error of nQP when LCU level rate control is enabled
  5. Things_androidThings入门
  6. GitChat·前端 | 从软件工程角度看大前端技术栈
  7. 人脸识别原理检测及实现
  8. minicap java_minicap_工具使用
  9. ES设置自定义分词器
  10. 在web页面预览PDF文件