从Python打印到标准打印机?

49

有没有一种相对标准且跨平台的方法,可以将文本(甚至是PS/PDF)打印到系统定义的打印机上?

假设这里使用的是CPython,而不是像使用Java打印API这样聪明的东西。


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

58
这只适用于Windows操作系统。
您可以进行以下操作:
import os

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

这将使用默认的打开器启动文件,并使用动词“print”将内容打印到默认打印机。只需要使用标准库中自带的os模块。

1
根据 https://docs.python.org/2/library/os.html#os.startfile ,这仅适用于Windows操作系统。 - Buzz
你知道有什么方法可以自定义打印以横向模式打印吗? - Alex F
谢谢您的回答!我将您的答案与@AnujGupta的答案结合使用。 - TheTechRobo the Nerd
1
Linux或Mac选项使用相同的操作系统模块:import os os.system("lpr -P printer_name file_name.txt")其中,“printer_name”表示打印机的名称,“file_name.txt”是将要打印的文件的名称。 - xPTM1219
这对于文本文件可以正常工作,但是无法处理图像。我们如何使用此方法打印jpg图像? - knowledge_seeker

38

很遗憾,Python没有一种适用于所有平台的标准打印方式。因此,您需要编写自己的包装函数来打印。

您需要检测程序运行的操作系统,然后:

对于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

更多资源:

如何使用Python的win32print模块打印PDF文档?

如何在Python 3中跨平台打印到操作系统的默认打印机?


1
谢谢你的回答!我将你的回答与@user3444876的回答结合使用。 - TheTechRobo the Nerd

9

要打印网络上的任何打印机,您可以直接将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


5

这非常有前途!我不再使用Python +打印,但如果打印在wxpython上跨平台可行,我会接受这个答案。 - Prof. Falken
我向 @Admdebian 道歉,我知道您在7年前发布了这篇文章,但今天我不小心给您的回答点了个踩(手指太粗)。如果您进行编辑,我会撤销我的踩。 - nordmanden

0
我认为这是一种更优秀的解决方案,至少在处理Web应用程序时是如此。其思路是:将HTML页面转换为PDF文档,并通过gsprint将其发送到打印机。
尽管gsprint已经不再开发,但它非常好用。您可以选择打印机、页面方向和大小等多种选项。
我使用Puppeteer将Web页面转换为PDF,它是Chrome的无头浏览器。但您需要传递会话Cookie以维护凭据。

我很喜欢这个,但它不是跨平台的 :( - TheTechRobo the Nerd
1
你可以在Linux中使用CUPS系统。https://unix.stackexchange.com/questions/421341/print-pdf-from-command-line-in-linux-similar-to-enscript-2lr - Bobort
如果我没记错的话,如果你想商业使用这个,你需要一个商业许可证,这不是免费的。我想对于大公司来说不是问题,但对于像我们这样的小公司可能会很烦人。 - Shmack
@ShanerM13,我刚查了一下。它使用的是Aladdin免费公共许可证,这意味着对于在内部使用它的小型企业来说基本上是免费的。 - Bobort

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接