我正在尝试使用win32print模块打印PDF文档。显然这个模块只能接受PCL或原始文本。那是对的吗?
如果有,是否有可用于将PDF文档转换为PCL的模块?
我打算使用ShellExecute;但是,这不是一个选项,因为它只允许打印到默认打印机。我需要在各种网络上的服务器上打印各种打印机。
感谢您的帮助, 皮特
答案 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)