我正在尝试使用win32api
将PDF文档输出到特定打印机。
win32api.ShellExecute(0, "print", filename, '/d:"%s"' % printername, ".", 0)
filename
是文件的完整路径名,printname
是通过查看win32api.EnumPrinters(6)
的输出获得的目标打印机的名称。即使
printername
是另一个目标的名称,该文件也会发送到Windows默认打印机(我期望通过特定打印机会将命名文件发送到该打印机,而不是默认文件)。关于我在做什么错的任何提示吗?有没有其他一般方式将PDF文件打印到特定打印机的方式?除此以外,是否有办法从程序中临时更改默认打印机?
最佳答案
MikeHunter的回答是一个不错的起点。
提出的解决方案是调用Acrobat或Acrobat Reader进行实际打印,而不是通过win32api
进行。就我的目的而言,这已经足够了:
from subprocess import call
acrobat = "C:\Program Files\Adobe\Acrobat 7.0\Acrobat.exe" ## Acrobat reader would also work, apparently
file = "C:\path\to\my\file.pdf"
printer = "Printer Name Goes Here"
call([acrobat, "/T", file, printer])
这将启动Acrobat,并将给定的文件打印到命名的打印机,即使它不是Windows的默认值。以这种方式处理的第一个打印作业需要几秒钟的时间(我假设这是Acrobat服务正在启动并缓存在内存中),随后的作业将立即打印。我没有对此进行任何类型的负载测试,但我认为此调用不算琐事,因此不要相信它会带来巨大的吞吐量。
关于Python的Win32api仅可打印到默认打印机,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12626918/