操作說明:選擇多個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通知管理器!
歡迎關注作者公眾號【Python 集中營】,專注于后端編程,每天更新技術干貨,不定時分享各類資料!轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/436341.html
標籤:其他
