Найти - Пользователи
Полная версия: как организовать очередь на принтер?
Начало » Python для новичков » как организовать очередь на принтер?
1
andrei186
я сохраняю скриншоты в jpg файл и шлю его на принтер нажатием <F1>, к которому привязана функция save_and_print_screenshot() с нижеприведенным кодом (код функции не мой, скопирован в Инете):
import Tkinter as tk
import win32print
import win32ui
from PIL import Image, ImageWin, ImageGrab

def save_and_print_screenshot():
#######saving scrinshot:
im =ImageGrab.grab()
im.save("screenshot.jpg")
#######printing screenshot:
HORZRES = 8
VERTRES = 10
LOGPIXELSX = 88
LOGPIXELSY = 90
PHYSICALWIDTH = 110
PHYSICALHEIGHT = 111
PHYSICALOFFSETX = 112
PHYSICALOFFSETY = 113
printer_name = win32print.GetDefaultPrinter ()
file_name = "screenshot.jpg"
hDC = win32ui.CreateDC ()
hDC.CreatePrinterDC (printer_name)
printable_area = hDC.GetDeviceCaps (HORZRES), hDC.GetDeviceCaps (VERTRES)
printer_size = hDC.GetDeviceCaps (PHYSICALWIDTH), hDC.GetDeviceCaps (PHYSICALHEIGHT)
printer_margins = hDC.GetDeviceCaps (PHYSICALOFFSETX), hDC.GetDeviceCaps (PHYSICALOFFSETY)
bmp = Image.open (file_name)
if bmp.size[0] > bmp.size[1]:
bmp = bmp.rotate (90)
ratios = [1.0 * printable_area[0] / bmp.size[0], 1.0 * printable_area[1] / bmp.size[1]]
scale = min (ratios)
hDC.StartDoc (file_name)
hDC.StartPage ()
dib = ImageWin.Dib (bmp)
scaled_width, scaled_height = [int (scale * i) for i in bmp.size]
x1 = int ((printer_size[0] - scaled_width) / 2)
y1 = int ((printer_size[1] - scaled_height) / 2)
x2 = x1 + scaled_width
y2 = y1 + scaled_height
dib.draw (hDC.GetHandleOutput (), (x1, y1, x2, y2))
hDC.EndPage ()
hDC.EndDoc ()
hDC.DeleteDC ()
Предположим, я быстро вызову эту функцию несколько раз подряд нажав <F1>, не дожидаясь, пока принтер отпечатает первый скриншот.
Если я хочу, чтобы все скриншоты отпечатались, Python-Windows автоматически организуют очередь на печать?
Или надо принять меры, чтобы файл скриншота не переписался следующим скриншотом, прежде чем он будт отпечатан?
ПС. Не могу проверить это опытным путем, т.к. не имею принтера под рукой
doza_and
andrei186
Предположим, я быстро вызову эту функцию несколько раз подряд нажав <F1>, не дожидаясь, пока принтер отпечатает первый скриншот.
Так что вам мешает нажать <F1>? Вы в сто раз больше кнопок нажали пока писали пост.
andrei186
Не могу проверить это опытным путем, т.к. не имею принтера под рукой
Не принимается, есть полно виртуальных принтеров.

Может вам почитать про GUI приложения. Полагаю что в очередь встанут нажатия на F1 а не задания на печать.
andrei186
doza_and
Так что вам мешает нажать <F1>? Вы в сто раз больше кнопок нажали пока писали пост.
Спасибо.
А что Вам помешало до конца дочитать мой пост и получить ответ на Ваш вопрос?
Для этого Вам вообще не надо жать кнопок
4kpt_IV
andrei186
А что Вам помешало до конца дочитать мой пост и получить ответ на Ваш вопрос?

doza_and
Не принимается, есть полно виртуальных принтеров.
doza_and
:) Это наверное работает закон экспоненциального спада внимания по длине сообщения.
andrei186
doza_and
Это наверное работает закон экспоненциального спада внимания по длине сообщения.
Разобрался, понял, спасибо
Но не уверен, насколько эксперимент на виртуальном принтере воспроизведется на реальном
ZerG
Ничего что у любого принтера своя очередь печати?
И все что вы посылаете на печать работает через нее?
По сути - выберите 10 картинок и отправьте на печать
вы думаете оно по другому работает?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB