|
发表于 2024-12-29 08:49:38
|
显示全部楼层
您遇到的错误是因为缺少对 `ImageWin` 模块的导入。以下是修改后的代码,添加了 `from PIL import ImageWin` 的导入,确保能够正确使用 `ImageWin.Dib`:
- # coding: utf-8
- from PIL import Image, ImageWin
- import win32print
- import win32ui
- import win32con
- def print_image(image_path, printer_name):
- # 打开图像
- img = Image.open(image_path)
- # 打印机 Handle
- printer_handle = win32print.OpenPrinter(printer_name)
- try:
- # 获取打印机的DevMode
- devmode = win32print.GetPrinter(printer_handle, 2)['pDevMode']
- # 设置自定义纸张尺寸(210x1200 mm)
- devmode.PaperWidth = 2100 # 1/10 mm
- devmode.PaperLength = 12000 # 1/10 mm
- # 设置打印质量为1200dpi
- devmode.PrintQuality = 1200
- # 强制设备模式字段应用
- devmode.Fields |= win32con.DM_PRINTQUALITY | win32con.DM_PAPERSIZE | win32con.DM_ORIENTATION
- # 创建打印上下文
- hdc = win32ui.CreateDC()
- hdc.CreatePrinterDC(printer_name)
- hdc.StartDoc(image_path)
- hdc.StartPage()
- # 图像缩放和位置计算
- img_width, img_height = img.size
- image_scale = 1200 / img_width
- pos_x = 100 # 从左边10mm开始,1/10 mm
- pos_y = 100 # 从上边10mm开始,1/10 mm
- # 绘制图像
- dib = ImageWin.Dib(img)
- dib.draw(hdc.GetHandleOutput(),
- (pos_x, pos_y, pos_x + int(img_width * image_scale), pos_y + int(img_height * image_scale)))
- # 结束任务
- hdc.EndPage()
- hdc.EndDoc()
- hdc.DeleteDC()
- finally:
- # 关闭打印机
- win32print.ClosePrinter(printer_handle)
- # 示例调用
- print_image("rz.png", "HP LaserJet Pro MFP M125-M126 PCLmS")
复制代码
请确保你的机器上已安装 Pillow(PIL的一个分支)库,并且正确配置了打印机驱动。这样就可以打印长图而不分页。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|