python按照队列顺序打印文件

本文介绍了一个Python程序,用于按指定顺序打印多份PDF文件,解决了打印顺序混乱的问题。通过win32print模块与EnumJobs函数交互,确保文件按顺序进入打印队列。当遇到大文件时,适当调整sleep时间来等待打印完成。同时,建议使用福昕PDF阅读器进行后台打印,避免Adobe Acrobat的界面干扰。
摘要由CSDN通过智能技术生成

我遇到过一个需求,按顺序打印一个文件夹内多份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会一闪一闪的白屏,十分影响。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值