当前位置: 代码网 > it编程>前端脚本>Python > 基于Python编写一个打印机批量打印队列工具

基于Python编写一个打印机批量打印队列工具

2025年02月13日 Python 我要评论
1、背景介绍有时候我们在批量打印文件的时候(包括word文档、ppt、excel、图片),总会遇到电脑上打印机队列打不开的情况,为此我们可以利用python写一个打印机批量打印队列!将想要打印的文件全

1、背景介绍

有时候我们在批量打印文件的时候(包括word文档、ppt、excel、图片),总会遇到电脑上打印机队列打不开的情况,为此我们可以利用python写一个打印机批量打印队列!

将想要打印的文件全部拖入其中,然后就可以批量依次打印!

2、库的安装

用途安装
pyqt5界面设计pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/
os获取绝对路径内置库无需安装

3、核心代码

def printfiles(self):
    if self.listwidget.count() == 0:
        qmessagebox.warning(self, '错误', '没有文件可打印!')
        return

    printer = qprinter()
    printdialog = qprintdialog(printer, self)
    if printdialog.exec_() == qprintdialog.accepted:
        for i in range(self.listwidget.count()):
            file_path = self.listwidget.item(i).text()
            if os.path.exists(file_path):
                if file_path.lower().endswith('.pdf'):
                    os.startfile(file_path, 'print')
                elif file_path.lower().endswith('.docx'):
                    qmessagebox.information(self, '打印', f'正在打印word文件: {file_path}')
                elif file_path.lower().endswith(('.jpg', '.png', '.bmp')):
                    os.startfile(file_path, 'print')
                elif file_path.lower().endswith('.txt'):
                    qmessagebox.information(self, '打印', f'正在打印文本文件: {file_path}')
                elif file_path.lower().endswith('.xlsx'):
                    qmessagebox.information(self, '打印', f'正在打印excel文件: {file_path}')
                else:
                    qmessagebox.warning(self, '错误', f'不支持直接打印的文件类型: {file_path}')
            else:
                qmessagebox.warning(self, '错误', f'文件不存在: {file_path}')

4、完整代码

# -*- coding: utf-8 -*-
'''
@project :打印机队列工具
@file    :测试.py
@ide     :pycharm
@author  :一晌小贪欢(278865463@qq.com)
@date    :2025/2/6 10:24
'''

import sys
from pyqt5.qtwidgets import qapplication, qwidget, qvboxlayout, qlistwidget, qpushbutton, qfiledialog, qmessagebox
from pyqt5.qtcore import qt
from pyqt5.qtprintsupport import qprinter, qprintdialog
import os

class fileprinterapp(qwidget):
    def __init__(self):
        super().__init__()
        self.initui()

    def initui(self):
        self.setwindowtitle('文件批量打印工具')
        self.setgeometry(900, 500, 400, 300)

        layout = qvboxlayout()

        self.listwidget = qlistwidget()
        self.listwidget.setacceptdrops(true)
        self.listwidget.setdragenabled(true)
        self.listwidget.setdropindicatorshown(true)
        self.listwidget.dragenterevent = self.dragenterevent
        self.listwidget.dragmoveevent = self.dragmoveevent
        self.listwidget.dropevent = self.dropevent
        layout.addwidget(self.listwidget)

        self.printbutton = qpushbutton('打印')
        self.printbutton.clicked.connect(self.printfiles)
        layout.addwidget(self.printbutton)

        self.setlayout(layout)

    def dragenterevent(self, event):
        if event.mimedata().hasurls():
            event.accept()
        else:
            event.ignore()

    def dragmoveevent(self, event):
        if event.mimedata().hasurls():
            event.accept()
        else:
            event.ignore()

    def dropevent(self, event):
        if event.mimedata().hasurls():
            event.setdropaction(qt.copyaction)
            event.accept()

            for url in event.mimedata().urls():
                file_path = url.tolocalfile()
                # 支持更多文件类型
                if file_path.lower().endswith(('.pdf', '.docx', '.txt', '.xlsx', '.jpg', '.png', '.bmp')):
                    self.listwidget.additem(file_path)
                else:
                    qmessagebox.warning(self, '错误', '不支持的文件类型!')
        else:
            event.ignore()

    def printfiles(self):
        if self.listwidget.count() == 0:
            qmessagebox.warning(self, '错误', '没有文件可打印!')
            return

        printer = qprinter()
        printdialog = qprintdialog(printer, self)
        if printdialog.exec_() == qprintdialog.accepted:
            for i in range(self.listwidget.count()):
                file_path = self.listwidget.item(i).text()
                if os.path.exists(file_path):
                    # 这里可以使用不同的方法来打印不同类型的文件
                    # 例如,对于pdf文件,可以使用系统的命令来打印
                    # 对于图片文件,可以通过pillow库来打印,或者使用操作系统的图片查看器打印
                    if file_path.lower().endswith('.pdf'):
                        # 例如,使用windows上的os.startfile命令来打印pdf文件
                        os.startfile(file_path, 'print')
                    elif file_path.lower().endswith('.docx'):
                        # 对于word文件,可能需要通过外部工具来打印(比如microsoft word或libreoffice命令行工具)
                        qmessagebox.information(self, '打印', f'正在打印word文件: {file_path}')
                    elif file_path.lower().endswith(('.jpg', '.png', '.bmp')):
                        # 对于图片文件,使用系统默认图片查看器打印
                        os.startfile(file_path, 'print')
                    elif file_path.lower().endswith('.txt'):
                        # 对于文本文件,可以将内容转成打印的格式
                        qmessagebox.information(self, '打印', f'正在打印文本文件: {file_path}')
                    elif file_path.lower().endswith('.xlsx'):
                        # 对于excel文件,可以通过excel程序进行打印
                        qmessagebox.information(self, '打印', f'正在打印excel文件: {file_path}')
                    else:
                        qmessagebox.warning(self, '错误', f'不支持直接打印的文件类型: {file_path}')
                else:
                    qmessagebox.warning(self, '错误', f'文件不存在: {file_path}')

if __name__ == '__main__':
    app = qapplication(sys.argv)
    ex = fileprinterapp()
    ex.show()
    sys.exit(app.exec_())

效果图

到此这篇关于基于python编写一个打印机批量打印队列工具的文章就介绍到这了,更多相关python批量打印内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com