Я хочу напечатать файл PDF (или изображение), который я создаю в своем сценарии на указанном принтере, но файл имеет альбомную ориентацию.Я пробовал печать питона Тима Голдена , но она печатается неправильно, и большая часть изображения не печатается, или я получаю сообщение об ошибке, что указанный файл не найден.Это ошибка: "pywintypes.error: (2, 'ShellExecute', 'Система не может найти указанный файл.')" , и команда выглядит так: win32api.ShellExecute(0, "print", имя файла, '/ d: "% s"'% printer_name, ".", 0) .Конечно, имя файла и printer являются строками, а имя принтера берется из win32print.EnumPrinters (2, None, 1)
Вот моя функция печати:
def programA_printer():
global name
global printer_name
global event2
# time.sleep(3)
i=0
while True:
if not event2.is_set():
try:
img = Image.open("Program_A_graph.png", 'r')
if (time.time()-(os.path.getmtime("Program_A_graph.png")) < 1.75):
break
except OSError as identifier:
i = i+1
print(identifier)
time.sleep(1)
if i>5:
print("Υπήρξε πρόβλημα, δεν εκτυπώνω και συνεχίζω στο επόμενο σετ!")
return
serial_number_message = int(time.time())
# img.show(title="Final Result")
img.convert('RGB').save('./εκτυπώσεις/'+str(serial_number_message)+'.pdf', format="PDF", resolution=100.0)
#win32api.ShellExecute (0, "print", './εκτυπώσεις/'+str(serial_number_message)+'.pdf', '/d:"%s"' % printer_name, ".",0)
#win32api.ShellExecute (0, "print", './εκτυπώσεις/'+str(serial_number_message)+'.pdf', '/d:"%s"' % printer_name, "./εκτυπώσεις",0)
HORZRES = 10
VERTRES = 10
PHYSICALWIDTH = 110
PHYSICALHEIGHT = 111
PHYSICALOFFSETX = 112
PHYSICALOFFSETY = 113
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 = img
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("Result")
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()
Я не знаю, что еще попробовать.Есть ли способ добиться этого?