办公自动化:PDF文件合并器,将多个PDF文件进行合并...

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

【阅读全文】

file

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

 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 = parent
self.working = True

def __del__(self):
self.working = False
self.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文件合并器 公众号:[Python 集中营]')
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文件中,直接启动即可运行。

有任何问题,欢迎大家留言。博主必当知无不言、言无不尽!

file

【往期精彩】

GUI猜数字游戏,直接开玩...

手把手教你做一个数据图表生成器(附源码)...

动态指针时钟:利用pyqt5制作指针钟表显示实时时间

hashlib.md5()函数来筛选出系统重复文件并移除...

python 日志中最亮的仔,是喜欢的花里胡哨吖...

哈撒给,英雄联盟全皮肤下载器来了...

手绘图片生成器:以雪容融为例一键生成...

PyQt5的敏感词检测工具制作,运营者的福音...

刚刚出炉的冬奥会吉祥物:冰墩墩,附源码...

最优美的表格查看插件:tabulate

手绘图片生成器:以雪容融为例一键生成...

大年初二、做了一个windows通知管理器!

标签: python

添加新评论