【发布时间】:2019-02-04 18:22:46
【问题描述】:
我想使用指定的打印机打印我在脚本上创建的 pdf 文件(或图像),但该文件是横向的。我尝试了Tim Golden's python print,但它打印错误并且大部分图像没有打印,或者我收到一条错误消息,指出找不到指定的文件。这是错误:"pywintypes.error: (2, 'ShellExecute', '系统找不到指定的文件。')" 命令是这样的:win32api.ShellExecute (0, "print", filename, '/d:"%s"' % printer_name, ".", 0) .当然 filename 和 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()
我不知道还能尝试什么。有没有办法做到这一点?
【问题讨论】:
-
请发布导致此错误的代码以及错误的完整堆栈跟踪。您提供的参考资料提供了六种不同的方法。您要求我们猜测您选择了哪个,想象您的代码,然后提出其中可能存在的问题。
-
@BoarGules 我添加了代码,使用 win32api.ShellExecute 的注释行是我尝试打印我创建的 pdf 文件而不是来自 PIL 的图像的其他方式。
标签: python python-3.x windows printing pywin32