You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用win32print打印任务滞留在队列的问题求助

解决Windows下Python向网络打印机发送文本/文件的队列滞留问题

问题根源

你当前代码使用RAW数据类型直接发送UTF-8文本,但Brother DCP-L5652DN这类打印机无法直接解析纯UTF-8文本,导致任务滞留在队列中。RAW模式要求发送打印机原生支持的指令(如PCL、ESC/POS),而普通文本需要经过系统转换或添加打印机能识别的控制符。

针对性解决方案

1. 修正数据类型与文本格式

将数据类型改为TEXT,Windows会自动将文本转换为打印机兼容的格式,同时添加换行和换页符触发打印机输出:

import win32print
import win32api

printer_name = "Brother DCP-L5652DN Printer"
try:
    v_printer_handle = win32print.OpenPrinter(printer_name)
    
    v_job_name = "My Job"
    v_file_to_print = None
    v_data_type = "TEXT"  # 切换为TEXT类型,由Windows处理格式转换
    
    v_DocInfo = (v_job_name, v_file_to_print, v_data_type)
    
    win32print.StartDocPrinter(v_printer_handle, 1, v_DocInfo)
    win32print.StartPagePrinter(v_printer_handle)
    
    # 使用Windows默认ANSI编码(如cp1252)编码,添加换行+换页符确保打印机输出
    raw_data = "This is a test printing python !\r\n\x0C".encode('cp1252')
    v_bytes = win32print.WritePrinter(v_printer_handle, raw_data)
    print("Bytes Sent: ", v_bytes)
    
    win32print.EndPagePrinter(v_printer_handle)
    win32print.EndDocPrinter(v_printer_handle)
    win32print.ClosePrinter(v_printer_handle)
    print("打印任务提交成功")
except win32api.error as e:
    print(f"打印出错: {e}")

如果坚持使用RAW模式,需要发送打印机支持的指令,比如添加换页符\x0C:

raw_data = bytes("This is a test printing python !\x0C", "utf-8")

2. 确认打印机名称准确性

打印机名称必须完全匹配系统中的注册名称,可通过以下代码获取所有打印机的准确名称:

import win32print

printers = win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL | win32print.PRINTER_ENUM_NETWORK)
for printer in printers:
    print(printer[2])  # 打印打印机名称

3. 打印文件的实现方式

  • 文本文件:读取文件内容后按TEXT模式编码发送,类似上面的文本发送逻辑;
  • PDF/Office文件:使用ShellExecute调用系统关联程序打印,避免格式不兼容问题:
import win32api

printer_name = "Brother DCP-L5652DN Printer"
file_path = r"C:\path\to\your\file.pdf"

# printto参数需将打印机名称用双引号包裹,处理名称含空格的情况
win32api.ShellExecute(
    0,
    "printto",
    file_path,
    f'"{printer_name}"',
    ".",
    0
)

内容的提问来源于stack exchange,提问作者Ricardo Pascoal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 21:55:00