Windows下Python无弹窗打印JPG文件的问题求助
无弹窗打印Windows标签的Python方案问题
背景
我就职于一家汽车制造企业,正在开发一套零件信息追踪系统,工位电脑上的软件负责录入操作人员输入的零件信息,生成JPG格式的内部追踪标签(这部分用QRCode和PIL模块实现,功能正常)。现在卡在打印环节——需要无弹窗自动打印,避免操作人员手动操作带来的失误和标签格式问题。
核心诉求
求一种Python在Windows下无弹窗发送打印指令的可靠方法,同时解决当前win32print方案的错误问题。
系统环境
- Windows系统
- Python 3.12.6
尝试过的方案
方案一:os.startfile()
用startfile(file_path, "print")触发打印,但会弹出系统打印对话框,不符合无交互需求:
from os import path, getcwd, startfile ... # 尝试以打印模式打开label.jpg try: startfile(file_path, "print") except FileNotFoundError: ...
方案二:win32print库(当前卡住的方案)
尝试用win32print实现无弹窗打印,但触发"句柄无效"错误:
from PIL import Image, ImageDraw, ImageFont, ImageWin from os import path, getcwd, startfile import win32print ... def print_label(filepath: str | bytes) -> None: """打开指定路径的文件并打印""" try: label = Image.open(filepath) printer_name = win32print.GetDefaultPrinter() printer = win32print.OpenPrinter(printer_name) # 初始化文档打印任务 doc_printer = win32print.StartDocPrinter(printer, 1, (filepath, None, "RAW")) win32print.StartPagePrinter(doc_printer) # 错误触发点 # 调整图片方向 label = label.rotate(90, expand=True) width, height = label.size bitmap = ImageWin.Dib(label) bitmap.draw(doc_printer, (0, 0, width, height)) # 结束打印任务 win32print.EndPagePrinter(doc_printer) win32print.EndDocPrinter(doc_printer) win32print.ClosePrinter(printer) except OSError as ex: if ex.winerror == 1155: # 无打印应用关联的提示逻辑 ... else: # 其他错误提示逻辑 ...
错误输出
Default Printer: \\[servername]\[printername] Printer Object: <PyPrinterHANDLE:2151737373152> Initialized Printer: 199 Traceback (most recent call last): File "\...\wip_label_generator.py", line 290, in generate_labels print_label(label) File "\...\wip_label_generator.py", line 36, in print_label win32print.StartPagePrinter(doc_printer) pywintypes.error: (6, 'StartPagePrinter', 'The handle is invalid.')
问题总结
- 上述
StartPagePrinter报"句柄无效"的原因是什么?怀疑是StartDocPrinter的初始化方式有误。 - 有没有更优的无弹窗打印方案?比如用
subprocess.run()实现的可能?
内容的提问来源于stack exchange,提问作者Mason Ritchason
相关产品推荐
相关产品推荐

