相关文件

想学Python的小伙伴可以关注小编的公众号【Python日志】
有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!!
Python源码、问题解答学习交流群:773162165

操作说明

选择多个PDF文件,执行完合并后会生成一个新的PDF文件,这个新的PDF文件包含所有源PDF文件的页面。

效果页面展示

实现过程

将相关的三方模块导入到代码块中…

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
import os
import PyPDF2  # PDF操作库

QThread是PyQt5的子线程应用,之前已经使用过比较多的次数了。一般使用时通过创建一个类专门处理线程相关的逻辑。注意在这个类上面继承 QThread,创建好之后里面的函数应用范式基本都是不会改变的。一个__ init__ 函数用来初始化、另一个 del 函数控制线程的销毁,还有一个run函数用来编写线程里面的业务逻辑。

这里面定义了一个信号量finished

finished = pyqtSignal(bool)

这个变量主要是为了在子线程执行完成时向主线程传送变量值。这样,主线程就知道子线程的执行状态。

class WorkThread(QThread):finished = pyqtSignal(bool)def __init__(self, parent=None):super(WorkThread, self).__init__(parent)self.parent = parentself.working = Truedef __del__(self):self.working = Falseself.wait()def run(self):pdf_files_path = self.parent.pdf_files_path.text().strip()pdf_tar_dir = self.parent.pdf_tar_dir.text().strip()file_list = pdf_files_path.split(',')merge = PyPDF2.PdfFileMerger()for file in file_list:merge.append(PyPDF2.PdfFileReader(file))merge.write(pdf_tar_dir + '/汇总.pdf')self.finished.emit(True)

编写UI界面,界面上的UI组件比较少,源文件按钮是为了选择需要合并的PDF文件(支持多选,选择文件时按住Ctrl键就可以选择多个文件)。目标路径是为了选择存储生成的后的合并文件的路径的。选择好之后点击开始按钮就可以调用子线程去执行PDF文件合并操作了。

class PDFMerge(QWidget):def __init__(self):super(PDFMerge, self).__init__()self.init_ui()def init_ui(self):self.setWindowTitle('PDF文件合并器')self.setWindowIcon(QIcon('pdf.ico'))self.setFixedWidth(500)self.setFixedHeight(120)grid = QGridLayout()self.pdf_files_path = QLineEdit()self.pdf_files_path.setReadOnly(True)self.pdf_files_btn = QPushButton()self.pdf_files_btn.setText('源文件')self.pdf_files_btn.clicked.connect(self.pdf_files_btn_click)self.pdf_tar_dir = QLineEdit()self.pdf_tar_dir.setReadOnly(True)self.pdf_tar_btn = QPushButton()self.pdf_tar_btn.setText('目标路径')self.pdf_tar_btn.clicked.connect(self.pdf_tar_btn_click)self.start_btn = QPushButton()self.start_btn.setText('开始合并吧')self.start_btn.clicked.connect(self.start_btn_click)grid.addWidget(self.pdf_files_path, 0, 0, 1, 1)grid.addWidget(self.pdf_files_btn, 0, 1, 1, 1)grid.addWidget(self.pdf_tar_dir, 1, 0, 1, 1)grid.addWidget(self.pdf_tar_btn, 1, 1, 1, 1)grid.addWidget(self.start_btn, 2, 0, 1, 2)self.thread_ = WorkThread(self)self.thread_.finished.connect(self.finished)self.setLayout(grid)def pdf_files_btn_click(self):files = QFileDialog.getOpenFileNames(self, os.getcwd(), '打开文件', 'PDF Files(*.pdf)')file_list = files[0]self.pdf_files_path.setText(','.join(file_list))def pdf_tar_btn_click(self):dir = QFileDialog.getExistingDirectory(self, os.getcwd(), '打开文件夹')self.pdf_tar_dir.setText(dir)def start_btn_click(self):self.start_btn.setEnabled(False)self.thread_.start()def finished(self, finished):if finished is True:self.start_btn.setEnabled(True)
通过main函数启动应用...if __name__ == '__main__':app = QApplication(sys.argv)main = PDFMerge()main.show()sys.exit(app.exec_())

将上述所有代码块copy到一个.py的python文件中,直接启动即可运行。

好啦,今天的案例实现就到这里啦,非常简单的一个小案例,但是是非常实用的,大家要是有什么问题的话都可以直接找我的咨询的啦。

想学Python的小伙伴可以关注小编的公众号【Python日志】
有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!!
Python源码、问题解答学习交流群:773162165

办公自动化:PDF文件合并器,用Python将多个PDF文件进行合并相关推荐

  1. python中读取文件内容-深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

  2. python读取pdf文件_深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

  3. python解压到指定文件夹_在Python中压缩和解压文件

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 如果你已经使用计算机一段时间,你可能遇到了.zip扩展名的文件.它们是可以保存许多其他文件,文件夹和子文件 ...

  4. python win32转pdf 横版_用Python将PPT转换PDF

    # 1). 导入需要的模块(打开应用程序的模块) import win32com.client import os def ppt2pdf(filename, output_filename): &q ...

  5. python 文件上传下载,python实现上传下载文件功能

    最近刚学python,遇到上传下载文件功能需求,记录下! django web项目,前端上传控件用的是uploadify. 文件上传 - 后台view 的 Python代码如下: @csrf_exem ...

  6. python修改文件linux编码格式,使用python的chardet库获得文件编码并修改编码

    使用python的chardet库获得文件编码并修改编码 windows和linux采用了不同的编码,这让很多人伤透了脑经,这里我采用了Python的chardet库获得代码的编码,然后修改编码 首先 ...

  7. xml文件拆分 python_使用Python解析大型拆分XML文件

    我有一个非常大的XML日志文件,它以固定大小(约200MB)自动拆分.可能有很多部分(通常少于10个).当它拆分时,它不会在记录的末尾或者甚至在当前行的末尾进行拆分.它只要达到目标尺寸就会裂开.在 基 ...

  8. python怎么编辑文件_如何使用python中的方法对文件进行修改文件名

    在使用python语言中的方法操作文件时,打开方法可以直接使用open,但是对文件重命名需要调用os模块中的方法,删除文件也是 工具/原料 python 编辑器 截图工具 台式机 方法/步骤 1 进入 ...

  9. python下载文件暂停恢复_selenium+Python如何取消Chrome下载文件的‘保留’‘放弃’提示?...

    本人在做自动化测试的时候遇到问题,自动导出文件的步骤可以执行,但是文件并没有成功导出到目标目录,经debug发现,Chrome卡在了下载询问的窗口页面,就是底部弹出窗口询问是否'保留'或者'放弃'的那 ...

  10. python如何生成excel文件夹_用python脚本通过excel生成文件夹树结构

    大概这样写标题是对的吧... 目标: 通过excel目录结构文档生成文件夹树结构. 也就是: 通过下面的excel 生成下面的文档树结构: 方法: 1.分析:一般文档结构都是事先构思好.可以在txt文 ...

最新文章

  1. 特征工程之MinMaxScaler、StandardScaler、Normalizer、Binarizer
  2. 干货 | 斯坦福的人工智能4年路线!
  3. Android利用广播实现ViewPager中item之间的数据通信
  4. AV1为何有信心打败H.265?
  5. java游戏开发基础Swing之JRadioButton
  6. JavaMail发送和接收邮件
  7. Linux 命令之 type -- 显示指定命令的类型
  8. python3小游戏源代码_Python3制作仿“FlappyBird”小游戏|python3教程|python入门|python教程...
  9. Think in Java第四版 读书笔记10 第16章 数组
  10. JAVA的MySQL字符串拼接_MySQL字符串拼接、截取
  11. 教你怎么卸载Office最干净?
  12. js 打印去掉页眉页脚页码_javascript 打印时去掉页眉页脚
  13. 读书笔记:iPod 之父在《创造:在正确的方向上持续努力》中的思考
  14. 720度全景拍摄详细教程
  15. 【SONY PS2模拟器】[PCSX2 V0.93 R7完美教程]+最新版模拟器
  16. 小白学习MySQL - MySQL会不会受到“高水位”的影响?
  17. python爬取百度使用kw关键字爬取时出现,百度安全验证,解决方法
  18. Android框架之ButterKnife(黄油刀)
  19. 【git新建分支拉取分支】git submodule update --init --recursive
  20. RabbitMQ实战指南之RabbitMQ架构及运转流程

热门文章

  1. T440p重装64位windows系统
  2. 弘扬奥运精神,我们49行画个奥运五环
  3. 用html画布做扇形,jquery canvas 画扇形
  4. 小波分析——1. 初识小波分析
  5. vue中遍历呈现数据
  6. [企业权限管理项目](二)环境搭建
  7. cocos2dx的文章
  8. 解决CUDA out of memory. Tried to allocate 2.10 GiB (GPU 0; 14.76 GiB total capac
  9. LOJ P2448 :无尽的生命 树状数组 + 离散化
  10. 数据结构与算法之多路查找树(2-3树、2-3-4树、B树、B+树)