Возникли проблемы при печати с Python3, PIL и Windows DC - PullRequest
0 голосов
/ 15 апреля 2020

Я работаю над проектом на работе, и я застрял в том, чтобы заставить работать функцию печати. У него нет проблем с поиском принтера по умолчанию и отправкой на него задания, но он искажен или находится в маленьком окошке посередине страницы. Я перепутал все, что мог придумать, чтобы изменить это, и я получил печать, чтобы изменить форму коробки или положение, но я не могу заставить ее печатать на всей странице.

Дайте мне знать, если вам нужно больше информации! Заранее спасибо!

Вот мой код:

#
#
#
#

#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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...