プリンタの印刷機能はOSにより異なりそうなので、それぞれのOSに依存した自動化方法で調べたほうが良さそうです。質問に書かれたファイルパスの書き方がWindowsだったのでPowershellでの自動化方法についてググったら次の記事が見つかりました(検証はしていません)。 Pythonから実行したい場合は、外部コマンドの実行方法を調べてください。
PythonでダウンロードしたPDFファイルを印刷したい。
実現したいこと:
C:\Users\username\ダウンロードにダウンロードしたzipフォルダ内のPDFファイルを印刷したいです。
zipフォルダには数個のPDFファイル(ファイル名A, B, C)の3つがあり、Aのみを印刷したい。
試したこと:
下記の環境下で、とあるHPからzipファイルをC:\Users\username\ダウンロードにダウンロードすることはできた。
・python3
・selenium
・Chrome webdrivter
教えてほしいこと:
zipファルダをダウンロードすることはできたが、pythonでのpdf印刷方法がわかりませんので教えていただきたいです。
3Answer
Comments
@takaekokaz
Questionerありがとうございます。
osはwindow10です。
記載のプログラムは、以下をWindowsのコマンドプロンプトで入力して実行するのと同じことをpythonの「subprocess.Popen」を使って実行するものです。
(sample.pdfファイルが「Microsoft Print to PDF」プリンタで印刷されます)
"C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" /t /n "sample.pdf" "Microsoft Print to PDF"
実際にコマンドプロンプトから実行してみるとわかりますが、印刷後にAdobeReaderが終了しません。終了させるようにするために Dispatch('AcroExch.Document') をいれています。
windows上のadobe readerを使って印刷するための情報は、以下URL @hrs_sano645さまの記事が参考になりませんでしょうか。
windows10であればpdfファイルはAdobeReaderなどのPDFネイティブアプリケーションを使って印刷するのがよいと考えます。
下記は、zipからpdfファイルを展開されている前提でプリンタを指定して出力するサンプルです。(サンプルはpython3.7)
def PrintPdf(printer_name, file_name):
acro_path = r'C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe'
acro_name = os.path.basename(acro_path)
# ~必要に応じてtaskチェックとprocessのkillを入れる~
# OLEオブジェクト
proc_pdf = Dispatch('AcroExch.Document')
# AdobeReader 起動
cmd = f'"{acro_path}" /t /n "{file_name}" "{printer_name}"'
proc = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = proc.communicate()
exit_code = proc.wait()
以下を参考にさせていただきました。
https://qiita.com/takiru/items/f38e94e666e802fa9a25
Comments
@takaekokaz
Questioner@otucurryさま
ありがとうございます。
まだまだ浅学な私にとっては難しいです。
osによってプログラムの書き方が違うせいか、pythonでpdfを印刷する
ためのプログラムを作成する順序や学習方法が多岐にわたるせいでしょうか?
pythonでwindows上のadobe readerを使って印刷するプログラムを順序だてて
解説していただけるような情報などございましたら教えていただければ幸いです。