如何直接打印而不显示打印对话框在Windows中使用python脚本?

我创build了一个桌面应用程序,使用Windows OS中的python2.7gtk + 3打印来自打印机的令牌。 我的应用程序中的一个button应该从文件调用打印。 为了格式化打印,我使用了一个.rtf文件,在将文件打印出打印机之前打开相应的文本编辑器(在我的例子中是MS Word),然后立即closures。

在打印之前如何避免打开和closures? 无论是MS Word设置,Windows还是Python解决scheme。

这是我的代码:

def make_print(self): os.startfile("print.rtf", "print") 

注意“ print.rtf ”是在这个调用之前由python脚本创build的。

我也试过这个,但是还没有打印。

 def make_print1(self): with open('print.rtf', 'r') as f, open('LPT1:', 'w') as lpt: while True: buf = f.read() if not buf: break lpt.write(buf) 

此解决方案仅适用于Windows。 为此,您需要安装pywin32 [ http://timgolden.me.uk/pywin32-docs/contents.html%5D模块。

而不是创建rtf或ps,我们可以直接发送到使用DC(设备上下文)的打印机。

这是我尝试过的解决方案。

 import win32print, win32ui, win32gui import win32con, pywintypes # create a dc (Device Context) object (actually a PyCDC) dc = win32ui.CreateDC() # convert the dc into a "printer dc" # get default printer printername = win32print.GetDefaultPrinter () # leave out the printername to get the default printer automatically dc.CreatePrinterDC(printername) # you need to set the map mode mainly so you know how # to scale your output. I do everything in points, so setting # the map mode as "twips" works for me. dc.SetMapMode(win32con.MM_TWIPS) # 1440 per inch # here's that scaling I mentioned: scale_factor = 20 # ie 20 twips to the point # start the document. the description variable is a string # which will appear in the print queue to identify the job. dc.StartDoc('Win32print test') # to draw anything (other than text) you need a pen. # the variables are pen style, pen width and pen color. pen = win32ui.CreatePen(0, int(scale_factor), 0) # SelectObject is used to apply a pen or font object to a dc. dc.SelectObject(pen) # how about a font? Lucida Console 10 point. # I'm unsure how to tell if this failed. font = win32ui.CreateFont({ "name": "Lucida Console", "height": int(scale_factor * 10), "weight": 400, }) # again with the SelectObject call. dc.SelectObject(font) # okay, now let's print something. # TextOut takes x, y, and text values. # the map mode determines whether y increases in an # upward or downward direction; in MM_TWIPS mode, it # advances up, so negative numbers are required to # go down the page. If anyone knows why this is a # "good idea" please email me; as far as I'm concerned # it's garbage. dc.TextOut(scale_factor * 72, -1 * scale_factor * 72, "Testing...") # for completeness, I'll draw a line. # from x = 1", y = 1" dc.MoveTo((scale_factor * 72, scale_factor * -72)) # to x = 6", y = 3" dc.LineTo((scale_factor * 6 * 72, scale_factor * 3 * -72)) # must not forget to tell Windows we're done. dc.EndDoc() 

在windows8.1 / python 3.4上测试

参考: http : //newcenturycomputers.net/projects/pythonicwindowsprinting.html