Найти - Пользователи
Полная версия: Програмное задание параметров принтеру
Начало » Python для новичков » Програмное задание параметров принтеру
1
minotavr_x86
Как распечатать txt фаил и задать все параметры печати в программе( формат бумаги, отступы, шрифт, сжатие)?
pioner
Если послать на печать файл *.ps, т.е. в pstscript формате? Должен быть модуль форматирования (его не может не быть :o))
minotavr_x86
Такой вариант мне не подходит.
У меня есть Dos програма которая не может печатать на новых принтерах. Она будет создавать текстовые файлы, а мне нужно их скриптом распечатывать с определенными параметрами.
igor.kaist
Насчет именно текста, подсказать не могу. Я делал так: через PIL формировал изображение нужного размера, затем через win32print пускал на печать. Вот кусок кода, функция, принимает в качества аргумента изображение, сформированное модулем Image (PIL), и имя принтера и печатает его.
import win32api
import win32print
import win32ui
def print_bmp(bmp,name):

#
# Constants for GetDeviceCaps
#
#
# HORZRES / VERTRES = printable area
#
HORZRES = 8
VERTRES = 10
#
# LOGPIXELS = dots per inch
#
LOGPIXELSX = 88
LOGPIXELSY = 90
#
# PHYSICALWIDTH/HEIGHT = total area
#
PHYSICALWIDTH = 110
PHYSICALHEIGHT = 111
#
# PHYSICALOFFSETX/Y = left / top margin
#
PHYSICALOFFSETX = 112
PHYSICALOFFSETY = 113


printer_name=name
if printer_name=='':
printer_name = win32print.GetDefaultPrinter ()
file_name = 'zakaz'

#
# You can only write a Device-independent bitmap
# directly to a Windows device context; therefore
# we need (for ease) to use the Python Imaging
# Library to manipulate the image.
#
# Create a device context from a named printer
# and assess the printable size of the paper.
#
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)

#
# Open the image, rotate it if it's wider than
# it is high, and work out how much to multiply
# each pixel by to get it as big as possible on
# the page without distorting.
#


ratios = [1.0 * printable_area[0] / bmp.size[0], 1.0 * printable_area[1] / bmp.size[1]]
scale = min (ratios)

#
# Start the print job, and draw the bitmap to
# the printer device at the scaled size.
#
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 ()
Имена принтеров (если нужно печатать на конкретном принтере а не на принтере по умолчанию), получал так:
for level in (3,5):
l=win32print.EnumPrinters(level)
for x in l:lst.append(x[2])
minotavr_x86
Я не очень понимаю как я буду выставлять формат листа А3 или А4 и ориентацию?
pioner
PostScript - это скрипт для принтера. Он же может содержать нестандартные векторные шрифты и пр. вкусности. Научитесь переделывать в постскрипт-будете печатать на любых принтерах из любых программ. Сам подробно не юзал, попробуйте-интересно увидеть результат изысканий.
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