使用Python向USB打印机发送打印任务

7 投票
3 回答
21223 浏览
提问于 2025-04-16 19:26

我可以用PDF、PRN或PS文件开始。那么,我该如何用Python把它发送到USB打印机呢?我应该从哪个模块入手呢?

3 个回答

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()

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。

2

据我所知,这里有两个可用的包:

  1. pkipplib
  2. win32print
2

听起来你是在用Windows系统,所以我们先从这个开始说。如果你用的是Linux,答案就会有所不同。

在Windows中,有两种打印方式。第一种最常见的方法是通过Windows的GDI接口发送单独的绘图命令。这样做时,你需要把每个元素(比如文本、图片和形状)放在正确的位置,并选择合适的颜色和字体。如果你自己生成这些数据,那就简单多了;但如果你需要解析一个文件,那就会难很多。

另一种选择是以“原始”模式发送到打印机,这样打印机驱动程序就会被绕过。要让这种方法有效,打印机必须能够理解你发送给它的字节流。有些打印机可以原生理解Postscript格式,但我不太确定PDF是否可以,PRN格式也不是标准格式。

我自己从来没有通过Python进行原始打印,不过这里有一个链接,里面有一小段示例代码(以及你可能会遇到的问题): http://bytes.com/topic/python/answers/512143-printing-raw-postscript-data-windows

撰写回答