我正在嘗試更改佇列中列印作業的用戶,因為我想在服務帳戶上創建它,但將作業發送給其他用戶跟隨我列印佇列。我在python中使用win32模塊。這是我的代碼示例:
from win32 import win32print
JOB_INFO_LEVEL = 2
pclExample = open("sample.pcl")
printer_name = win32print.GetDefaultPrinter()
hPrinter = win32print.OpenPrinter(printer_name)
try:
jobID = win32print.StartDocPrinter(hPrinter, 1, ("PCL Data test", None, "RAW"))
# Here we try to change the user by extracting the job and then setting it again
jobInfoDict = win32print.GetJob(hPrinter, jobID , JOB_INFO_LEVEL )
jobInfoDict["pUserName"] = "exampleUser"
win32print.SetJob(hPrinter, jobID , JOB_INFO_LEVEL , jobInfoDict , win32print.JOB_CONTROL_RESUME )
try:
win32print.StartPagePrinter(hPrinter)
win32print.WritePrinter(hPrinter, pclExample)
win32print.EndPagePrinter(hPrinter)
finally:
win32print.EndDocPrinter(hPrinter)
finally:
win32print.ClosePrinter(hPrinter)
問題是我在 win32print.SetJob() 行出現錯誤。如果 JOB_INFO_LEVEL 設定為 1,則會收到以下錯誤:
(1804, 'SetJob', 'The specified datatype is invalid.')
這是一個已知的錯誤,與 C 在后臺的作業方式有關(
更進一步的方法:
等待發布新的PyWin32版本(包含此修復程式)。這是推薦的方法,但也需要更多時間(目前尚不清楚何時會發生)
獲取來源,或者:
從主要
從b303(最后一個穩定分支),并應用(上面的)補丁(1)
構建模塊(.pyd)并將其復制到Python安裝的PyWin32的site-packages目錄中。更快,但它需要一些更深入的知識,維護可能會成為一場噩夢
腳注
- #1: Check [SO]: Run / Debug a Django application's UnitTests from the mouse right click context menu in PyCharm Community Edition? (@CristiFati's answer) (Patching utrunner section) for how to apply patches (on Win).
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/454174.html
