PDF文件合并器

该篇文章介绍了如何使用Python编写一个带有图形用户界面(GUI)的PDF文件合并器,使用了PyPDF2库处理PDF文件,并展示了如何在PyQt5环境中创建一个基本的窗口,包括文件选择、合并操作和取消功能。
摘要由CSDN通过智能技术生成

用python写了一个简单的pdf文件合并器,带GUI界面

exe文件下载地址:链接:https://pan.baidu.com/s/1MowKrrS_4mvdNiBUBe7Gwg 
提取码:1hul 
 

源码献上:

import os
import sys
from datetime import datetime

from PyPDF2 import PdfMerger
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QFileDialog, \
    QProgressBar, QLabel, QListWidget, QListWidgetItem, QLineEdit



class PDFMergerApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("PDF Merger")

        self.setGeometry(200, 100, 1500, 1200)

        self.file_paths = []
        self.file_save_path = ''
        self.merger = PdfMerger()
        self.progress = QProgressBar()
        self.progress.setRange(0, 100)
        self.progress.setValue(0)

        self.label_status = QLabel("Ready")

        self.button_select = QPushButton("选择文件")
        self.button_select.clicked.connect(self.select_files)

        self.button_merge = QPushButton("合并文件")
        self.button_merge.clicked.connect(self.merge_files)

        self.button_cancel = QPushButton("中止合并")
        self.button_cancel.setEnabled(False)
        self.button_cancel.clicked.connect(self.cancel_merge)

        self.file_list = QListWidget()

        layout = QVBoxLayout()
        layout.addWidget(self.button_select)
        layout.addWidget(self.file_list)

        progress_layout = QHBoxLayout()

        progress_layout.addWidget(self.progress)
        progress_layout.addWidget(self.label_status)

        layout.addLayout(progress_layout)
        layout.addWidget(self.button_merge)
        layout.addWidget(self.button_cancel)

        central_widget = QWidget()
        central_widget.setLayout(layout)
        self.setCentralWidget(central_widget)

        # 添加新的一行,包含一个标签,一个输入框,和一个按钮
        self.save_dir_label = QLabel('文件保存目录:')
        self.save_dir_input = QLineEdit(self)
        self.save_dir_input.setReadOnly(True)
        self.get_dir_button = QPushButton('选择目录', self)
        self.get_dir_button.clicked.connect(self.select_save_dir)

        input_layout = QHBoxLayout()
        input_layout.addWidget(self.save_dir_label)
        input_layout.addWidget(self.save_dir_input)
        input_layout.addWidget(self.get_dir_button)

        layout.addLayout(input_layout)

        layout.addWidget(self.button_merge)
        layout.addWidget(self.button_cancel)

        central_widget = QWidget()
        central_widget.setLayout(layout)
        self.setCentralWidget(central_widget)

    def select_files(self):
        options = QFileDialog.Options()
        options |= QFileDialog.ReadOnly
        file_dialog = QFileDialog()
        file_dialog.setFileMode(QFileDialog.ExistingFiles)
        files, _ = file_dialog.getOpenFileNames(self, "Select PDF Files", "", "PDF Files (*.pdf)", options=options)
        self.file_paths.extend(files)

        self.file_list.clear()
        for path in self.file_paths:
            item = QListWidgetItem()  # create the item without any text
            delete_button = QPushButton("删除")
            delete_button.clicked.connect(lambda _, item=item: self.delete_file(item))
            delete_button.setFixedWidth(100)
            widget = QWidget()
            widget_layout = QHBoxLayout()
            widget_layout.addWidget(QLabel(path))  # create the QLabel with the file path
            widget_layout.addWidget(delete_button)
            widget.setLayout(widget_layout)
            item.setSizeHint(widget.sizeHint())

            self.file_list.addItem(item)
            self.file_list.setItemWidget(item, widget)

    def delete_file(self, item):
        row = self.file_list.row(item)
        self.file_list.takeItem(row)
        del self.file_paths[row]

    def merge_files(self):
        if len(self.file_paths) < 2:
            self.label_status.setText("请先选择2个或2个以上pdf文件")
            return

        if self.file_save_path == '':
            self.label_status.setText("请指定文件保存目录")
            return

        self.button_select.setEnabled(False)
        self.button_merge.setEnabled(False)
        self.button_cancel.setEnabled(True)

        self.merger = PdfMerger()
        output_file_name = self.file_save_path + '/' + datetime.now().strftime("%Y%m%d%H%M%S") + ".pdf"

        for path in self.file_paths:
            self.merger.append(path)

        self.merger.write(output_file_name)
        self.merger.close()

        self.progress.setValue(100)
        self.label_status.setText("Merge completed: " + output_file_name)

        self.button_select.setEnabled(True)
        self.button_merge.setEnabled(True)
        self.button_cancel.setEnabled(False)

    def cancel_merge(self):
        self.merger.close()
        self.progress.setValue(0)
        self.label_status.setText("Merge canceled")

        self.button_select.setEnabled(True)
        self.button_merge.setEnabled(True)
        self.button_cancel.setEnabled(False)

    def on_click(self):
        content = self.input.text()
        print(f'输入的内容是: {content}')

    def select_save_dir(self):
        directory = QFileDialog.getExistingDirectory(self, "选择一个目录")
        if directory:
            self.save_dir_input.setText(directory)
            self.file_save_path = directory


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = PDFMergerApp()
    window.show()
    sys.exit(app.exec_())

界面截图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值