栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python按照队列顺序打印文件

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python按照队列顺序打印文件

我遇到过一个需求,按顺序打印一个文件夹内多份pdf文件。其中有的文件几页,有的文件五六十页。我参考了其他一些人的打印程序,虽然能用,但是最后打印顺序是混乱的。普通的sleep能有效按顺序打印几页的文件,但是一遇到几十页的就会失效。

以下是我参考了其他人的代码及微软官方api写出的代码,因为实际需求比较复杂,因此我只贴出核心部分的代码。

# order_to_print_file为数组,每一项为需打印文件的绝对路径,将按数组顺序打印
def to_print(order_to_print_file):
    while True:
        flag = input('您是否确定打印以上文件?(y/n):')
        if flag == 'y':
            print('正在打印......')
            default_printers = win32print.GetDefaultPrinter()  # 获取默认打印机的名称
            handle = win32print.OpenPrinter(default_printers)  # 获取打印机的handle
            for file in order_to_print_file:
                if os.path.exists(file):
                    win32api.ShellExecute(0, "print", file, '/d:"%s"' % win32print.GetDefaultPrinter(), ".", 0)  # 这个是执行打印的命令,按照默认打印设置打印
                    time.sleep(2) # sleep一下才能有效获取打印机的队列,特别是遇到大文件。文件非常大可适当增加sleep的时间
                    tasks = win32print.EnumJobs(handle,0, -1, 1)  # 按顺序打印的核心
                    if tasks:
                        print('任务阻塞中,正持续打印,请稍等...')
                    while tasks:  # 发现打印队列中有任务就持续sleep直到打印完成
                        time.sleep(2)
                        tasks = win32print.EnumJobs(handle, 0, -1, 1)
            break
        elif flag == 'n':
            print('正在取消打印,如有需要请重试。')
            break
        else:
            print('请正确输入指令(y/n)!')

 按顺序打印,起关键的是获取打印队列的命令EnumJobs。

参考:EnumJobs 函数 (Winspool.h) - Win32 apps | Microsoft Docs

           使用python的win32模块打印PDF_揭晖的博客-CSDN博客_python win32print

           Python监控打印机队列_IT蜗壳_IT蜗壳-Tango_InfoQ写作社区

如果你不要求双面打印,有个最简单的方法是将全部pdf合并成一个pdf再打印 

如果需要边打印边工作,推荐使用福昕pdf阅读器,可以挂后台让它自己打印。用Adobe Acrobat会一闪一闪的白屏,十分影响。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019428.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号