4

我正在尝试使用 win32print 模块打印 PDF 文档。显然这个模块只能接受 PCL 或原始文本。那是对的吗?

如果是这样,是否有可用于将 PDF 文档转换为 PCL 的模块?

我考虑使用 ShellExecute;但是,这不是一个选项,因为它只允许打印到默认打印机。我需要通过各种网络打印到服务器上的各种打印机。

谢谢你的帮助,皮特

4

3 回答 3

10

我最终使用Ghostscript来完成这项任务。有一个命令行工具依赖于 Ghostscript,称为gsprint

您甚至不需要安装 Acrobat 就可以以这种非常好的方式打印 PDF。

这是一个例子:

在命令行上:

gsprint -printer \\server\printer "test.pdf"

来自蟒蛇:

win32api.ShellExecute(0, 'open', 'gsprint.exe', '-printer "\\\\' + self.server + '\\' + self.printer_name + '" ' + file, '.', 0)

请注意,我已在这些示例中添加到我的 PATH 变量中,因此在调用可执行文件时我不必包含整个路径。

然而,有一个缺点。该代码在 GPL 下获得许可,因此在商业软件中不是很有用。

希望这可以帮助某人,皮特

于 2009-09-23T09:37:55.430 回答
3

我已经在使用 win32api.ShellExecute 方法,需要打印到非默认打印机。我能解决的最好方法是临时更改默认打印机。因此,在我进行打印之前,我会存储当前默认打印机的内容,对其进行更改,然后在打印后将其重新设置。就像是:

tempprinter = "\\\\server01\\printer01"
currentprinter = win32print.GetDefaultPrinter()

win32print.SetDefaultPrinter(tempprinter)
win32api.ShellExecute(0, "print", filename, None,  ".",  0)
win32print.SetDefaultPrinter(currentprinter)

我不会声称它很漂亮,但它确实有效,并且它允许我保持我的其他代码不变。

于 2010-07-19T20:22:27.587 回答
0

我不确定如何专门让 win32print 工作,但可能还有其他几个选项。 从 Python 创建 PDF 时经常提到Reportlab 。如果您已经对您的方法进行了投资,也许使用PyXpypsg生成 Postscript 文件,然后将其输入 win32print 将起作用。

于 2009-09-22T23:44:50.357 回答