Я работаю над проектом на работе, и я застрял в том, чтобы заставить работать функцию печати. У него нет проблем с поиском принтера по умолчанию и отправкой на него задания, но он искажен или находится в маленьком окошке посередине страницы. Я перепутал все, что мог придумать, чтобы изменить это, и я получил печать, чтобы изменить форму коробки или положение, но я не могу заставить ее печатать на всей странице.
Дайте мне знать, если вам нужно больше информации! Заранее спасибо!
Вот мой код:
#
#
#
#
#The command that gets called when the user goes to print setup
#Found on TimGoldern.me.uk adapted for
def print_file():
import win32ui
import win32print
from PIL import Image, ImageWin
#Constants for GetDeviceCaps
#Horzrez/ Vertres = Printable Area of Paper
horzres = 8
vertres = 10
#Log Pixels = dots per inch
logpixelsx = 88
logpixelsy = 90
#Physical width/ height = total area
physicalwidth = 110
physicalheight = 111
#Physical offsetx/y = left / top margin
physicaloffsetx = 112
physicaloffsety = 113
#Setting the default printer and file
printer_name = win32print.GetDefaultPrinter()
file_name = "tiffexample.tiff"
#Create Device context from a named printer
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 if wider than it is high, stretch as much as possible without distortion
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)
#Start the print job and draw bitmap to the printer device at 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()
print_file()