关于python:办公自动化PDF文件合并器将多个PDF文件进行合并

3次阅读

共计 2986 个字符,预计需要花费 8 分钟才能阅读完成。

操作阐明:抉择多个 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 = 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 文件中,间接启动即可运行。

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

【往期精彩】

GUI 猜数字游戏,间接开玩 …

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

动静指针时钟:利用 pyqt5 制作指针钟表显示实时工夫

hashlib.md5() 函数来筛选出零碎反复文件并移除 …

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

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

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

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

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

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

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

大年初二、做了一个 windows 告诉管理器!

正文完
 0