吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 875|回复: 13
收起左侧

[求助] python调用打印机

[复制链接]
52pjtyw 发表于 2024-2-27 10:10
本帖最后由 52pjtyw 于 2024-2-27 13:39 编辑

下发的打印任务到打印机队列了,状态也是已发送到打印机,但是无法触发打印,是什么情况。

[Python] 纯文本查看 复制代码
import win32print

def print_file(filename):
    # 打开文件
    with open(filename, "rb") as f:
        data = f.read()
    printer_name = win32print.GetDefaultPrinter()

    # 打印文件
    hPrinter = win32print.OpenPrinter(printer_name)
    try:
        hJob = win32print.StartDocPrinter(hPrinter, 1, ("test", None, "RAW"))
        try:
            win32print.StartPagePrinter(hPrinter)
            win32print.WritePrinter(hPrinter, data)
            win32print.EndPagePrinter(hPrinter)
        finally:
            win32print.EndDocPrinter(hPrinter)
    finally:
        win32print.ClosePrinter(hPrinter)

path = r'C:\Users\admin\Desktop\新建DOC文档.pdf'
print_file(path)
image.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

vethenc 发表于 2024-2-27 10:56
插眼,蹲一个后续
numbersi 发表于 2024-2-27 12:11
hgjian 发表于 2024-2-27 12:13
FCGkitty 发表于 2024-2-27 12:43
这不得具体调试看哪一个地方报错么,既然都发送了,那就是控件没有触发,看看报错是什么嘛
lianxiang1122 发表于 2024-2-27 12:47
本帖最后由 lianxiang1122 于 2024-2-27 13:13 编辑

试了一下,确实已经发给打印机了,但是就是不打印。我猜想应该是open读取的文件打印机是不能直接打印的。试着用chatgpt给的方案,完全没有问题,可以正常打印,你可以试试。
import os
import win32api
import win32print
#from PyPDF2 import PdfFileReader #no use

def print_pdf(pdf_file_path, printer_name=None):
    # Get default printer if no printer name provided
    if printer_name is None:
        printer_name = win32print.GetDefaultPrinter()

    # Get printer handle
    printer_handle = win32print.OpenPrinter(printer_name)

    # Get default printer properties
    properties = win32print.GetPrinter(printer_handle, 2)

    # Set print job properties
    print_job_info = {
        'JobId': 0,
        'pPrinterName': printer_name,
        'pDatatype': 'RAW',
        'pDevMode': properties['pDevMode'],
        'pOutputFile': None
    }

    # Start printing
    win32api.ShellExecute(0, "print", pdf_file_path, None, ".", 0)

    # Close printer handle
    win32print.ClosePrinter(printer_handle)

# Example usage
if __name__ == "__main__":
    pdf_file_path = "1.pdf"  # Replace with your PDF file path
    printer_name = None  # Use default printer
    print_pdf(pdf_file_path, printer_name)
 楼主| 52pjtyw 发表于 2024-2-27 13:33
FCGkitty 发表于 2024-2-27 12:43
这不得具体调试看哪一个地方报错么,既然都发送了,那就是控件没有触发,看看报错是什么嘛

关键是代码没报错,不知道咋排查了
 楼主| 52pjtyw 发表于 2024-2-27 13:35
lianxiang1122 发表于 2024-2-27 12:47
试了一下,确实已经发给打印机了,但是就是不打印。我猜想应该是open读取的文件打印机是不能直接打印的。试 ...

这个好像调用了office组件,想让他静默打印
myFreefly 发表于 2024-2-27 14:58
看打印机端口是空的,这个打印机状态是正常的么,
 楼主| 52pjtyw 发表于 2024-2-27 15:22
myFreefly 发表于 2024-2-27 14:58
看打印机端口是空的,这个打印机状态是正常的么,

打印机应该没问题,使用office打印是正常
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表