收到打印作业Python【JAVA教程】

!
也想出现在这里? 联系我们
信息

收到打印作业Python,第1张

概述收到打印作业Python

打印作业最初在本地计算机上请求打印作业时,我已成功设法触发callback。 然而,无论如何,有win32print或类似的东西,可以让我来处理打印作业被转移到打印服务器或USB打印机事件?

################################################################################ # imports ###################################################################### ################################################################################ from os.path import * from printer import * from watcher import * from statvar import * ################################################################################ # Event Callback ############################################################### ################################################################################ def callback(code,event): num = splitext(event)[0] ext = splitext(event)[1] if code == 1 and ext == \’.SPL\’: main(num.lstrip(\’0\’)) ################################################################################ # wx Event Handler ############################################################# ################################################################################ def handling(*args): wx.CallAfter(callback,*args) ################################################################################ # Create Listener ############################################################## ################################################################################ # Listens to the spool directory for files watch = Watcher(SPOol_DIRECTORY,handling) # set the appropriate flags for a Listener watch.flags = file_NOTIFY_CHANGE_file_name ################################################################################ # Start Listener ############################################################### ################################################################################ watch.start() ################################################################################ # Start wx App ################################################################# ################################################################################ app = wx.App() wx.Frame(None) app.MainLoop() ################################################################################ ################################################################################ ################################################################################

在Python中静默打印pdf

PHP直接打印到打印机(本地/networking)(卡在打印后台处理程序中)

从windows服务打印,无对话,无用户交互

打印机后台监视器

在windows中打印时,以编程方式设置“每页打印页数(N-Up)”选项

这是一个在我的电脑上工作的想法(windows 8)。 这不是完全成熟的代码,但它可能会让你去。 您需要使用函数FindFirstPrinterChangeNotification和FindNextPrinterChangeNotification这些包含在客户端的winspool.drv ( spoolSS.dll你可以找到他们记录在spoolSS.dll但这是服务器端 – 这张图可以澄清)。

可以从MSDN获取可以监听的事件列表(重要的是,它们的标志设置)。 最初我以为你想要PRINTER_CHANGE_ADD_JOB ( 0x00000100 ),但我想你可能实际上需要PRINTER_CHANGE_WRITE_JOB ( 0x00000800 )。 这不会在作业开始后台处理时立即触发,但不幸的是,在您将一个文档发送到网络打印机的示例中似乎会触发多次。

不幸的是,这些API没有公开在win32print库中。 我想,所以你必须潜入ctypes 。 在这里,我没有注册回调,而是我听通知,当触发我调用函数,并开始在无限循环再次收听。 这个过程在聆听时停滞不前。 如果你需要传统的回调函数,你可以在自己的线程中运行这个脚本,或者这个回答可能不适合你的需要。

注意 – 这只是监听正在请求的打印作业,然后调用一个函数。 如果你想提取关于被触发的工作的信息,代码将变得可怕。 进一步说明 – 它会触发打印作业,并开始取消,但我想这没什么问题。

from ctypes import * from ctypes.wintypes import HANDLE,LPSTR def add_job_callback(): print(\’A job has just been sent to the printer this script is monitoring\’) spl = windll.Loadlibrary(\’winspool.drv\’) printer_name = \’KONICA MINolTA PS color Laser Class Driver\’ # Put the name of your printer here – can be networked or any installed on your computer. Alternatively,set it to None to use the local printer server #printer_name = None hPrinter = HANDLE() if printer_name: spl.OpenPrintera(c_char_p(printer_name),byref(hPrinter),None) else: spl.OpenPrintera(None,None) print(hPrinter) hjob = spl.FindFirstPrinterChangeNotification(hPrinter,0x00000100,None) # 0x00000100 is a flags setting to set watch for only PRINTER_CHANGE_ADD_JOB while True: windll.kernel32.WaitForSingleObject(hjob,-1) #When this function returns,the change that you\’re monitoring for has been observed,trigger the function add_job_callback() spl.FindNextPrinterChangeNotification(hjob,None,None)

请注意,Python 2.7和Python 3在这里有一些小的区别 – 例如,从字符串中初始化c_char_p ctype 。 我已经提出了我可以在这里最简单的版本 – 它在2.7。

后记

我做了所有繁重的工作,然后找到了答案 ,这是重复的。 它有更好的代码来处理unicode打印机名称等,但只查看默认的本地打印服务器。

总结

以上是内存溢出为你收集整理的收到打印作业Python全部内容,希望文章能够帮你解决收到打印作业Python所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞188 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容