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

如何将待打印PDF发送至Python脚本而非实体打印机

RedMon重定向打印流到Python脚本的实现方案

核心原理

RedMon作为端口重定向监视器,不会向你绑定的程序传入现成的PDF文件路径,所有打印任务的原始数据会通过**标准输入(stdin)**以二进制流的形式直接推送给目标程序,你只需要在脚本中读取该流即可拿到待处理的打印内容。

配置与实现步骤

  • 先校准RedMon端口配置
    打开对应RedMon端口的配置页,在Program to run栏填入你打包好的Python exe绝对路径,Arguments for program栏留空即可,程序运行身份选择当前登录用户,输出选项选择「Program handles output」即可,不要额外配置文件传参规则。
  • Python脚本读取打印流的核心实现
    注意必须用二进制模式读取stdin,否则会破坏PDF文件结构,参考代码如下:
    import sys
    import tempfile
    import os
    
    # 读取RedMon传入的二进制打印流
    print_stream = sys.stdin.buffer.read()
    
    # 将流写入临时PDF文件,供后续处理
    temp_pdf = tempfile.NamedTemporaryFile(suffix=".pdf", delete=False)
    temp_pdf.write(print_stream)
    temp_pdf.close()
    temp_pdf_path = temp_pdf.name
    
    # 以下替换为你的自定义PDF处理逻辑,示例为读取PDF页数
    import fitz
    pdf_doc = fitz.open(temp_pdf_path)
    page_count = pdf_doc.page_count
    pdf_doc.close()
    
    # 处理完成后删除临时文件,避免垃圾文件堆积
    os.remove(temp_pdf_path)
    
  • 打包exe注意事项
    用PyInstaller打包脚本时不要加--windowed/-w参数,否则程序没有控制台上下文,无法读取stdin流,直接用pyinstaller -F 你的脚本名.py打包即可。

常见问题排查

  • 如果读取保存的文件不是有效PDF:检查你绑定RedMon端口的打印机驱动,必须使用能输出原生PDF的驱动(比如Microsoft Print to PDF),如果用的是PostScript、PCL类的通用打印驱动,传入的流是对应打印指令格式,不是PDF,需要额外做格式转换。
  • 如果脚本完全没收到数据:检查RedMon配置里的程序路径是否正确,是否给了exe足够的运行权限,不要把参数栏填成%1这类传文件路径的占位符。
  • 如果拿到的PDF内容乱码:确认读取stdin时用的是sys.stdin.buffer.read()二进制读取模式,不要用默认的文本模式读。

后续PDF处理参考

拿到有效PDF的临时路径后,你可以用常规Python PDF库完成任意处理:

  • 文本提取、页面渲染:用PyMuPDF(fitz)
  • PDF拆分、合并、元数据修改:用pypdf
  • 加水印、表单填充:用reportlab配合pypdf实现

内容的提问来源于stack exchange,提问作者Mr I

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:27:09