Печать с помощью PyWin32: куда поместить имя файла?

#python #file #printing #pywin32 #network-printers

#python #файл #печать #pywin32 #сеть-принтеры

Вопрос:

Я могу успешно распечатать тестовую страницу через сетевой принтер, используя PyWin32, и изменить лоток, используя следующий код:

  device_name = "Printer Name"
 handle = win32print.OpenPrinter(device_name)

 properties = win32print.GetPrinter(handle, 2)
 devmode = properties['pDevMode']

 devmode.DefaultSource = 260
 devmode.Fields = devmode.Fields | DM_DEFAULT_SOURCE

 win32print.DocumentProperties(None, handle, device_name, devmode, devmode, 
 DM_IN_BUFFER | DM_OUT_BUFFER)

 hdc = win32gui.CreateDC('', device_name, devmode)
 win32print.StartDoc(hdc, ('Test', None, None, 0))
 win32print.StartPage(hdc)

 win32print.EndPage(hdc)
 win32print.EndDoc(hdc)
  

Мой вопрос в том, если я хочу распечатать определенный файл, куда мне поместить имя файла?

Ответ №1:

Имя файла должно быть указано в StartDoc , где вторым параметром является кортеж для DOCINFO

Например, это приведет к печати на PDF-принтере с именем файла ‘test.pdf’:

 hdc = win32gui.CreateDC('', device_name, devmode)
win32print.StartDoc(hdc, ('Test', 'test.pdf', None, 0))
win32print.StartPage(hdc)
  

win32print.StartDoc

int = StartDoc(hdc, docinfo )

Запускает буферизацию задания печати в контексте устройства принтера

Параметры

hdc : PyHANDLE Дескриптор контекста устройства принтера, возвращаемый win32gui::CreateDC

docinfo : tuple
DOCINFO кортеж, задающий параметры задания печати

Комментарии:

1. При этом генерируется файл с указанным именем, но я пытаюсь отправить существующий файл на принтер?

2. Возможно, вы захотите удалить этот ответ, поскольку он не отвечает на вопрос, а вместо этого генерирует файл с указанным именем, как написано в первом комментарии.

3. @MrUpsidown Нет API для печати любого случайного файла, если это ваш вопрос. Например, если у вас есть zip-файл, то Windows понятия не имеет, как его распечатать. Если у файла есть обработчик печати в реестре, вы можете попросить ОС распечатать его. API, опубликованные в вопросе, предназначены для печати в файл, где ваше приложение решает, что печатать.

4. Согласен. Ваш ответ по-прежнему не дает ответа на вопрос: Мой вопрос в том, если я хочу распечатать определенный файл, куда мне поместить имя файла?

5. Он не спрашивает, как печатать в файл. Он спрашивает, как распечатать конкретный файл. Существующий файл. И я не задаю другой вопрос. Вернемся к моему первому комментарию.