Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 4, 2016 12:04:00

andrei186
Зарегистрирован: 2016-02-04
Сообщения: 90
Репутация: +  -1  -
Профиль   Отправить e-mail  

как организовать очередь на принтер?

я сохраняю скриншоты в 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 автоматически организуют очередь на печать?
Или надо принять меры, чтобы файл скриншота не переписался следующим скриншотом, прежде чем он будт отпечатан?
ПС. Не могу проверить это опытным путем, т.к. не имею принтера под рукой

Офлайн

#2 Фев. 4, 2016 19:35:32

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

как организовать очередь на принтер?

andrei186
Предположим, я быстро вызову эту функцию несколько раз подряд нажав <F1>, не дожидаясь, пока принтер отпечатает первый скриншот.
Так что вам мешает нажать <F1>? Вы в сто раз больше кнопок нажали пока писали пост.
andrei186
Не могу проверить это опытным путем, т.к. не имею принтера под рукой
Не принимается, есть полно виртуальных принтеров.

Может вам почитать про GUI приложения. Полагаю что в очередь встанут нажатия на F1 а не задания на печать.



Отредактировано doza_and (Фев. 4, 2016 19:39:38)

Офлайн

#3 Фев. 4, 2016 19:42:00

andrei186
Зарегистрирован: 2016-02-04
Сообщения: 90
Репутация: +  -1  -
Профиль   Отправить e-mail  

как организовать очередь на принтер?

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

Офлайн

#4 Фев. 4, 2016 19:46:30

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

как организовать очередь на принтер?

andrei186
А что Вам помешало до конца дочитать мой пост и получить ответ на Ваш вопрос?

doza_and
Не принимается, есть полно виртуальных принтеров.

Офлайн

#5 Фев. 4, 2016 20:02:58

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

как организовать очередь на принтер?

:) Это наверное работает закон экспоненциального спада внимания по длине сообщения.



Офлайн

#6 Фев. 4, 2016 20:18:56

andrei186
Зарегистрирован: 2016-02-04
Сообщения: 90
Репутация: +  -1  -
Профиль   Отправить e-mail  

как организовать очередь на принтер?

doza_and
Это наверное работает закон экспоненциального спада внимания по длине сообщения.
Разобрался, понял, спасибо
Но не уверен, насколько эксперимент на виртуальном принтере воспроизведется на реальном

Отредактировано andrei186 (Фев. 4, 2016 21:08:58)

Офлайн

#7 Фев. 9, 2016 10:04:59

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

как организовать очередь на принтер?

Ничего что у любого принтера своя очередь печати?
И все что вы посылаете на печать работает через нее?
По сути - выберите 10 картинок и отправьте на печать
вы думаете оно по другому работает?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version