Python 的 win32api 仅打印到默认打印机

Ina*_*thi 6 python printing pdf winapi shellexecute

我正在尝试将win32apiPDF 文档输出到特定打印机。

win32api.ShellExecute(0, "print", filename, '/d:"%s"' % printername, ".", 0)
Run Code Online (Sandbox Code Playgroud)

filename是文件的完整路径名,printname是我通过win32api.EnumPrinters(6).

即使printername是不同目标的名称,该文件也会发送到 Windows 默认打印机(我的期望是传递特定打印机会将命名文件发送到该打印机,而不是默认打印机)。

关于我做错了什么的任何提示?是否有不同的方式将 PDF 文件一般打印到特定打印机?除了所有其他方面,有没有办法从我的程序中临时更改默认打印机?

Ina*_*thi 5

迈克亨特的回答是一个不错的起点。

建议的解决方案是调用 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])
Run Code Online (Sandbox Code Playgroud)

这将启动 Acrobat,并将给定文件打印到指定的打印机,即使它不是 Windows 默认打印机。以这种方式处理的第一个打印作业需要几秒钟(我假设这是 Acrobat 服务正在启动并缓存在内存中),后续作业会立即打印。我尚未对此进行任何类型的负载测试,但我认为该调用并非微不足道,因此不要相信它具有巨大的吞吐量。