Отправить задание на печать на USB-принтер с помощью Python - PullRequest
6 голосов
/ 13 июня 2011

Я могу начать с файла PDF, PRN или PS.Как отправить его на USB-принтер с помощью Python?С какого модуля мне начать?

Ответы [ 3 ]

2 голосов
/ 13 июня 2011

Похоже, вы используете Windows, поэтому давайте начнем с этого - ответ изменится, если вы используете Linux.

Существует два способа печати в Windows. Первый наиболее распространенный способ - отправлять отдельные команды рисования через интерфейс Windows GDI. Чтобы сделать это, вы должны поместить каждый отдельный элемент на странице в правильном месте (текстовые строки, изображения и формы) при выборе правильных цветов и шрифтов. Легко, если вы сами генерируете данные, гораздо сложнее, если вам нужно разобрать файл, который вы читаете.

Другим вариантом является отправка на принтер в «сыром» режиме, когда драйвер принтера по существу обходится. Для того, чтобы это работало, принтер должен понимать поток байтов, который вы ему передаете. Есть некоторые принтеры, которые понимают Postscript изначально, но я не уверен насчет PDF, и PRN не является стандартным форматом.

Я никогда не делал исходную печать через Python, но вот ссылка на короткий фрагмент примера кода (и представление о проблемах, которые следует ожидать): http://bytes.com/topic/python/answers/512143-printing-raw-postscript-data-windows

1 голос
/ 13 июня 2011

Насколько я знаю, доступны два пакета:

  1. pkipplib
  2. win32print
0 голосов
/ 06 марта 2017
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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...