4

win32print モジュールを使用して PDF ドキュメントを印刷しようとしています。どうやら、このモジュールは PCL または raw テキストのみを受け入れることができます。あれは正しいですか?

もしそうなら、PDF ドキュメントを PCL に変換するモジュールはありますか?

私は ShellExecute を使用することを考えました。ただし、デフォルト プリンタへの印刷しか許可されないため、これはオプションではありません。さまざまなネットワーク上のサーバー上のさまざまなプリンターに印刷する必要があります。

助けてくれてありがとう、ピート

4

3 に答える 3

10

私はこのタスクを実行するためにGhostscriptを使用することになりました。gsprintと呼ばれるGhostscriptに依存するコマンドラインツールがあります。

この方法でPDFを印刷するためにAcrobatをインストールする必要はありません。これは非常に便利です。

次に例を示します。

コマンドラインで:

gsprint -printer \\server\printer "test.pdf"

Pythonから:

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

これらの例ではPATH変数に追加したので、実行可能ファイルを呼び出すときにパス全体を含める必要がないことに注意してください。

ただし、欠点が1つあります。コードはGPLの下でライセンスされているため、商用ソフトウェアではあまり役に立ちません。

これが誰か、ピートに役立つことを願っています

于 2009-09-23T09:37:55.430 に答える
3

私はすでに win32api.ShellExecute アプローチを使用しており、デフォルト以外のプリンターに印刷する必要がありました。私が解決できる最善の方法は、デフォルトのプリンターを一時的に変更することでした。そのため、印刷を行う直前に、現在の既定のプリンターを保存し、変更し、印刷後に元に戻します。何かのようなもの:

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

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

私はそれがきれいだと主張するつもりはありませんが、それは機能し、他のコードをそのままにしておくことができました.

于 2010-07-19T20:22:27.587 に答える
0

具体的に win32print を動作させる方法はわかりませんが、他にもいくつかのオプションがあるかもしれません。 Reportlabは、Python から PDF を作成するときによく言及されます。すでにアプローチに投資している場合は、おそらくPyXまたはpypsgを使用して Postscript ファイルを生成し、それを win32print にフィードするとうまくいくでしょう。

于 2009-09-22T23:44:50.357 に答える