From 0323e92151549ed21bb1321a6d9e47dc47a1026a Mon Sep 17 00:00:00 2001 From: liqi Date: Sun, 8 Jun 2025 23:35:27 +0800 Subject: [PATCH] =?UTF-8?q?PDF=E6=8B=86=E5=88=86=E3=80=81=E5=90=88?= =?UTF-8?q?=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 + .idea/vcs.xml | 6 + v1/DocConverter.spec | 39 ++ v1/icon.ico | Bin 0 -> 254137 bytes v1/main.spec | 38 ++ v1/views/pdf_tools_page.py | 1188 ++++++++++++++++++++++++++++++++++++ v1/views/word_to_pdf-v2.py | 869 ++++++++++++++++++++++++++ v1/奶酪云工具箱.spec | 39 ++ 8 files changed, 2182 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/vcs.xml create mode 100644 v1/DocConverter.spec create mode 100644 v1/icon.ico create mode 100644 v1/main.spec create mode 100644 v1/views/pdf_tools_page.py create mode 100644 v1/views/word_to_pdf-v2.py create mode 100644 v1/奶酪云工具箱.spec diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9d03b6b --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/v1/build/ +/v1/dist/ +/v1/test/ diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/v1/DocConverter.spec b/v1/DocConverter.spec new file mode 100644 index 0000000..3208461 --- /dev/null +++ b/v1/DocConverter.spec @@ -0,0 +1,39 @@ +# -*- mode: python ; coding: utf-8 -*- + + +a = Analysis( + ['main.py'], + pathex=[], + binaries=[], + datas=[], + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, + optimize=0, +) +pyz = PYZ(a.pure) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.datas, + [], + name='DocConverter', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=False, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, + icon=['app.ico'], +) diff --git a/v1/icon.ico b/v1/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a6c0b58230d1a6254018087908f450d56af7606c GIT binary patch literal 254137 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�VLg;>e*Lw+a3Be8b3dJ#2Q8;r5flzaP!3Wuj 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
    ieYy_G0HG` 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 DZm_n2 literal 0 HcmV?d00001 diff --git a/v1/main.spec b/v1/main.spec new file mode 100644 index 0000000..2ba8dd9 --- /dev/null +++ b/v1/main.spec @@ -0,0 +1,38 @@ +# -*- mode: python ; coding: utf-8 -*- + + +a = Analysis( + ['main.py'], + pathex=[], + binaries=[], + datas=[], + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, + optimize=0, +) +pyz = PYZ(a.pure) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.datas, + [], + name='main', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) diff --git a/v1/views/pdf_tools_page.py b/v1/views/pdf_tools_page.py new file mode 100644 index 0000000..6e9ddf7 --- /dev/null +++ b/v1/views/pdf_tools_page.py @@ -0,0 +1,1188 @@ +import os +import re +import random +import datetime +import shutil +import fitz +from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QLabel, + QPushButton, QFrame, QListWidget, QListWidgetItem, + QFileDialog, QProgressBar, QTabWidget, QLineEdit, + QGroupBox, QRadioButton, QAbstractItemView) +from PyQt5.QtCore import Qt, QThread, pyqtSignal +from PyQt5.QtGui import QPixmap, QIcon, QDragEnterEvent, QDropEvent, QDragLeaveEvent + +# 常量定义 - 默认保存位置 +DEFAULT_SAVE_PATH = os.path.join(os.path.expanduser("~"), "Documents", "PDFTools") +if not os.path.exists(DEFAULT_SAVE_PATH): + os.makedirs(DEFAULT_SAVE_PATH) + + +def generate_unique_filename(original_path, prefix="", suffix="", ext="pdf", save_dir=DEFAULT_SAVE_PATH): + """生成唯一的文件名并保存到指定目录""" + base_name = os.path.basename(original_path) + name_without_ext = os.path.splitext(base_name)[0] + + if prefix: + name_without_ext = f"{prefix}_{name_without_ext}" + if suffix: + name_without_ext = f"{name_without_ext}_{suffix}" + + # 获取当前日期 + current_date = datetime.datetime.now().strftime("%Y%m%d") + + # 生成4位随机数 + random_num = random.randint(1000, 9999) + + # 组合成新文件名 + new_filename = f"{name_without_ext}_{current_date}_{random_num}.{ext}" + return os.path.join(save_dir, new_filename) + + +class PDFSplitterThread(QThread): + progress_updated = pyqtSignal(int, int, str) # current, total, filename + conversion_done = pyqtSignal(str, bool, str) # filename, success, message + finished_all = pyqtSignal() + + def __init__(self, pdf_path, split_mode, pages_range="", save_dir=DEFAULT_SAVE_PATH): + super().__init__() + self.pdf_path = pdf_path + self.split_mode = split_mode # "single", "range", "bookmarks" + self.pages_range = pages_range + self.save_dir = save_dir + self.output_files = [] + + def run(self): + try: + doc = fitz.open(self.pdf_path) + total_pages = len(doc) + + if self.split_mode == "single": + self.progress_updated.emit(0, total_pages, os.path.basename(self.pdf_path)) + + for i in range(total_pages): + new_doc = fitz.open() + new_doc.insert_pdf(doc, from_page=i, to_page=i) + + output_path = generate_unique_filename( + self.pdf_path, + suffix=f"page_{i + 1}", + save_dir=self.save_dir + ) + new_doc.save(output_path) + new_doc.close() + + self.output_files.append(output_path) + self.conversion_done.emit(self.pdf_path, True, output_path) + self.progress_updated.emit(i + 1, total_pages, os.path.basename(output_path)) + + self.finished_all.emit() + + elif self.split_mode == "range": + if not self.pages_range: + self.conversion_done.emit(self.pdf_path, False, "请提供有效的页码范围") + return + + ranges = self.parse_range(self.pages_range, total_pages) + if not ranges: + self.conversion_done.emit(self.pdf_path, False, "无效的页码范围") + return + + self.progress_updated.emit(0, len(ranges), os.path.basename(self.pdf_path)) + + for idx, (start, end) in enumerate(ranges): + new_doc = fitz.open() + new_doc.insert_pdf(doc, from_page=start - 1, to_page=end - 1) + + output_path = generate_unique_filename( + self.pdf_path, + suffix=f"pages_{start}-{end}", + save_dir=self.save_dir + ) + new_doc.save(output_path) + new_doc.close() + + self.output_files.append(output_path) + self.conversion_done.emit(self.pdf_path, True, output_path) + self.progress_updated.emit(idx + 1, len(ranges), os.path.basename(output_path)) + + self.finished_all.emit() + + elif self.split_mode == "bookmarks": + toc = doc.get_toc() + if not toc: + self.conversion_done.emit(self.pdf_path, False, "该PDF文件没有书签") + return + + bookmarks = {} + for item in toc: + if item[0] == 1: + bookmarks[item[1]] = item[2] + + self.progress_updated.emit(0, len(bookmarks), os.path.basename(self.pdf_path)) + + bookmark_names = list(bookmarks.keys()) + for idx, (name, page) in enumerate(bookmarks.items()): + end_page = bookmarks[bookmark_names[idx + 1]] - 1 if idx < len(bookmarks) - 1 else total_pages + + new_doc = fitz.open() + new_doc.insert_pdf(doc, from_page=page - 1, to_page=end_page - 1) + + clean_name = re.sub(r'[\\/*?:"<>|]', "", name) + output_path = generate_unique_filename( + self.pdf_path, + prefix=clean_name, + save_dir=self.save_dir + ) + new_doc.save(output_path) + new_doc.close() + + self.output_files.append(output_path) + self.conversion_done.emit(self.pdf_path, True, output_path) + self.progress_updated.emit(idx + 1, len(bookmarks), os.path.basename(output_path)) + + self.finished_all.emit() + + doc.close() + + except Exception as e: + self.conversion_done.emit(self.pdf_path, False, str(e)) + + def parse_range(self, range_str, total_pages): + ranges = [] + parts = range_str.split(',') + + for part in parts: + if '-' in part: + start_end = part.split('-') + if len(start_end) != 2: + return [] + try: + start = int(start_end[0]) + end = int(start_end[1]) + if 1 <= start <= end <= total_pages: + ranges.append((start, end)) + except ValueError: + return [] + else: + try: + page = int(part) + if 1 <= page <= total_pages: + ranges.append((page, page)) + except ValueError: + return [] + + return ranges + + +class PDFMergerThread(QThread): + progress_updated = pyqtSignal(int, int, str) # current, total, filename + conversion_done = pyqtSignal(bool, str) # success, message + finished_all = pyqtSignal() + + def __init__(self, pdf_files, save_dir=DEFAULT_SAVE_PATH): + super().__init__() + self.pdf_files = pdf_files + self.save_dir = save_dir + self.output_file = "" + + def run(self): + try: + if not self.pdf_files: + self.conversion_done.emit(False, "没有要合并的文件") + return + + output = fitz.open() + self.progress_updated.emit(0, len(self.pdf_files), "") + + for i, file_path in enumerate(self.pdf_files): + doc = fitz.open(file_path) + output.insert_pdf(doc) + doc.close() + self.progress_updated.emit(i + 1, len(self.pdf_files), os.path.basename(file_path)) + + base_file = os.path.basename(self.pdf_files[0]) + self.output_file = generate_unique_filename( + base_file, + prefix="merged", + save_dir=self.save_dir + ) + output.save(self.output_file) + output.close() + + self.conversion_done.emit(True, self.output_file) + self.finished_all.emit() + + except Exception as e: + self.conversion_done.emit(False, str(e)) + + +class PDFToolsPage(QWidget): + def __init__(self): + super().__init__() + self.split_save_dir = DEFAULT_SAVE_PATH + self.merge_save_dir = DEFAULT_SAVE_PATH + self.init_ui() + self.setStyleSheet(self.get_page_style()) + + def init_ui(self): + self.setObjectName("pdfToolsPage") + self.setAcceptDrops(True) + + # 创建选项卡 + self.tab_widget = QTabWidget() + self.tab_widget.setObjectName("toolTabs") + self.tab_widget.setTabPosition(QTabWidget.North) + + # 创建拆分工具页 + self.splitter_page = QWidget() + self.setup_splitter_page() + + # 创建合并工具页 + self.merger_page = QWidget() + self.setup_merger_page() + + # 添加选项卡 + self.tab_widget.addTab(self.splitter_page, "PDF拆分") + self.tab_widget.addTab(self.merger_page, "PDF合并") + + # 主布局 + layout = QVBoxLayout() + layout.addWidget(self.tab_widget) + self.setLayout(layout) + + # 当前线程 + self.current_thread = None + self.merger_files = [] + self.split_output_files = [] + self.merger_output_file = "" + self.current_pdf = "" + + def setup_splitter_page(self): + layout = QVBoxLayout() + layout.setContentsMargins(20, 20, 20, 20) + layout.setSpacing(15) # 减少间距使布局更紧凑 + + # 文件选择区域 + file_group = QGroupBox("选择PDF文件") + file_group.setObjectName("fileGroup") + file_layout = QVBoxLayout(file_group) + + # 上传区域 + self.upload_area = QFrame() + self.upload_area.setObjectName("uploadArea") + self.upload_area.setFixedHeight(120) + self.upload_area.setAcceptDrops(True) + + upload_layout = QVBoxLayout(self.upload_area) + upload_layout.setAlignment(Qt.AlignCenter) + + self.upload_icon = QLabel() + self.upload_icon.setPixmap( + QPixmap(":/icons/pdf.png").scaled(48, 48, Qt.KeepAspectRatio, Qt.SmoothTransformation)) + self.upload_icon.setAlignment(Qt.AlignCenter) + + self.upload_text = QLabel("拖拽PDF文件到此处\n或点击上传") + self.upload_text.setAlignment(Qt.AlignCenter) + self.upload_text.setWordWrap(True) + + upload_btn = QPushButton("选择PDF文件") + upload_btn.setObjectName("uploadBtn") + upload_btn.clicked.connect(self.handle_split_upload) + + upload_layout.addWidget(self.upload_icon) + upload_layout.addWidget(self.upload_text) + upload_layout.addWidget(upload_btn) + + file_layout.addWidget(self.upload_area) + + # 文件信息 + file_info_layout = QHBoxLayout() + file_info_layout.setSpacing(10) + + self.file_name_label = QLabel("未选择文件") + self.file_name_label.setObjectName("fileInfo") + + self.page_count_label = QLabel("") + self.page_count_label.setObjectName("fileInfo") + + file_info_layout.addWidget(QLabel("文件:")) + file_info_layout.addWidget(self.file_name_label, 1) + file_info_layout.addSpacing(20) + file_info_layout.addWidget(QLabel("页数:")) + file_info_layout.addWidget(self.page_count_label) + file_info_layout.addStretch() + + file_layout.addLayout(file_info_layout) + + # 保存位置设置 + save_layout = QHBoxLayout() + save_layout.setSpacing(10) + + save_layout.addWidget(QLabel("保存位置:")) + + self.save_path_label = QLabel(self.split_save_dir) + self.save_path_label.setObjectName("savePathLabel") + self.save_path_label.setMinimumWidth(200) + + browse_btn = QPushButton("浏览") + browse_btn.setObjectName("browseBtn") + browse_btn.setFixedWidth(80) + browse_btn.clicked.connect(self.browse_split_save_dir) + + save_layout.addWidget(self.save_path_label, 1) + save_layout.addWidget(browse_btn) + file_layout.addLayout(save_layout) + + # 拆分选项 + options_group = QGroupBox("拆分选项") + options_group.setObjectName("optionsGroup") + options_layout = QVBoxLayout(options_group) + + # 拆分模式选择 + mode_group = QGroupBox("拆分模式") + mode_layout = QVBoxLayout(mode_group) + + self.mode_single = QRadioButton("每页拆分为单独文件") + self.mode_single.setChecked(True) + self.mode_range = QRadioButton("按页码范围拆分") + self.mode_bookmarks = QRadioButton("按书签/章节拆分") + + mode_layout.addWidget(self.mode_single) + mode_layout.addWidget(self.mode_range) + mode_layout.addWidget(self.mode_bookmarks) + + # 页码范围输入 + range_layout = QHBoxLayout() + range_layout.addWidget(QLabel("页码范围 (如 1-3,5,7-9):")) + self.range_input = QLineEdit() + self.range_input.setPlaceholderText("1-3,5,7-9") + self.range_input.setEnabled(False) + range_layout.addWidget(self.range_input, 1) + + self.mode_single.toggled.connect(lambda: self.range_input.setEnabled(False)) + self.mode_range.toggled.connect(lambda: self.range_input.setEnabled(True)) + self.mode_bookmarks.toggled.connect(lambda: self.range_input.setEnabled(False)) + + options_layout.addWidget(mode_group) + options_layout.addLayout(range_layout) + + # 操作按钮 + btn_layout = QHBoxLayout() + self.split_btn = QPushButton("开始拆分") + self.split_btn.setObjectName("actionBtn") + self.split_btn.clicked.connect(self.start_split) + self.split_btn.setEnabled(False) + + self.download_split_btn = QPushButton("下载所有拆分文件") + self.download_split_btn.setObjectName("downloadBtn") + self.download_split_btn.clicked.connect(self.download_split_files) + self.download_split_btn.setEnabled(False) + + btn_layout.addWidget(self.split_btn) + btn_layout.addWidget(self.download_split_btn) + + # 进度区域 + progress_group = QGroupBox("进度") + progress_group.setObjectName("progressGroup") + progress_layout = QVBoxLayout(progress_group) + + # 总体进度 + total_layout = QHBoxLayout() + total_label = QLabel("总体进度:") + total_label.setObjectName("progressLabel") + self.total_progress_split = QProgressBar() + self.total_progress_split.setObjectName("totalProgress") + self.total_progress_split.setTextVisible(False) + self.total_progress_split.setMaximum(100) + + total_layout.addWidget(total_label) + total_layout.addWidget(self.total_progress_split, 1) + + # 状态标签 + self.status_label_split = QLabel("就绪") + self.status_label_split.setObjectName("statusLabel") + self.status_label_split.setAlignment(Qt.AlignCenter) + + progress_layout.addLayout(total_layout) + progress_layout.addWidget(self.status_label_split) + + # 结果列表 + result_group = QGroupBox("拆分结果") + result_group.setObjectName("resultGroup") + result_layout = QVBoxLayout(result_group) + + self.result_list_split = QListWidget() + self.result_list_split.setObjectName("resultList") + self.result_list_split.setSelectionMode(QListWidget.ExtendedSelection) + + result_layout.addWidget(self.result_list_split) + + # 组装布局 + layout.addWidget(file_group) + layout.addWidget(options_group) + layout.addLayout(btn_layout) + layout.addWidget(progress_group) + layout.addWidget(result_group) + + self.splitter_page.setLayout(layout) + + def setup_merger_page(self): + layout = QVBoxLayout() + layout.setContentsMargins(20, 20, 20, 20) + layout.setSpacing(15) # 减少间距使布局更紧凑 + + # 文件选择区域 + file_group = QGroupBox("选择要合并的PDF文件") + file_group.setObjectName("fileGroup") + file_layout = QVBoxLayout(file_group) + + # 上传区域 + self.merger_upload_area = QFrame() + self.merger_upload_area.setObjectName("uploadArea") + self.merger_upload_area.setFixedHeight(120) + self.merger_upload_area.setAcceptDrops(True) + + upload_layout = QVBoxLayout(self.merger_upload_area) + upload_layout.setAlignment(Qt.AlignCenter) + + self.merger_upload_icon = QLabel() + self.merger_upload_icon.setPixmap( + QPixmap(":/icons/merge.png").scaled(48, 48, Qt.KeepAspectRatio, Qt.SmoothTransformation)) + self.merger_upload_icon.setAlignment(Qt.AlignCenter) + + self.merger_upload_text = QLabel("拖拽PDF文件到此处\n或点击上传") + self.merger_upload_text.setAlignment(Qt.AlignCenter) + self.merger_upload_text.setWordWrap(True) + + upload_btn = QPushButton("选择PDF文件") + upload_btn.setObjectName("uploadBtn") + upload_btn.clicked.connect(self.handle_merger_upload) + + upload_layout.addWidget(self.merger_upload_icon) + upload_layout.addWidget(self.merger_upload_text) + upload_layout.addWidget(upload_btn) + + file_layout.addWidget(self.merger_upload_area) + + # 保存位置设置 + save_layout = QHBoxLayout() + save_layout.setSpacing(10) + + save_layout.addWidget(QLabel("保存位置:")) + + self.merger_save_path_label = QLabel(self.merge_save_dir) + self.merger_save_path_label.setObjectName("savePathLabel") + self.merger_save_path_label.setMinimumWidth(200) + + browse_btn = QPushButton("浏览") + browse_btn.setObjectName("browseBtn") + browse_btn.setFixedWidth(80) + browse_btn.clicked.connect(self.browse_merge_save_dir) + + save_layout.addWidget(self.merger_save_path_label, 1) + save_layout.addWidget(browse_btn) + file_layout.addLayout(save_layout) + + # 文件列表 + file_list_layout = QHBoxLayout() + + self.merger_file_list = QListWidget() + self.merger_file_list.setObjectName("fileList") + self.merger_file_list.setSelectionMode(QListWidget.ExtendedSelection) + self.merger_file_list.setDragDropMode(QAbstractItemView.InternalMove) + + # 操作按钮 + btn_layout = QVBoxLayout() + btn_layout.setSpacing(10) + + self.up_btn = QPushButton("上移") + self.up_btn.setObjectName("smallBtn") + self.up_btn.clicked.connect(self.move_file_up) + + self.down_btn = QPushButton("下移") + self.down_btn.setObjectName("smallBtn") + self.down_btn.clicked.connect(self.move_file_down) + + self.delete_btn = QPushButton("删除选中") + self.delete_btn.setObjectName("smallBtn") + self.delete_btn.clicked.connect(self.delete_selected_merger_files) + + self.clear_btn = QPushButton("清空列表") + self.clear_btn.setObjectName("smallBtn") + self.clear_btn.clicked.connect(self.clear_merger_files) + + btn_layout.addWidget(self.up_btn) + btn_layout.addWidget(self.down_btn) + btn_layout.addWidget(self.delete_btn) + btn_layout.addWidget(self.clear_btn) + btn_layout.addStretch() + + file_list_layout.addWidget(self.merger_file_list, 1) + file_list_layout.addLayout(btn_layout) + + file_layout.addLayout(file_list_layout) + + # 操作按钮 + action_layout = QHBoxLayout() + self.merge_btn = QPushButton("开始合并") + self.merge_btn.setObjectName("actionBtn") + self.merge_btn.clicked.connect(self.start_merge) + self.merge_btn.setEnabled(False) + + self.download_merge_btn = QPushButton("下载合并文件") + self.download_merge_btn.setObjectName("downloadBtn") + self.download_merge_btn.clicked.connect(self.download_merge_file) + self.download_merge_btn.setEnabled(False) + + action_layout.addWidget(self.merge_btn) + action_layout.addWidget(self.download_merge_btn) + + # 进度区域 + progress_group = QGroupBox("进度") + progress_group.setObjectName("progressGroup") + progress_layout = QVBoxLayout(progress_group) + + # 总体进度 + total_layout = QHBoxLayout() + total_label = QLabel("总体进度:") + total_label.setObjectName("progressLabel") + self.total_progress_merge = QProgressBar() + self.total_progress_merge.setObjectName("totalProgress") + self.total_progress_merge.setTextVisible(False) + self.total_progress_merge.setMaximum(100) + + total_layout.addWidget(total_label) + total_layout.addWidget(self.total_progress_merge, 1) + + # 状态标签 + self.status_label_merge = QLabel("就绪") + self.status_label_merge.setObjectName("statusLabel") + self.status_label_merge.setAlignment(Qt.AlignCenter) + + progress_layout.addLayout(total_layout) + progress_layout.addWidget(self.status_label_merge) + + # 结果区域 + result_group = QGroupBox("合并结果") + result_group.setObjectName("resultGroup") + result_layout = QVBoxLayout(result_group) + + self.result_label_merge = QLabel("尚未合并任何文件") + self.result_label_merge.setObjectName("resultLabel") + self.result_label_merge.setWordWrap(True) + self.result_label_merge.setAlignment(Qt.AlignCenter) + + result_layout.addWidget(self.result_label_merge) + + # 组装布局 + layout.addWidget(file_group) + layout.addLayout(action_layout) + layout.addWidget(progress_group) + layout.addWidget(result_group) + + self.merger_page.setLayout(layout) + + # 拖拽事件处理 - 拆分页面 + def dragEnterEvent(self, event: QDragEnterEvent): + if event.mimeData().hasUrls(): + # 根据当前标签页决定使用哪个上传区域 + if self.tab_widget.currentIndex() == 0: # 拆分页面 + target_area = self.upload_area + else: # 合并页面 + target_area = self.merger_upload_area + + target_area.setProperty("dragActive", True) + target_area.style().polish(target_area) + event.acceptProposedAction() + + def dragLeaveEvent(self, event: QDragLeaveEvent): + if self.tab_widget.currentIndex() == 0: # 拆分页面 + self.upload_area.setProperty("dragActive", False) + self.upload_area.style().polish(self.upload_area) + else: # 合并页面 + self.merger_upload_area.setProperty("dragActive", False) + self.merger_upload_area.style().polish(self.merger_upload_area) + + def dropEvent(self, event: QDropEvent): + if self.tab_widget.currentIndex() == 0: # 拆分页面 + self.upload_area.setProperty("dragActive", False) + self.upload_area.style().polish(self.upload_area) + self.handle_split_drop(event) + else: # 合并页面 + self.merger_upload_area.setProperty("dragActive", False) + self.merger_upload_area.style().polish(self.merger_upload_area) + self.handle_merge_drop(event) + + def handle_split_drop(self, event): + """处理拆分页面的文件拖放""" + urls = event.mimeData().urls() + if not urls: + return + + # 只取第一个有效的PDF文件 + for url in urls: + file_path = url.toLocalFile() + if os.path.isfile(file_path) and file_path.lower().endswith('.pdf'): + self.load_pdf_file(file_path) + return # 只处理一个文件 + + self.status_label_split.setText("请拖放有效的PDF文件") + + def handle_merge_drop(self, event): + """处理合并页面的文件拖放""" + urls = event.mimeData().urls() + files = [] + + for url in urls: + path = url.toLocalFile() + if os.path.isdir(path): + # 扫描文件夹中的PDF文件 + for root, _, filenames in os.walk(path): + for f in filenames: + if f.lower().endswith('.pdf'): + files.append(os.path.join(root, f)) + elif os.path.isfile(path) and path.lower().endswith('.pdf'): + files.append(path) + + if files: + self.add_merger_files(files) + self.status_label_merge.setText(f"添加了 {len(files)} 个文件") + else: + self.status_label_merge.setText("未找到有效的PDF文件") + + def browse_split_save_dir(self): + """选择拆分文件的保存位置""" + directory = QFileDialog.getExistingDirectory( + self, + "选择保存位置", + self.split_save_dir + ) + if directory: + self.split_save_dir = directory + self.save_path_label.setText(directory) + self.status_label_split.setText(f"保存位置已更新: {directory}") + + def browse_merge_save_dir(self): + """选择合并文件的保存位置""" + directory = QFileDialog.getExistingDirectory( + self, + "选择保存位置", + self.merge_save_dir + ) + if directory: + self.merge_save_dir = directory + self.merger_save_path_label.setText(directory) + self.status_label_merge.setText(f"保存位置已更新: {directory}") + + def handle_split_upload(self): + options = QFileDialog.Options() + file, _ = QFileDialog.getOpenFileName( + self, "选择PDF文件", "", "PDF Files (*.pdf);;All Files (*)", options=options + ) + if file and file.lower().endswith('.pdf'): + self.load_pdf_file(file) + + def load_pdf_file(self, file_path): + """加载PDF文件并显示信息""" + self.current_pdf = file_path + self.file_name_label.setText(os.path.basename(file_path)) + + try: + # 获取PDF页数 + doc = fitz.open(file_path) + page_count = len(doc) + doc.close() + + self.page_count_label.setText(str(page_count)) + self.split_btn.setEnabled(True) + self.status_label_split.setText("文件已加载,请选择拆分方式") + self.upload_icon.setPixmap( + QPixmap(":/icons/pdf_ready.png").scaled(48, 48, Qt.KeepAspectRatio, Qt.SmoothTransformation)) + self.upload_text.setText(f"已选择: {os.path.basename(file_path)}") + except Exception as e: + self.status_label_split.setText(f"文件加载失败: {str(e)}") + self.page_count_label.setText("0") + self.split_btn.setEnabled(False) + + def start_split(self): + """开始拆分PDF""" + if not self.current_pdf: + self.status_label_split.setText("请先选择PDF文件") + return + + # 确定拆分模式 + if self.mode_single.isChecked(): + split_mode = "single" + elif self.mode_range.isChecked(): + split_mode = "range" + if not self.range_input.text().strip(): + self.status_label_split.setText("请输入有效的页码范围") + return + else: # bookmarks + split_mode = "bookmarks" + + # 重置状态 + self.result_list_split.clear() + self.split_output_files = [] + self.download_split_btn.setEnabled(False) + self.split_btn.setEnabled(False) + self.status_label_split.setText("正在拆分文件...") + self.total_progress_split.setValue(0) + + # 创建并启动拆分线程 + self.current_thread = PDFSplitterThread( + self.current_pdf, + split_mode, + self.range_input.text() if split_mode == "range" else "", + self.split_save_dir # 传递保存位置 + ) + self.current_thread.progress_updated.connect(self.update_split_progress) + self.current_thread.conversion_done.connect(self.handle_split_done) + self.current_thread.finished_all.connect(self.handle_split_finished) + self.current_thread.start() + + def update_split_progress(self, current, total, filename): + """更新拆分进度""" + self.total_progress_split.setMaximum(total) + self.total_progress_split.setValue(current) + self.status_label_split.setText(f"正在拆分: {filename} ({current}/{total})") + + def handle_split_done(self, file_path, success, output_path): + """处理单个拆分完成""" + if success: + self.split_output_files.append(output_path) + item = QListWidgetItem(os.path.basename(output_path)) + item.setData(Qt.UserRole, output_path) + self.result_list_split.addItem(item) + self.status_label_split.setText(f"已拆分: {os.path.basename(output_path)}") + + def handle_split_finished(self): + """所有拆分完成""" + self.split_btn.setEnabled(True) + self.download_split_btn.setEnabled(bool(self.split_output_files)) + self.status_label_split.setText(f"拆分完成! 共生成 {len(self.split_output_files)} 个文件") + self.total_progress_split.setValue(self.total_progress_split.maximum()) + + # 添加提示 + self.status_label_split.setText( + f"拆分完成! 共生成 {len(self.split_output_files)} 个文件\n" + f"文件保存在: {self.split_save_dir}" + ) + + def download_split_files(self): + """下载所有拆分文件""" + if not self.split_output_files: + self.status_label_split.setText("没有可下载的文件") + return + + folder = QFileDialog.getExistingDirectory(self, "选择保存位置") + if not folder: + self.status_label_split.setText("下载已取消") + return + + success = 0 + for file_path in self.split_output_files: + try: + file_name = os.path.basename(file_path) + destination = os.path.join(folder, file_name) + shutil.copy2(file_path, destination) + success += 1 + except Exception as e: + self.status_label_split.setText(f"下载失败: {file_name} - {str(e)}") + + self.status_label_split.setText(f"下载完成! 成功: {success}/{len(self.split_output_files)}") + + def handle_merger_upload(self): + """处理合并页面的文件上传""" + options = QFileDialog.Options() + files, _ = QFileDialog.getOpenFileNames( + self, "选择PDF文件", "", "PDF Files (*.pdf);;All Files (*)", options=options + ) + + if files: + self.add_merger_files(files) + + def add_merger_files(self, files): + """添加合并文件""" + added = 0 + for file in files: + if os.path.isfile(file) and file.lower().endswith('.pdf') and file not in self.merger_files: + self.merger_files.append(file) + item = QListWidgetItem(os.path.basename(file)) + item.setData(Qt.UserRole, file) + self.merger_file_list.addItem(item) + added += 1 + + if added: + self.merge_btn.setEnabled(True) + self.status_label_merge.setText(f"添加了 {added} 个文件") + else: + self.status_label_merge.setText("未添加新文件") + + def delete_selected_merger_files(self): + """删除选中的合并文件""" + selected_items = self.merger_file_list.selectedItems() + if not selected_items: + self.status_label_merge.setText("请选择要删除的文件") + return + + for item in selected_items: + row = self.merger_file_list.row(item) + self.merger_files.pop(row) + self.merger_file_list.takeItem(row) + + self.status_label_merge.setText(f"删除了 {len(selected_items)} 个文件") + if not self.merger_files: + self.merge_btn.setEnabled(False) + + def clear_merger_files(self): + """清空合并文件列表""" + self.merger_files = [] + self.merger_file_list.clear() + self.merge_btn.setEnabled(False) + self.status_label_merge.setText("文件列表已清空") + + def move_file_up(self): + """上移选中的文件""" + selected_items = self.merger_file_list.selectedItems() + if not selected_items: + return + + for item in selected_items: + row = self.merger_file_list.row(item) + if row > 0: + # 交换文件顺序 + self.merger_files[row], self.merger_files[row - 1] = self.merger_files[row - 1], self.merger_files[row] + + # 交换列表项 + current_item = self.merger_file_list.takeItem(row) + self.merger_file_list.insertItem(row - 1, current_item) + current_item.setSelected(True) + + # 更新显示 + self.merger_file_list.setCurrentRow(row - 1) + + def move_file_down(self): + """下移选中的文件""" + selected_items = self.merger_file_list.selectedItems() + if not selected_items: + return + + # 从下往上处理,避免索引变化 + for item in reversed(selected_items): + row = self.merger_file_list.row(item) + if row < self.merger_file_list.count() - 1: + # 交换文件顺序 + self.merger_files[row], self.merger_files[row + 1] = self.merger_files[row + 1], self.merger_files[row] + + # 交换列表项 + current_item = self.merger_file_list.takeItem(row) + self.merger_file_list.insertItem(row + 1, current_item) + current_item.setSelected(True) + + # 更新显示 + self.merger_file_list.setCurrentRow(row + 1) + + def start_merge(self): + """开始合并PDF""" + if not self.merger_files: + self.status_label_merge.setText("请添加要合并的文件") + return + + if len(self.merger_files) < 2: + self.status_label_merge.setText("至少需要2个文件才能合并") + return + + # 重置状态 + self.merger_output_file = "" + self.download_merge_btn.setEnabled(False) + self.merge_btn.setEnabled(False) + self.status_label_merge.setText("正在合并文件...") + self.total_progress_merge.setValue(0) + self.result_label_merge.setText("处理中...") + + # 创建并启动合并线程 + self.current_thread = PDFMergerThread( + self.merger_files.copy(), + self.merge_save_dir # 传递保存位置 + ) + self.current_thread.progress_updated.connect(self.update_merge_progress) + self.current_thread.conversion_done.connect(self.handle_merge_done) + self.current_thread.finished_all.connect(self.handle_merge_finished) + self.current_thread.start() + + def update_merge_progress(self, current, total, filename): + """更新合并进度""" + self.total_progress_merge.setMaximum(total) + self.total_progress_merge.setValue(current) + self.status_label_merge.setText(f"正在处理: {filename} ({current}/{total})") + + def handle_merge_done(self, success, output_path): + """处理合并完成""" + if success: + self.merger_output_file = output_path + self.result_label_merge.setText( + f"合并成功!\n输出文件: {os.path.basename(output_path)}\n" + f"保存位置: {self.merge_save_dir}" + ) + else: + self.result_label_merge.setText(f"合并失败: {output_path}") + + def handle_merge_finished(self): + """合并线程完成""" + self.merge_btn.setEnabled(True) + self.download_merge_btn.setEnabled(bool(self.merger_output_file)) + self.status_label_merge.setText("合并完成!") + self.total_progress_merge.setValue(self.total_progress_merge.maximum()) + + def download_merge_file(self): + """下载合并后的PDF文件""" + if not self.merger_output_file or not os.path.exists(self.merger_output_file): + self.status_label_merge.setText("没有可下载的文件") + return + + options = QFileDialog.Options() + file_name, _ = QFileDialog.getSaveFileName( + self, "保存合并的PDF文件", + os.path.basename(self.merger_output_file), + "PDF Files (*.pdf)", + options=options + ) + + if file_name: + try: + shutil.copy2(self.merger_output_file, file_name) + self.status_label_merge.setText(f"文件已保存到: {os.path.basename(file_name)}") + except Exception as e: + self.status_label_merge.setText(f"保存失败: {str(e)}") + + def get_page_style(self): + return """ + /* ===== PDF工具页面样式 ===== */ + #pdfToolsPage { + background-color: #1a202c; + font-family: 'Microsoft YaHei', Arial, sans-serif; + } + + /* 选项卡样式 */ + #toolTabs::pane { + border: none; + background: transparent; + } + + #toolTabs > QTabBar::tab { + background-color: #2d3748; + color: #cbd5e0; + border: 1px solid #4a5568; + border-bottom: none; + border-top-left-radius: 8px; + border-top-right-radius: 8px; + padding: 8px 16px; + margin-right: 4px; + font-size: 14px; + } + + #toolTabs > QTabBar::tab:selected { + background-color: #4f46e5; + color: #ffffff; + font-weight: bold; + } + + #toolTabs > QTabBar::tab:hover { + background-color: #4a5568; + } + + /* 分组框样式 */ + #fileGroup, #optionsGroup, #progressGroup, #resultGroup { + background-color: #2d3748; + border: 1px solid #4a5568; + border-radius: 8px; + padding: 15px; + margin-bottom: 15px; + } + + QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top center; + padding: 0 5px; + background-color: #4f46e5; + color: white; + border-radius: 4px; + margin-top: -10px; + } + + /* 上传区域 */ + #uploadArea { + border: 2px dashed #4a5568; + background-color: rgba(45, 55, 72, 0.5); + border-radius: 8px; + transition: all 0.3s ease; + } + + #uploadArea:hover { + border-color: #818cf8; + background-color: rgba(129, 140, 248, 0.1); + } + + #uploadArea[dragActive="true"] { + border-color: #4ade80; + background-color: rgba(74, 222, 128, 0.1); + } + + /* 文件信息 */ + #fileInfo { + background-color: #1a202c; + border: 1px solid #4a5568; + border-radius: 4px; + padding: 5px 10px; + color: #e2e8f0; + font-size: 13px; + } + + /* 保存位置标签 */ + #savePathLabel { + background-color: #1a202c; + border: 1px solid #4a5568; + border-radius: 4px; + padding: 5px 10px; + color: #a0aec0; + font-size: 13px; + } + + /* 按钮样式 */ + #uploadBtn, #actionBtn, #downloadBtn, #smallBtn, #browseBtn { + min-height: 36px; + font-weight: 500; + border-radius: 6px; + padding: 5px 15px; + } + + #uploadBtn { + min-width: 150px; + background-color: #4f46e5; + color: white; + } + + #uploadBtn:hover { + background-color: #4338ca; + } + + #actionBtn { + background-color: #10b981; + color: white; + } + + #actionBtn:hover { + background-color: #059669; + } + + #actionBtn:disabled { + background-color: #4a5568; + color: #a0aec0; + } + + #downloadBtn { + background-color: #f59e0b; + color: white; + } + + #downloadBtn:hover { + background-color: #d97706; + } + + #downloadBtn:disabled { + background-color: #4a5568; + color: #a0aec0; + } + + #smallBtn { + min-height: 30px; + background-color: #4a5568; + color: #e2e8f0; + font-size: 12px; + } + + #smallBtn:hover { + background-color: #2d3748; + } + + #browseBtn { + background-color: #4a5568; + color: #e2e8f0; + } + + #browseBtn:hover { + background-color: #2d3748; + } + + /* 进度条 */ + #totalProgress { + height: 8px; + border-radius: 4px; + background-color: #1a202c; + } + + #totalProgress::chunk { + background-color: #818cf8; + border-radius: 4px; + } + + #progressLabel { + color: #a0aec0; + font-size: 13px; + min-width: 70px; + } + + #statusLabel { + font-size: 14px; + color: #e2e8f0; + margin-top: 10px; + padding: 8px; + border-radius: 6px; + background-color: rgba(26, 32, 44, 0.3); + } + + /* 文件列表 */ + #fileList, #resultList { + background-color: rgba(26, 32, 44, 0.3); + border: 1px solid #4a5568; + border-radius: 6px; + min-height: 200px; + font-size: 13px; + } + + #fileList::item, #resultList::item { + padding: 8px 12px; + border-bottom: 1px solid rgba(74, 85, 104, 0.5); + color: #e2e8f0; + } + + #fileList::item:selected, + #resultList::item:selected { + background-color: rgba(129, 140, 248, 0.15); + } + + /* 结果标签 */ + #resultLabel { + font-size: 14px; + color: #cbd5e0; + padding: 20px; + background-color: rgba(26, 32, 44, 0.3); + border-radius: 8px; + border: 1px dashed #4a5568; + } + + /* 输入框 */ + QLineEdit { + background-color: #1a202c; + border: 1px solid #4a5568; + border-radius: 4px; + padding: 5px 10px; + color: #e2e8f0; + font-size: 14px; + } + + QLineEdit:focus { + border-color: #818cf8; + } + """ diff --git a/v1/views/word_to_pdf-v2.py b/v1/views/word_to_pdf-v2.py new file mode 100644 index 0000000..3e20a54 --- /dev/null +++ b/v1/views/word_to_pdf-v2.py @@ -0,0 +1,869 @@ +import os +import shutil +import time +import traceback +import random +import datetime + +import win32com +from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QLabel, + QPushButton, QFrame, QListWidget, QListWidgetItem, + QFileDialog, QProgressBar, QMessageBox, QSpacerItem) +from PyQt5.QtCore import Qt, QThread, pyqtSignal, QSize, QTimer +from PyQt5.QtGui import QPixmap, QIcon, QDragEnterEvent, QDropEvent, QDragLeaveEvent + + +def generate_unique_filename(original_path, output_dir): + """生成唯一的文件名格式:原名称_日期_随机数.pdf""" + base_name = os.path.basename(original_path) + name_without_ext = os.path.splitext(base_name)[0] + + # 获取当前日期 + current_date = datetime.datetime.now().strftime("%Y%m%d") + + # 生成4位随机数 + random_num = random.randint(1000000, 9999999) + + # 组合成新文件名 + new_filename = f"{name_without_ext}_{current_date}_{random_num}.pdf" + return os.path.join(output_dir, new_filename) + + +class ConversionThread(QThread): + progress_updated = pyqtSignal(int, int, str) # current, total, filename + conversion_done = pyqtSignal(str, bool, str) # filename, success, message + finished_all = pyqtSignal() + + def __init__(self, files, output_dir): + super().__init__() + self.files = files + self.output_dir = output_dir + self.is_running = True + + def run(self): + print("转换线程启动") + word = None + + try: + # 尝试创建Word应用程序实例 + print("正在创建Word应用程序实例...") + try: + word = win32com.client.Dispatch("Word.Application") + print("Word应用程序实例创建成功") + word.Visible = False + word.DisplayAlerts = False + print("Word应用程序配置完成") + except Exception as e: + print(f"创建Word应用程序失败: {str(e)}") + self.conversion_done.emit("", False, f"无法启动Word: {str(e)}") + return + + total = len(self.files) + print(f"共有 {total} 个文件需要处理") + + # 处理每个文件 + for i, file_path in enumerate(self.files): + if not self.is_running: + print("线程被请求中断") + break + + print(f"开始处理文件 #{i + 1}: {file_path}") + self.progress_updated.emit(i + 1, total, os.path.basename(file_path)) + + # 检查文件是否存在 + if not os.path.exists(file_path): + print(f"文件不存在: {file_path}") + self.conversion_done.emit(file_path, False, "文件不存在") + continue + + try: + # 生成PDF路径 + pdf_path = generate_unique_filename(file_path, self.output_dir) + pdf_path = os.path.abspath(pdf_path) + print(f"PDF路径: {pdf_path}") + + # 打开文档 + print("准备打开Word文档...") + doc = None + try: + # 使用绝对路径 + doc = word.Documents.Open( + os.path.abspath(file_path), + False, # ConfirmConversions + True, # ReadOnly + False # AddToRecent + ) + print("Word文档打开成功") + + # 短暂延迟确保文档加载 + time.sleep(1) + + # 保存为PDF + print("准备保存为PDF...") + doc.SaveAs(pdf_path, FileFormat=17) + print("PDF保存成功") + + self.conversion_done.emit(file_path, True, pdf_path) + except Exception as e: + print(f"文档处理失败: {str(e)}") + error_msg = f"转换失败: {str(e)}" + self.conversion_done.emit(file_path, False, error_msg) + finally: + # 确保文档被安全关闭 + if doc: + try: + print("正在关闭文档...") + doc.Close(False) # 不保存更改 + doc = None + print("文档关闭成功") + except Exception as e: + print(f"文档关闭失败: {str(e)}") + except Exception as e: + print(f"文件处理失败: {str(e)}") + error_msg = f"处理文件时出错: {str(e)}" + self.conversion_done.emit(file_path, False, error_msg) + + print(f"文件 #{i + 1} 处理完成") + + print("所有文件处理完成") + self.finished_all.emit() + except Exception as e: + print(f"转换过程中发生严重错误: {str(e)}") + error_msg = f"转换过程中发生严重错误: {str(e)}" + self.conversion_done.emit("", False, error_msg) + self.finished_all.emit() + finally: + # 清理代码(不使用pythoncom) + try: + if word: + print("正在退出Word应用程序...") + word.Quit() + print("Word应用程序已退出") + word = None + except Exception as e: + print(f"退出Word失败: {str(e)}") + try: + print("尝试强制终止Word进程...") + os.system('taskkill /f /im winword.exe') + print("强制终止命令已执行") + except: + pass + + print("清理完成") + print("转换线程结束") + + def stop(self): + """安全停止转换线程""" + self.is_running = False + + +class WordToPDFPage(QWidget): + def __init__(self): + super().__init__() + self.files = [] + self.converted_files = {} + self.conversion_thread = None + self.output_dir = "" # 添加输出目录变量 + self.init_ui() + self.setStyleSheet(self.get_page_style()) + + def init_ui(self): + self.setObjectName("wordToPdfPage") + self.setAcceptDrops(True) + + layout = QHBoxLayout() + layout.setContentsMargins(20, 20, 20, 20) + layout.setSpacing(20) + + # 左侧面板 - 文件上传 + left_panel = QWidget() + left_layout = QVBoxLayout(left_panel) + left_layout.setContentsMargins(0, 0, 0, 0) + left_layout.setSpacing(15) + + # 上传区域(增强拖拽效果) + upload_area = QFrame() + upload_area.setObjectName("uploadArea") + upload_area.setFixedHeight(200) + upload_area.setAcceptDrops(True) + + upload_layout = QVBoxLayout(upload_area) + upload_layout.setAlignment(Qt.AlignCenter) + + upload_icon = QLabel() + upload_icon.setPixmap(QPixmap(":/icons/upload.png").scaled(64, 64, Qt.KeepAspectRatio, Qt.SmoothTransformation)) + upload_icon.setAlignment(Qt.AlignCenter) + + self.upload_text = QLabel("拖拽文件或文件夹到此处\n或点击上传") + self.upload_text.setAlignment(Qt.AlignCenter) + self.upload_text.setWordWrap(True) + + upload_btn = QPushButton("选择文件或文件夹") + upload_btn.setObjectName("uploadBtn") + upload_btn.clicked.connect(self.handle_upload) + + upload_layout.addWidget(upload_icon) + upload_layout.addWidget(self.upload_text) + upload_layout.addWidget(upload_btn) + + # 文件列表 + file_list_frame = QFrame() + file_list_frame.setObjectName("fileListFrame") + file_list_layout = QVBoxLayout(file_list_frame) + file_list_layout.setContentsMargins(0, 0, 0, 0) + file_list_layout.setSpacing(5) + + file_title = QLabel("待转换文件") + file_title.setObjectName("sectionTitle") + + self.file_list = QListWidget() + self.file_list.setObjectName("fileList") + self.file_list.setSelectionMode(QListWidget.ExtendedSelection) + + file_list_layout.addWidget(file_title) + file_list_layout.addWidget(self.file_list) + + # 在操作按钮上方添加输出目录选择 + output_layout = QHBoxLayout() + output_layout.setSpacing(10) + + self.output_label = QLabel("输出目录: 未选择") + self.output_label.setObjectName("outputLabel") + self.output_label.setStyleSheet("color: #cbd5e0; font-size: 13px;") + self.output_label.setFixedWidth(300) + + output_btn = QPushButton("选择目录") + output_btn.setObjectName("outputBtn") + output_btn.clicked.connect(self.select_output_directory) + + output_layout.addWidget(self.output_label) + output_layout.addWidget(output_btn) + output_layout.addStretch() + + # 操作按钮 + btn_layout = QHBoxLayout() + btn_layout.setSpacing(10) + + self.convert_btn = QPushButton("开始转换") + self.convert_btn.setObjectName("convertBtn") + self.convert_btn.clicked.connect(self.start_conversion) + + delete_btn = QPushButton("删除选中") + delete_btn.setObjectName("deleteBtn") + delete_btn.clicked.connect(self.delete_selected) + + btn_layout.addWidget(self.convert_btn) + btn_layout.addWidget(delete_btn) + + # 组装左侧面板 + left_layout.addWidget(upload_area) + left_layout.addLayout(output_layout) # 添加输出目录选择 + left_layout.addWidget(file_list_frame) + left_layout.addLayout(btn_layout) + + # 右侧面板 - 转换结果 + right_panel = QWidget() + right_layout = QVBoxLayout(right_panel) + right_layout.setContentsMargins(0, 0, 0, 0) + right_layout.setSpacing(15) + + # 进度区域 + progress_frame = QFrame() + progress_frame.setObjectName("progressFrame") + progress_layout = QVBoxLayout(progress_frame) + progress_layout.setContentsMargins(15, 15, 15, 15) + progress_layout.setSpacing(10) + + progress_title = QLabel("转换进度") + progress_title.setObjectName("sectionTitle") + + # 总体进度 + total_layout = QHBoxLayout() + total_layout.setSpacing(10) + + total_label = QLabel("总体进度:") + total_label.setObjectName("progressLabel") + + self.total_progress = QProgressBar() + self.total_progress.setObjectName("totalProgress") + self.total_progress.setTextVisible(False) + + total_layout.addWidget(total_label) + total_layout.addWidget(self.total_progress) + + # 文件进度 + file_layout = QHBoxLayout() + file_layout.setSpacing(10) + + file_label = QLabel("当前文件:") + file_label.setObjectName("progressLabel") + + self.file_progress = QProgressBar() + self.file_progress.setObjectName("fileProgress") + self.file_progress.setTextVisible(False) + + file_layout.addWidget(file_label) + file_layout.addWidget(self.file_progress) + + # 状态标签 + self.status_label = QLabel("就绪") + self.status_label.setObjectName("statusLabel") + self.status_label.setAlignment(Qt.AlignCenter) + + progress_layout.addWidget(progress_title) + progress_layout.addLayout(total_layout) + progress_layout.addLayout(file_layout) + progress_layout.addWidget(self.status_label) + + # 结果列表 + result_frame = QFrame() + result_frame.setObjectName("resultFrame") + result_layout = QVBoxLayout(result_frame) + result_layout.setContentsMargins(0, 0, 0, 0) + result_layout.setSpacing(5) + + result_title = QLabel("转换结果") + result_title.setObjectName("sectionTitle") + + self.result_list = QListWidget() + self.result_list.setObjectName("resultList") + self.result_list.setSelectionMode(QListWidget.ExtendedSelection) + + result_layout.addWidget(result_title) + result_layout.addWidget(self.result_list) + + # 下载按钮改为另存为 + self.save_as_btn = QPushButton("另存为...") + self.save_as_btn.setObjectName("saveAsBtn") + self.save_as_btn.setEnabled(False) + self.save_as_btn.clicked.connect(self.save_as) + + # 日志区域 + log_frame = QFrame() + log_frame.setObjectName("logFrame") + log_layout = QVBoxLayout(log_frame) + log_layout.setContentsMargins(0, 0, 0, 0) + log_layout.setSpacing(5) + + log_title = QLabel("转换日志") + log_title.setObjectName("sectionTitle") + + self.log_content = QListWidget() + self.log_content.setObjectName("logContent") + self.log_content.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) + + log_layout.addWidget(log_title) + log_layout.addWidget(self.log_content) + + # 组装右侧面板 + right_layout.addWidget(progress_frame) + right_layout.addWidget(result_frame) + right_layout.addWidget(self.save_as_btn) + right_layout.addWidget(log_frame) + + # 主布局 + layout.addWidget(left_panel) + layout.addWidget(right_panel) + + self.setLayout(layout) + + def get_page_style(self): + return """ + /* ===== Word转PDF页面样式 ===== */ + #wordToPdfPage { + background-color: #1a202c; + } + + /* 卡片样式 */ + #uploadArea, + #fileListFrame, + #progressFrame, + #resultFrame, + #logFrame { + background-color: #2d3748; + border: 1px solid #4a5568; + border-radius: 8px; + padding: 15px; + } + + /* 上传区域 */ + #uploadArea { + border: 2px dashed #4a5568; + background-color: rgba(45, 55, 72, 0.5); + transition: all 0.3s ease; + } + + #uploadArea:hover { + border-color: #818cf8; + background-color: rgba(129, 140, 248, 0.1); + } + + #uploadArea[dragActive="true"] { + border-color: #4ade80; + background-color: rgba(74, 222, 128, 0.1); + } + + /* 标题样式 */ + #sectionTitle { + font-size: 16px; + font-weight: 600; + color: #e2e8f0; + margin-bottom: 10px; + } + + /* 文件列表 */ + #fileList, #resultList, #logContent { + background-color: rgba(26, 32, 44, 0.3); + border: 1px solid #4a5568; + border-radius: 6px; + min-height: 200px; + max-height: 250px; + font-size: 13px; + } + + #fileList::item, #resultList::item, #logContent::item { + padding: 8px 12px; + border-bottom: 1px solid rgba(74, 85, 104, 0.5); + } + + #fileList::item:selected, + #resultList::item:selected, + #logContent::item:selected { + background-color: rgba(129, 140, 248, 0.15); + } + + /* 进度条 */ + #totalProgress, #fileProgress { + height: 8px; + border-radius: 4px; + background-color: #2d3748; + } + + #totalProgress::chunk { + background-color: #818cf8; + border-radius: 4px; + } + + #fileProgress::chunk { + background-color: #4ade80; + border-radius: 4px; + } + + #progressLabel { + color: #a0aec0; + font-size: 13px; + min-width: 70px; + } + + #statusLabel { + font-size: 14px; + color: #e2e8f0; + margin-top: 10px; + padding: 8px; + border-radius: 6px; + background-color: rgba(26, 32, 44, 0.3); + } + + /* 按钮样式 */ + #outputBtn, #uploadBtn, #convertBtn, #deleteBtn, #saveAsBtn { + min-height: 36px; + font-weight: 500; + border-radius: 6px; + padding: 8px 16px; + } + + #uploadBtn { + min-width: 180px; + } + + #outputBtn { + background-color: #4a5568; + color: #e2e8f0; + } + + #outputBtn:hover { + background-color: #2d3748; + } + + #convertBtn { + background-color: #4f46e5; + } + + #convertBtn:disabled { + background-color: #4a5568; + } + + #saveAsBtn { + background-color: #2563eb; + } + + #saveAsBtn:hover { + background-color: #1d4ed8; + } + + #saveAsBtn:disabled { + background-color: #4a5568; + } + + #deleteBtn { + background-color: #ef4444; + } + + #deleteBtn:hover { + background-color: #dc2626; + } + + /* 日志样式 */ + #logContent::item[type="info"] { + color: #a0aec0; + } + + #logContent::item[type="success"] { + color: #34d399; + } + + #logContent::item[type="warning"] { + color: #fbbf24; + } + + #logContent::item[type="error"] { + color: #f87171; + } + """ + + def dragEnterEvent(self, event: QDragEnterEvent): + if event.mimeData().hasUrls(): + event.acceptProposedAction() + # 高亮显示拖拽区域 + self.findChild(QFrame, "uploadArea").setProperty("dragActive", True) + self.findChild(QFrame, "uploadArea").style().polish(self.findChild(QFrame, "uploadArea")) + self.upload_text.setText("释放文件以添加") + + def dragLeaveEvent(self, event: QDragLeaveEvent): + # 恢复拖拽区域样式 + self.findChild(QFrame, "uploadArea").setProperty("dragActive", False) + self.findChild(QFrame, "uploadArea").style().polish(self.findChild(QFrame, "uploadArea")) + self.upload_text.setText("拖拽文件或文件夹到此处\n或点击上传") + + def dropEvent(self, event: QDropEvent): + # 恢复拖拽区域样式 + self.findChild(QFrame, "uploadArea").setProperty("dragActive", False) + self.findChild(QFrame, "uploadArea").style().polish(self.findChild(QFrame, "uploadArea")) + self.upload_text.setText("拖拽文件或文件夹到此处\n或点击上传") + + urls = event.mimeData().urls() + files = [] + added_count = 0 + + for url in urls: + path = url.toLocalFile() + if os.path.isdir(path): + # 处理文件夹 + for root, _, filenames in os.walk(path): + for f in filenames: + if f.lower().endswith(('.doc', '.docx')): + files.append(os.path.join(root, f)) + elif os.path.isfile(path) and path.lower().endswith(('.doc', '.docx')): + files.append(path) + + if files: + added_count = self.add_files(files) + self.add_log(f"添加了 {added_count} 个文件", "success") + else: + self.add_log("未找到有效的Word文件", "warning") + + def handle_upload(self): + """处理文件或文件夹上传""" + options = QFileDialog.Options() + files, _ = QFileDialog.getOpenFileNames( + self, "选择Word文件", "", "Word Files (*.doc *.docx);;All Files (*)", options=options + ) + + if files: + added_count = self.add_files(files) + self.add_log(f"添加了 {added_count} 个文件", "success") + else: + folder = QFileDialog.getExistingDirectory(self, "选择包含Word文件的文件夹") + if folder: + files = [] + for root, _, filenames in os.walk(folder): + for f in filenames: + if f.lower().endswith(('.doc', '.docx')): + files.append(os.path.join(root, f)) + + if files: + added_count = self.add_files(files) + self.add_log(f"从文件夹添加了 {added_count} 个文件", "success") + else: + self.add_log("文件夹中没有找到Word文件", "warning") + + def add_files(self, files): + """添加文件到列表,避免重复""" + added_count = 0 + for file in files: + if file not in self.files and os.path.exists(file): + self.files.append(file) + item = QListWidgetItem(os.path.basename(file)) + item.setData(Qt.UserRole, file) + self.file_list.addItem(item) + added_count += 1 + return added_count + + def delete_selected(self): + """删除选中的文件""" + selected_items = self.file_list.selectedItems() + if not selected_items: + self.add_log("请先选择要删除的文件", "warning") + return + + for item in selected_items: + self.files.remove(item.data(Qt.UserRole)) + self.file_list.takeItem(self.file_list.row(item)) + + self.add_log(f"删除了 {len(selected_items)} 个文件", "info") + + def select_output_directory(self): + """选择输出目录""" + folder = QFileDialog.getExistingDirectory(self, "选择PDF保存位置") + if folder: + self.output_dir = folder + self.output_label.setText(f"输出目录: {folder}") + self.output_label.setToolTip(folder) + self.add_log(f"设置输出目录: {folder}", "info") + return True + return False + + def start_conversion(self): + """开始转换文件""" + + if not self.files: + self.add_log("请先添加要转换的文件!", "warning") + return + + # 检查输出目录 + if not self.output_dir: + if not self.select_output_directory(): + self.add_log("未选择输出目录,转换取消", "warning") + return + + # 确保目录存在 + if not os.path.exists(self.output_dir): + os.makedirs(self.output_dir) + self.add_log(f"创建输出目录: {self.output_dir}", "info") + + if not self.files: + self.add_log("请先添加要转换的文件!", "warning") + return + + # 重置状态 + self.converted_files = {} + self.result_list.clear() + self.log_content.clear() + self.download_btn.setEnabled(False) + self.convert_btn.setEnabled(False) + + # 重置进度条 + self.total_progress.setValue(0) + self.file_progress.setValue(0) + self.status_label.setText("正在准备转换...") + + # 添加开始日志 + self.add_log("开始转换任务", "info") + self.add_log(f"共 {len(self.files)} 个文件待处理", "info") + + # 创建并启动转换线程 + self.conversion_thread = ConversionThread(self.files.copy(), self.output_dir) + self.conversion_thread.progress_updated.connect(self.update_progress) + self.conversion_thread.conversion_done.connect(self.handle_conversion_done) + self.conversion_thread.finished_all.connect(self.handle_finished_all) + self.conversion_thread.start() + + def update_progress(self, current, total, filename): + """更新进度条""" + self.total_progress.setMaximum(total) + self.total_progress.setValue(current) + + # 重置文件进度为0 + self.file_progress.setValue(0) + self.file_progress.setMaximum(100) + + # 更新状态 + self.status_label.setText(f"正在转换: {os.path.basename(filename)}") + self.add_log(f"开始转换: {os.path.basename(filename)} ({current}/{total})", "info") + + # 模拟文件进度动画 + self.animate_file_progress() + + def animate_file_progress(self): + """模拟文件转换进度动画(实际应用中应由实际进度驱动)""" + self.file_progress_value = 0 + + def update_progress(): + if self.file_progress_value < 100: + self.file_progress_value += 2 + self.file_progress.setValue(self.file_progress_value) + QTimer.singleShot(50, update_progress) + + update_progress() + + def handle_conversion_done(self, file_path, success, message): + """处理单个文件转换完成""" + basename = os.path.basename(file_path) + if success: + # 成功时,message包含新的PDF路径 + pdf_path = message + self.converted_files[file_path] = pdf_path + + # 从待转换列表移除 + for i in range(self.file_list.count()): + item = self.file_list.item(i) + if item.data(Qt.UserRole) == file_path: + self.file_list.takeItem(i) + break + + # 添加到结果列表 + item = QListWidgetItem(f"{basename} → {os.path.basename(pdf_path)}") + item.setData(Qt.UserRole, pdf_path) + self.result_list.addItem(item) + + self.add_log(f"✅ 转换成功: {basename} -> {os.path.basename(pdf_path)}", "success") + else: + # 失败时显示错误信息 + self.add_log(f"❌❌ 转换失败: {basename} - {message}", "error") + + def handle_finished_all(self): + """所有文件转换完成""" + success_count = len(self.converted_files) + fail_count = len(self.files) - success_count + + # 更新状态 + self.status_label.setText(f"转换完成! 成功: {success_count}, 失败: {fail_count}") + self.total_progress.setValue(self.total_progress.maximum()) + self.file_progress.setValue(100) + self.convert_btn.setEnabled(True) + self.save_as_btn.setEnabled(bool(self.converted_files)) + + # 添加完成日志 + if success_count: + self.add_log(f"🎉🎉 全部转换完成! 成功转换 {success_count} 个文件", "success") + self.add_log(f"文件已保存到: {self.output_dir}", "info") + if fail_count: + self.add_log(f"⚠️ 有 {fail_count} 个文件转换失败", "warning") + + def save_as(self): + """另存为单个或选中的文件""" + if not self.converted_files: + self.add_log("没有可保存的文件", "warning") + return + + selected_items = self.result_list.selectedItems() + files_to_save = [] + + if selected_items: + # 保存选中的文件 + for item in selected_items: + file_path = item.data(Qt.UserRole) + files_to_save.append(file_path) + else: + # 保存所有文件 + files_to_save = list(self.converted_files.values()) + + if not files_to_save: + self.add_log("没有选择要保存的文件", "warning") + return + + # 如果只保存一个文件,使用另存为对话框 + if len(files_to_save) == 1: + default_name = os.path.basename(files_to_save[0]) + file_path, _ = QFileDialog.getSaveFileName( + self, "保存PDF文件", default_name, "PDF Files (*.pdf)" + ) + if file_path: + try: + shutil.copy2(files_to_save[0], file_path) + self.add_log(f"已保存: {os.path.basename(file_path)}", "success") + except Exception as e: + self.add_log(f"保存失败: {os.path.basename(file_path)} - {str(e)}", "error") + else: + # 保存多个文件,选择目录 + folder = QFileDialog.getExistingDirectory(self, "选择保存位置") + if folder: + success = 0 + errors = [] + + for src_path in files_to_save: + try: + file_name = os.path.basename(src_path) + dest_path = os.path.join(folder, file_name) + shutil.copy2(src_path, dest_path) + success += 1 + except Exception as e: + errors.append(f"{file_name}: {str(e)}") + + if success: + self.add_log(f"已保存 {success} 个文件到 {folder}", "success") + if errors: + self.add_log(f"保存失败 {len(errors)} 个文件", "error") + for error in errors: + self.add_log(f" {error}", "error") + + def download_all(self): + """下载所有转换后的文件""" + if not self.converted_files: + self.add_log("没有可下载的文件", "warning") + return + + folder = QFileDialog.getExistingDirectory(self, "选择保存位置") + if not folder: + self.add_log("下载已取消", "info") + return + + success = 0 + errors = [] + + # 开始下载 + self.status_label.setText("正在下载文件...") + self.add_log(f"开始下载 {len(self.converted_files)} 个文件到 {folder}", "info") + + for pdf_path in self.converted_files.values(): + try: + file_name = os.path.basename(pdf_path) + destination = os.path.join(folder, file_name) + + # 复制文件 + with open(pdf_path, 'rb') as src_file: + with open(destination, 'wb') as dest_file: + dest_file.write(src_file.read()) + success += 1 + self.add_log(f"已下载: {file_name}", "success") + except Exception as e: + errors.append(f"{os.path.basename(pdf_path)}: {str(e)}") + self.add_log(f"下载失败: {os.path.basename(pdf_path)} - {str(e)}", "error") + + # 更新状态 + self.status_label.setText(f"下载完成! 成功: {success}, 失败: {len(errors)}") + + # 显示结果 + if errors: + self.add_log(f"⚠️ 部分文件下载失败 ({len(errors)} 个)", "warning") + else: + self.add_log(f"✅ 全部文件下载成功!", "success") + + self.add_log(f"文件已保存到: {folder}", "info") + + def add_log(self, message, log_type="info"): + """添加日志项""" + item = QListWidgetItem(f"[{datetime.datetime.now().strftime('%H:%M:%S')}] {message}") + item.setData(Qt.UserRole + 1, log_type) # 存储日志类型用于样式 + self.log_content.addItem(item) + self.log_content.scrollToBottom() + + def paintEvent(self, event): + """为拖拽区域添加悬停效果""" + if self.underMouse(): + self.findChild(QFrame, "uploadArea").setProperty("hover", True) + self.findChild(QFrame, "uploadArea").style().polish(self.findChild(QFrame, "uploadArea")) + else: + self.findChild(QFrame, "uploadArea").setProperty("hover", False) + self.findChild(QFrame, "uploadArea").style().polish(self.findChild(QFrame, "uploadArea")) + super().paintEvent(event) \ No newline at end of file diff --git a/v1/奶酪云工具箱.spec b/v1/奶酪云工具箱.spec new file mode 100644 index 0000000..7f5b1fe --- /dev/null +++ b/v1/奶酪云工具箱.spec @@ -0,0 +1,39 @@ +# -*- mode: python ; coding: utf-8 -*- + + +a = Analysis( + ['main.py'], + pathex=[], + binaries=[], + datas=[], + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, + optimize=0, +) +pyz = PYZ(a.pure) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.datas, + [], + name='奶酪云工具箱', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=False, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, + icon=['icon.ico'], +)