python脚本(Word转PDF格式小工具)

news2024/11/25 15:50:09
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QMessageBox
from PyQt5.QtCore import Qt
import sys
import os
from comtypes import client


#文件转换脚本
class FileDropWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        layout = QVBoxLayout()
        # 设置窗口标题
        self.setWindowTitle("word/pdf")
        # 隐藏标题栏和控制按钮
        self.setWindowFlags(Qt.FramelessWindowHint)
        # 设置窗口置于顶层
        self.setWindowFlags(Qt.WindowStaysOnTopHint)
        # 获取屏幕的可用几何区域
        screen_geometry = QApplication.desktop().availableGeometry()
        # 设置窗口大小
        window_width = 400
        window_height = 300
        self.resize(window_width, window_height)
        # 将窗口移动到屏幕中心
        x = (screen_geometry.width() - window_width) // 2
        y = (screen_geometry.height() - window_height) // 2
        self.move(x, y)
        #拖拉区域代码
        label = QLabel("拖放Word文件到此区域")
        label.setAlignment(Qt.AlignCenter)
        label.setStyleSheet("""
            QLabel {
                background-color: #EAF2F8;
                font-family: Arial;
                font-size: 35px;
                font-weight: 40px;
                color: #333333;
                padding: 10px;
                border: 4px dashed #CCCCCC;
                border-radius: 30px;
            }
        """)

        label.setAcceptDrops(True)
        label.installEventFilter(self)

        layout.addWidget(label)
        self.setLayout(layout)


    def eventFilter(self, obj, event):
        if event.type() == event.DragEnter:
            if event.mimeData().hasUrls():
                event.acceptProposedAction()
        elif event.type() == event.Drop:
            if event.mimeData().hasUrls():
                files = [url.toLocalFile() for url in event.mimeData().urls()]
                self.handleDroppedFiles(files)
            event.acceptProposedAction()
        return super().eventFilter(obj, event)

    def handleDroppedFiles(self, files):
        for file in files:
            if file.endswith('.docx') or file.endswith('.doc'):
                self.convertToPDF(file)
            else:
                self.showErrorMessage("请拖放Word文件或类似文件!")

    def convertToPDF(self, docx_file):
        word = client.CreateObject("Word.Application")
        word.Visible = False
        doc = word.Documents.Open(docx_file)
        pdf_file = os.path.splitext(docx_file)[0] + ".pdf"
        doc.SaveAs(pdf_file, FileFormat=17)
        doc.Close()

        # 关闭 Word 窗口
        word.Quit()

        # 显示转换成功的消息框
        reply = QMessageBox.question(self, "转换成功", f"已将Word文件转换为PDF文件:\n{pdf_file}\n\n是否继续拖放Word文件",
                                     QMessageBox.Yes | QMessageBox.No)

        # 根据用户的选择执行相应的操作
        if reply == QMessageBox.Yes:
            # 用户选择继续执行代码
            print("继续执行代码...")
        elif reply == QMessageBox.No:
            # 用户选择关闭 Word/PDF 窗口
            os.startfile(pdf_file)  # 打开 PDF 文件

if __name__ == "__main__":
    app = QApplication(sys.argv)
    widget = FileDropWidget()
    widget.resize(300, 200)
    widget.show()
    sys.exit(app.exec_())

拖入word文件到规定区域,即可生成PDF格式文件
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/716207.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA+spring boot+mybatis+spring mvc+bootstrap+Mysql停车位管理系统源码

IDEAJavaSpring BootMyBatisshiroLayuiMysql停车位管理系统源码 一、系统介绍1.环境配置 二、系统展示1.登录2.注册3.个人信息4.修改密码5.我的订单6.我的留言7.查车位8.管理员登录9.公告列表10.车位列表11. 订单列表12. 积分排行13. 留言列表14.管理员列表15. 用户列表16.修改…

MySQL:整型类型的显示列宽

整型类型的显示列宽 1、概述2、显示宽度3、总结 1、概述 大家好,我是欧阳方超。 关于定义整型时括号中的数值,再补充一下。 2、显示宽度 定义整型类型,比如int(10),这个括号中的值被称为展示宽度(display width&…

Hive查询操作

Hive基本查询语法 基本使用规则 基本查询语句组成 select .. from ..join [tableName] on ..where ..group by ..having ..order by ..sort by ..limit .. union | union all ...执行顺序 第一步: FROM <left_table> 第二步: ON <join_condition> 第三步: <join…

python使用matplotlib库绘制数学函数

** 任务一&#xff1a;使用matplotlib绘制yx的曲线图 ** matplotlib是python的绘画库&#xff0c;它可以与NumPy一起使用&#xff0c;提供了一种轻量级的MatLab开源高效替代方案。它可以和图形工具包PyQt等工具 一起配合使用&#xff0c;能够完成日常科学计算中多种数学库图可…

RuoYi(分离版) 使用代码生成器添加子模块(idea版)

右键总文件夹&#xff0c;选择新模块添加新模块 新建的业务模块 新建的业务模块中添加若依通用模块工具 <dependencies><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-common</artifactId></dependency></depen…

窨井水位监测的重要性

窨井是排水管网的检查井&#xff0c;能够直观准确的反映城市排水管网的运行状态&#xff0c;在城市排水系统中扮演着重要的角色。窨井水位监测是指对城市下水道或雨水收集系统中的窨井水位进行实时或定期的监测和测量。 窨井水位监测的重要性 预防溢流&#xff1a;窨井水位监测…

Nacos 无缝支持 confd 配置管理

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

Android Studio实现内容丰富的安卓物业管理平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号102 1.开发环境 android stuido3.6 jak1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看公告…

调用接口异常的原因及解决方法

在进行接口调用时&#xff0c;调用有时会遇到各种异常情况&#xff0c;接口解决例如连接超时、异常因及返回值错误等。调用的原这些异常情况可能会导致程序无法正常运行&#xff0c;接口解决因此需要及时解决。异常因及本文将介绍。调用的原 一、接口解决连接超时 连接超时是异…

面试题-Spring 面试集

Spring 面试集 基于Spring Framework 4.x 总结的常见面试题&#xff0c;系统学习建议还是官方文档走起&#xff1a;https://spring.io/projects/spring-framework#learn 一、一般问题 开发中主要使用 Spring 的什么技术 ? IOC 容器管理各层的组件 使用 AOP 配置声明式事务 整…

Vue2+vue-cli使用Tailwind CSS

1.执行以下命令安装依赖 npm install tailwindcssnpm:tailwindcss/postcss7-compat tailwindcss/postcss7-compat postcss^7 autoprefixer^92.cmd执行命令npm i 下载项目所用到的依赖 npm i3.在项目根目录下创建一个 postcss.config.js 文件 module.exports {plugins: [requ…

fcpx插件:Kingluma Radiance(发光和光线过渡效果)

Kingluma Radiance是一款为Final Cut Pro X&#xff08;FCPX&#xff09;设计的插件&#xff0c;它提供了丰富的光效和发光效果&#xff0c;可用于增强视频的视觉效果。 Radiance插件为用户提供了多种发光效果和光晕效果&#xff0c;如光晕、镜头光晕、梦幻效果等。它具有直观的…

推荐信模版(英文)计算机专业

推荐信模版&#xff08;英文&#xff09;计算机专业 ✅ 内容已校对 润色 ©️ 文章来源&#xff1a;https://blog.csdn.net/IYXUAN&#xff0c;原创内容&#xff0c;转载请注明&#xff01; 推荐信&#xff08;一&#xff09; January 4, 2023 Dear Admissions Committe…

7.4黄金能否继续上行?今日行情如何发展

近期有哪些消息面影响黄金走势&#xff1f;今日黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周二(7月4日)亚市早盘&#xff0c;美元指数继续承压&#xff0c;目前略低于103关口;现货黄金保持在1923美元/盎司附近。由于悲观的美国数据未能支持美联储的鹰派倾向…

node获取文件夹下所有js文件的模块

创建 index.js const fs require(fs) const path require(path)const folderPath path.join(__dirname, api)console.log(目录路径&#xff1a;, folderPath)let moduleObj {}fs.readdirSync(folderPath).forEach((file) > {const filePath path.join(folderPath, file…

C语言指针基础

目录 前言 本期介绍内容&#xff1a; 一、指针是什么&#xff1f; 二、指针和指针类型 指针类型的意义&#xff1a; 三、野指针 3.1什么是野指针&#xff1f; 3.2野指针的成因 1.指针未初始化 2.指针越界访问 3.指针指向的那块空间已经释放&#xff08;还给操作系统了…

图像处理--边缘检测算子

算子推导过程 1、知识引入&#xff1a; 在一维连续数集上有函数f(x),我们可以通过求导获得该函数在任一点的斜率&#xff0c;根据导数的定义有&#xff1a; 在二维连续数集上有函数f(x,y),我们也可以通过求导获得该函数在x和y分量的偏导数&#xff0c;根据定义有&#xff1a; …

更改VS code Jupyter 插件的默认快捷键

更改vscode 中Jupyter插件的默认快捷键&#xff0c;解放插入空行的系统快捷键 替换Jupyter默认快捷键 更改vscode 中Jupyter插件的默认快捷键&#xff0c;解放插入空行的系统快捷键打开keyboard shortcuts 设置方法一方法二 更换快捷键 end Jupyter 插件很好的在VS code中集成了…

在私家车上安装车载电台合法吗?

答案是合法的&#xff0c;不过需要办理相关手续才行。想在自己的车上安装车载无线电台&#xff0c;需要先考取一个业余无线电操作证&#xff0c;然后再将车载电台拿到当地的无线电管理委员会进行验机&#xff0c;如果符合业余广播电台的机器要求&#xff0c;将颁发《中华人民共…

淘宝数据采集员(如何快速高效地采集淘宝数据)

目录 淘宝数据采集的重要性 淘宝数据采集的意义 淘宝数据采集的应用场景 淘宝数据采集的流程 淘宝数据采集的准备工作 淘宝数据采集的技巧与注意事项 淘宝数据采集的工具推荐 淘宝数据采集的流程 如何快速高效地采集淘宝数据 淘宝数据采集的注意事项 淘宝数据采集的重…