6

win32apiPDFドキュメントを特定のプリンターに出力するために使用しようとしています。

win32api.ShellExecute(0, "print", filename, '/d:"%s"' % printername, ".", 0)

filenameはファイルへのフル パス名printnameで、 は の出力を調べて取得したターゲット プリンターの名前ですwin32api.EnumPrinters(6)

ファイルはprintername、別のターゲットの名前であっても、Windows の既定のプリンターに送信されます (特定のプリンターを渡すと、既定ではなく、指定されたファイルがそのプリンターに送信されると予想されます)。

私が間違っていることについてのヒントはありますか?PDF ファイルを特定のプリンターで一般的に印刷する別の方法はありますか? 他のすべてを除いて、プログラムからデフォルトのプリンターを一時的に変更する方法はありますか?

4

3 に答える 3

4

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 サービスが開始されてメモリにキャッシュされると想定しています)、後続のジョブは即座に印刷されます。これについて負荷テストを行ったことはありませんが、呼び出しは些細なことではないと想定しているため、大量のスループットを信頼しないでください。

于 2012-09-28T14:29:55.617 に答える