使用python的win32print模块打印PDF文档?

时间:2009-09-22 21:52:16

标签: python windows pdf winapi postscript

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

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

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

感谢您的帮助, 皮特

3 个答案:

答案 0 :(得分:9)

我最终使用Ghostscript来完成此任务。有一个命令行工具依赖于名为gsprint的Ghostscript。

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

以下是一个例子:

在命令行上:

gsprint -printer \\server\printer "test.pdf"
来自python的

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

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

然而,有一个缺点。该代码是根据GPL许可的,因此在商业软件中没有用处。

希望这有助于某人, 皮特

答案 1 :(得分:3)

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

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

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

我不会声称它很漂亮,但它有效,它让我可以保持其他代码不受影响。

答案 2 :(得分:0)

我不确定如何专门让win32print工作,但可能还有其他一些选择。 Reportlab如果在从Python创建PDF时经常提及。如果您已经投入了您的方法,可以使用PyXpypsg生成Postscript文件,然后将其提供给win32print就可以了。

相关问题