基于PyQt5制作一個PDF文件合并器
操作說明:選擇多個PDF文件,執(zhí)行完合并后會生成一個新的PDF文件,這個新的PDF文件包含所有源PDF文件的頁面。

將相關(guān)的三方模塊導(dǎo)入到代碼塊中...
from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * import sys import os import PyPDF2 # PDF操作庫
QThread是PyQt5的子線程應(yīng)用,之前已經(jīng)使用過比較多的次數(shù)了。一般使用時通過創(chuàng)建一個類專門處理線程相關(guān)的邏輯。注意在這個類上面繼承 QThread,創(chuàng)建好之后里面的函數(shù)應(yīng)用范式基本都是不會改變的。一個__ init__ 函數(shù)用來初始化、另一個 del 函數(shù)控制線程的銷毀,還有一個run函數(shù)用來編寫線程里面的業(yè)務(wù)邏輯。
這里面定義了一個信號量finished
finished = pyqtSignal(bool)
這個變量主要是為了在子線程執(zhí)行完成時向主線程傳送變量值。這樣,主線程就知道子線程的執(zhí)行狀態(tài)。
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鍵就可以選擇多個文件)。目標路徑是為了選擇存儲生成的后的合并文件的路徑的。選擇好之后點擊開始按鈕就可以調(diào)用子線程去執(zhí)行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函數(shù)啟動應(yīng)用...
if __name__ == '__main__':
app = QApplication(sys.argv)
main = PDFMerge()
main.show()
sys.exit(app.exec_())
將上述所有代碼塊copy到一個.py的python文件中,直接啟動即可運行。
到此這篇關(guān)于基于PyQt5制作一個PDF文件合并器的文章就介紹到這了,更多相關(guān)PyQt5 PDF文件合并內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python創(chuàng)建一個功能齊全的隨機驗證碼生成器
驗證碼通過生成一張包含難以識別的文本、數(shù)字或圖像的圖像,要求用戶正確輸入其中的內(nèi)容,用于驗證用戶身份,本篇教程將帶領(lǐng)您一步步使用Python創(chuàng)建一個功能齊全的隨機驗證碼生成器,我們將通過導(dǎo)入必要的庫、定義輔助函數(shù)以及編寫主函數(shù)check_code()2024-04-04
Django多數(shù)據(jù)庫配置及逆向生成model教程
這篇文章主要介紹了Django多數(shù)據(jù)庫配置及逆向生成model教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Pandas對數(shù)值進行分箱操作的4種方法總結(jié)
分箱是一種常見的數(shù)據(jù)預(yù)處理技術(shù)有時也被稱為分桶或離散化,他可用于將連續(xù)數(shù)據(jù)的間隔分組到“箱”或“桶”中。本文將使用python?Pandas庫對數(shù)值進行分箱的4種方法,感興趣的可以了解一下2022-05-05
Python爬蟲模擬登陸嗶哩嗶哩(bilibili)并突破點選驗證碼功能
這篇文章主要介紹了Python爬蟲模擬登陸嗶哩嗶哩(bilibili)并突破點選驗證碼功能,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
Python中Jieba進行詞頻統(tǒng)計與關(guān)鍵詞提取
本文主要介紹了Python中Jieba進行詞頻統(tǒng)計與關(guān)鍵詞提取,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03

