LoginSignup
brian67
@brian67

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

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

1Answer

Comments

  1. @brian67

    Questioner

    ありがとうございます。やりたいことはとりあえずできました。
    Win32APIでトレイを変更するのは難しいorできないということなのでしょうか?
    なかなか情報が見つかりませんでした。

  2. ↓これによると、ローカルプリンタであれば「できる」ようです(試してはいません)
    (ネットワークプリンターに印刷する場合は、ドライバーをダウンロードしてローカルプリンターとして追加する)

  3. @brian67

    Questioner

    @nak435
    こちらは試してみましたがだめでした。。。
    いろいろと探して再度トライしてみたいと思います。
    解決案のご提供ありがとうございました!

Your answer might help someone💌