【问题标题】:Switching Printer Trays切换打印机托盘
【发布时间】:2009-02-13 06:32:56
【问题描述】:

我知道以前有人问过这个问题,但没有明确的答案。

如何以编程方式更改打印机托盘?

我正在尝试使用 python 批量打印一些 PDF。我需要从不同的纸盘打印不同的页面。打印机是理光2232C。有没有办法通过 Acrobat Reader 命令行参数来做到这一点?我可以使用 Win32 api 找出哪些 bin 对应于哪些 binnames,但仅此而已。有什么建议/捷径/等等吗?

【问题讨论】:

    标签: python winapi


    【解决方案1】:

    好的,我想通了。答案是:

    1.您需要一台本地打印机(如果您需要打印到网络打印机,请下载驱动程序并将其添加为本地打印机)
    2.使用win32print获取和设置默认打印机
    3.同样使用win32print,使用如下代码:

    import win32print
    PRINTER_DEFAULTS = {"DesiredAccess":win32print.PRINTER_ALL_ACCESS}
    pHandle = win32print.OpenPrinter('RICOH-LOCAL', PRINTER_DEFAULTS)
    properties = win32print.GetPrinter(pHandle, 2) #get the properties
    pDevModeObj = properties["pDevMode"] #get the devmode
    automaticTray = 7
    tray_one = 1
    tray_two = 3
    tray_three = 2
    printer_tray = []
    pDevModeObj.DefaultSource = tray_three #set the tray
    properties["pDevMode"]=pDevModeObj #write the devmode back to properties
    win32print.SetPrinter(pHandle,2,properties,0) #save the properties to the printer
    
    1. 就是这样,托盘已更换
    2. 使用 Internet Explorer 完成打印(来自 Graham King 的博客)

      from win32com import client
          import time
          ie = client.Dispatch("InternetExplorer.Application")
          def printPDFDocument(filename):
              ie.Navigate(filename)
              if ie.Busy:
                  time.sleep(1)
              ie.Document.printAll()
          ie.Quit()
      

    完成

    【讨论】:

      【解决方案2】:

      使用纯 PDF 无法做到这一点,因为您已经为任何特定的纸盒和托盘组合创建了新的打印作业(并非所有打印机都允许您这样做,Xerox 4x 和 DP 系列允许您做这样的事情)。

      我最好的选择是使用 PostScript:将 PDF 转换为 PostScript,您可以在其中访问各个页面,然后提取您需要的页面,并为每个这样的页面(或页面)创建新的打印作业(例如,使用 Windows 程序lpr)。为了简化任务,我会为您必须打印到的纸盒和托盘的任意组合创建打印队列,然后将这些队列用作打印机。

      【讨论】:

        【解决方案3】:

        没有简单的方法可以做到这一点,因为您表示要从 pdf 中选择特定页面并使用 Acrobat Reader 将它们打印到特定的垃圾箱

        示例:在信头纸箱 1 上打印第 1 页,在纸箱 2 上打印第 2 页

        Acrobat Reader 只允许从命令行打印整个文档:

        您可以更改免费软件 Ghostscript 并做您想做的事。

        或者这个商业产品应该可以完成这项工作。 PDFPrint


        有关详细信息,请参阅第 24 页的 Acrobat Reader developer FAQ

        AcroRd32.exe /t path "printername" "drivername" "portname" — 启动 Adob​​e Reader 并打印文件,同时取消打印对话框。必须完整指定路径。

        /t 选项的四个参数计算为路径、打印机名、驱动程序名和端口名(所有字符串)。

        printername — 您的打印机的名称。

        drivername — 您的打印机驱动程序的名称,它显示在您的打印机属性中。

        portname — 打印机的端口。 portname 不能包含 - 您的打印机驱动程序的名称,它显示在您的打印机属性中。

        portname — 打印机的端口。端口名不能包含

        【讨论】:

          【解决方案4】:

          您已经拥有一台 Ricoh 机器,只需获取 Ricoh Print&Share 软件,您就可以在其中定义要使用的托盘!

          这些视频向您展示了如何设置 Ricoh Print&Share 软件:

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-18
            • 1970-01-01
            • 2011-10-28
            • 2023-03-27
            相关资源
            最近更新 更多