Win32printを使ってトレイ2を選択する方法
解決したいこと
pythonでPDFの印刷をしています。トレイがデフォルトではトレイ1なのでそれをトレイ2に変更したいのですが、できないのでこちらに質問させていただきました。
該当するソースコード
import os
import platform
import subprocess
import win32print
def print_pdf(pdf_path, printer_name=None):
if not os.path.exists(pdf_path):
print(f"指定されたパスのPDFファイル '{pdf_path}' が見つかりません。")
return
if platform.system() == 'Windows':
if not printer_name:
printer_name = win32print.GetDefaultPrinter()
acrobat_path = r'C:\Program Files\Adobe\Acrobat DC\Acrobat\Acrobat.exe'
if os.path.exists(acrobat_path):
subprocess.Popen([acrobat_path, '/t', pdf_path, printer_name, '/h', '/s', '/t', '/m', 'conf2'])
print("片面印刷、トレイ2に変更しました")
else:
print("Adobe Acrobat Readerがインストールされていません。")
elif platform.system() == 'Darwin': # macOS
if not printer_name:
subprocess.run(['lp', pdf_path])
else:
subprocess.run(['lp', '-d', printer_name, pdf_path])
else:
print("This function is not supported on this operating system.")
# ローカルプリンターのリストを取得し、コマンドプロンプトに出力する
printers = win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL, None, 1)
print("Available Printers:")
for printer in printers:
print(printer[2])
# プリンターのデフォルトアクセス権限を指定
PRINTER_DEFAULTS = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS}
# プリンターを開き、ハンドルを取得
pHandle = win32print.OpenPrinter('KONICA MINOLTA C364SeriesPCL', PRINTER_DEFAULTS)
# プリンターのプロパティを取得
properties = win32print.GetPrinter(pHandle, 2)
# デフォルトのトレイを指定
tray_two = 2
# DevModeを取得し、トレイを設定
pDevModeObj = properties["pDevMode"]
pDevModeObj.DefaultSource = tray_two
# プロパティを更新
properties["pDevMode"] = pDevModeObj
# 更新したプロパティをプリンターに適用
win32print.SetPrinter(pHandle, 2, properties, 0)
# PDFファイルのパスとプリンター名を指定して印刷
pdf_path = r'\\Ts3220d3e4\buhaat\maruei_pdf\KBC20240510030009.pdf'
printer_name = "KONICA MINOLTA C364SeriesPCL" # 使用するプリンター名
print_pdf(pdf_path, printer_name)
このプログラムを実行すると印刷されるものの、トレイ1の用紙で印刷されてしまいます。Win32printのドキュメント等も確認しましたが、トレイ番号を変更するような内容のものを自分では見つけられませんでした。
0 likes