【问题标题】:Print to standard printer from Python?从 Python 打印到标准打印机?
【发布时间】:2012-09-25 06:51:20
【问题描述】:

是否有合理的标准和跨平台方式将文本(甚至 PS/PDF)打印到系统定义的打印机?

在这里假设CPython,不像使用Jython 和Java printing API 那样聪明。

【问题讨论】:

  • 假设 Java 打印可以做到这一点,另一个“聪明”的解决方案是 JPype(一种让 cpython 和 jvm 相互通信/运行代码的方法)

标签: python printing cpython


【解决方案1】:

不幸的是,没有在所有平台上使用 Python 进行打印的标准方法。所以你需要编写自己的包装函数来打印。

你需要detect the OS你的程序正在运行,那么:

对于 Linux -

import subprocess
lpr =  subprocess.Popen("/usr/bin/lpr", stdin=subprocess.PIPE)
lpr.stdin.write(your_data_here)

对于 Windows:http://timgolden.me.uk/python/win32_how_do_i/print.html

更多资源:

Print PDF document with python's win32print module?

How do I print to the OS's default printer in Python 3 (cross platform)?

【讨论】:

  • 感谢您的回答!我将您的答案与@user3444876 的答案结合使用。
【解决方案2】:

要打印到网络上的任何打印机,您可以将 PJL/PCL 打印作业直接发送到端口 9100 上的网络打印机。

请查看下面的链接,这应该是一个好的开始:

http://frank.zinepal.com/printing-directly-to-a-network-printer

另外,如果有调用 Windows cmd 的方法,您可以使用 FTP put 在 9100 上打印您的页面。下面的链接应该为您提供详细信息,我已将这种方法用于 HP 打印机,但我相信它适用于其他打印机.

http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=bpj06165

【讨论】:

    【解决方案3】:

    这仅在 Windows 上测试过:

    您可以执行以下操作:

    import os
    
    os.startfile("C:/Users/TestFile.txt", "print")
    

    这将在其默认打开器中使用动词“打印”启动文件,它将打印到您的默认打印机。仅需要标准库附带的os 模块

    【讨论】:

    • 根据docs.python.org/2/library/os.html#os.startfile,这只适用于windows
    • 您知道有什么方法可以自定义打印以横向打印吗?
    • 感谢您的回答!我将您的答案与@AnujGupta 的答案结合使用。
    • Linux 或 Mac 选项使用相同的 OS 模块: import os os.system("lpr -P printer_name file_name.txt") 其中“printer_name”代表打印机名称,“file_name.txt”代表打印机名称。 txt" 是要打印的文件名。
    • 这适用于文本文件,但不适用于图像。我们如何使用这种方法打印 jpg 图像?
    【解决方案4】:

    你可以试试 wx 库。这是一个跨平台的 UI 库。在这里您可以找到打印教程: https://web.archive.org/web/20160619163747/http://wiki.wxpython.org/Printing

    【讨论】:

    • 这很有前途!我不再使用 python + 打印,但是如果打印可以证明可以与 wxpython 跨平台工作,我会接受这个答案。
    【解决方案5】:

    我发现这是最好的解决方案,至少在处理 Web 应用程序时是这样。想法是这样的:将 HTML 页面转换为 PDF 文档,然后通过gsprint 将其发送到打印机。

    尽管gsprint 不再处于开发阶段,但它确实非常非常好用。您可以在其他几个选项中选择打印机以及页面方向和大小。

    我使用 Chrome 的无头浏览器 Puppeteer 将网页转换为 PDF。但是您需要传入会话 cookie 来维护凭据。

    【讨论】:

    • 我会喜欢这个,但它不是跨平台的:(
    • 好吧,你可以在 Linux 中使用 CUPS 系统。 unix.stackexchange.com/questions/421341/…
    • 如果我没记错的话,如果你想在商业上使用它,你需要一个商业许可证,它不是免费的。如果你是一家大企业,我想这不是问题,但对于像我这样的小公司来说可能会很烦人。
    • @ShanerM13,我刚刚查了一下。它使用Aladdin Free Public License,这意味着它对于在内部使用它的小型企业基本上是免费的。
    猜你喜欢
    • 2017-06-02
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    相关资源
    最近更新 更多