我可以从PDF,PRN或PS文件开始。如何使用Python将其发送到USB打印机?我应该从哪个模块入手?
答案 0 :(得分:2)
听起来你正在使用Windows,所以让我们从那开始 - 如果你使用Linux,答案就会改变。
在Windows中有两种打印方式。第一种最常用的方法是通过Windows GDI界面发送单独的绘图命令。为此,您必须在页面上的每个单独元素放置在适当的位置(文本字符串,图像和形状),同时选择正确的颜色和字体。如果你自己生成数据很容易,如果你必须解析你正在阅读的文件,那就更难了。
另一种选择是以“原始”模式发送到打印机,其中打印机驱动程序基本上被绕过。为此,打印机必须能够原生地了解您提供给它的字节流。有些打印机本身可以理解Postscript,但我不确定PDF,PRN不是标准格式。
我自己从未使用Python进行原始打印,但是这里有一段简短的示例代码片段(以及对所期望问题的概念):http://bytes.com/topic/python/answers/512143-printing-raw-postscript-data-windows
答案 1 :(得分:1)
据我所知,这些是可用的两个包:
答案 2 :(得分:0)
import wx
import win32api
import win32print
class ComboBoxFrame(wx.Frame):
def __init__(self):
# creates a drop down with the list of printers available
wx.Frame.__init__(self, None, -1, 'Printers', size=(350, 300))
panel = wx.Panel(self, -1)
list=[]
#Enum printers returns the list of printers available in the network
printers = win32print.EnumPrinters(
win32print.PRINTER_ENUM_CONNECTIONS
+ win32print.PRINTER_ENUM_LOCAL)
for i in printers:
list.append(i[2])
sampleList = list
wx.StaticText(panel, -1, "Please select one printer from the list of printers to print:", (15, 15))
self.combo =wx.ComboBox(panel, -1, "printers", (15, 40), wx.DefaultSize,sampleList, wx.CB_READONLY )
btn2 = wx.Button(panel, label="Print", pos=(15, 60))
btn2.Bind(wx.EVT_BUTTON, self.Onmsgbox)
self.Centre()
self.Show()
def Onmsgbox(self, event):
filename='duplicate.docx'
# here the user selected printer value will be given as input
#print(win32print.GetDefaultPrinter ())
win32api.ShellExecute (
0,
"printto",
filename,
'"%s"' % self.combo.GetValue(),
".",
0
)
print(self.combo.GetValue())
if __name__ =='__main__':
app = wx.App()
ComboBoxFrame().Show()
app.MainLoop()