web-dev-qa-db-ja.com

PythonサイレントプリントPDF特定のプリンタに

PDFドキュメントがあり、python app。

私は ここで(Print PDF pythonのwin32printモジュールを含むドキュメント?) で解決策を試しましたが、実際のバージョンであるGhostscript 9.15をインストールすると、_gsprint.exe_

私が使用している方法は、コマンドos.startfile('PDFfile.pdf', "print")を使用する方法ですが、デフォルトのビューア(私はAdobe Readerです)を開き、印刷後も開いたまま、os.system("TASKKILL /F /IM AcroRD32.exe") killsでプロセスを強制終了しようとしています他の開いているウィンドウと私はそれを望んでいません。

次のコマンドでも印刷されますが、Adobe Readerも開くことができます

_currentprinter = win32print.GetDefaultPrinter()
win32api.ShellExecute(0, "print", 'PDFfile.pdf', '/d:"%s"' % currentprinter, ".", 0)
_

私も この答え を見ましたが、_gsprint.exe_をもう一度使用することをお勧めします

誰かが_gsprint.exe_ファイルまたは他の解決策を持っていますか?.

注:別のデフォルトのプログラムを使用して開いたときPDF ChromeまたはWindowsリーダーの場合、上記のコマンド'(31, 'ShellExecute', 'A device attached to the system is not functioning.')'または_[Error 1155] No application is associated with the specified file for this operation: 'PDFfile.pdf'_をstartfileコマンドで実行すると、常に例外が発生します。

13

最後に、何時間も何時間も適切なファイルを検索した後、私は自分の問題に対する答えを見つけました。

[〜#〜]こちら[〜#〜] からGSPRINTをダウンロードできます

Ghostscript GPLは [〜#〜]こちら[〜#〜] からダウンロードできます。

PC(Windows)でこの抽出されたファイルを使用すると、このコマンドでPDFを印刷できます。

GHOSTSCRIPT_PATH = "C:\\path\\to\\GHOSTSCRIPT\\bin\\gswin32.exe"
GSPRINT_PATH = "C:\\path\\to\\GSPRINT\\gsprint.exe"

# YOU CAN PUT HERE THE NAME OF YOUR SPECIFIC PRINTER INSTEAD OF DEFAULT
currentprinter = win32print.GetDefaultPrinter()

win32api.ShellExecute(0, 'open', GSPRINT_PATH, '-ghostscript "'+GHOSTSCRIPT_PATH+'" -printer "'+currentprinter+'" "PDFFile.pdf"', '.', 0)

GhostScriptは公式ページにもあります [〜#〜]こちら[〜#〜]

64ビット用のgsprint.exeを見つけました [〜#〜]こちら[〜#〜]

これがお役に立てば幸いです。

15

pythonスクリプトなしでgsprintなし、win32apiなしで)と同じディレクトリにPDFを静かに印刷する方法を次に示します。これにより、width /高さなど.

import os
import subprocess
import sys

if sys.platform == 'win32':
    args = '"C:\\\\Program Files\\\\gs\\\\gs9.23\\\\bin\\\\gswin64c" ' \
           '-sDEVICE=mswinpr2 ' \
           '-dBATCH ' \
           '-dNOPAUSE ' \
           '-dFitPage ' \
           '-sOutputFile="%printer%myPrinterName" '
    ghostscript = args + os.path.join(os.getcwd(), 'myFile.pdf').replace('\\', '\\\\')
    subprocess.call(ghostscript, Shell=True)

GhostScriptの32ビットバージョンを使用している場合は、gswin32cを使用します。

1
bdoubleu

次のコードは現在のタスクをブロックします

for i in range(10):
    currentprinter = win32print.GetDefaultPrinter()
    win32api.ShellExecute(0, "print", 'PDFfile.pdf', '/d:"%s"' % currentprinter, ".", 0)

ヘルプの印刷後にリーダーを強制終了しても、現在のタスクはブロックされません

os.system("TASKKILL /F /IM AcroRD32.exe") 

ただし、他のPDFファイルも閉じます。

Gsprintを使用できない場合は、acrobatコマンドを使用します

import win32print
import subprocess
import time
pdf_file  = 'D:\d1\d1.pdf'
acrobat = 'C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe'
name = win32print.GetDefaultPrinter()
cmd = '"{}" /n /h /s /o  /t "{}" "{}"'.format(acrobat, pdf_file, name)
for i in range(10)):
    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

現在のタスクをブロックしたり、他のPDFファイルを閉じたりすることはありません。

0
Jisson

特定のページやその他のパラメーターを印刷する場合は、gsprintのパラメーターで次のように指定する必要があります。

import win32print
import win32api

GHOSTSCRIPT_PATH = "C:\\path\\to\\GHOSTSCRIPT\\bin\\gswin32.exe"
GSPRINT_PATH = "C:\\path\\to\\GSPRINT\\gsprint.exe"

params = '-ghostscript "'+ GHOSTSCRIPT_PATH  +'" -printer "'+currentprinter+'" -from 1 -to 3 -landscape -copies 1 "1.pdf "'
print(params)

win32api.ShellExecute(0, 'open', GSPRINT_PATH, params, '.',0)
0
Mohammad