我知道之前已经问过这个问题,但没有明确答案。
如何以编程方式更改打印机托盘?
我正在尝试使用python批量打印一些PDF。我需要从不同的托盘打印不同的页面。打印机是理光2232C。有没有办法通过和Acrobat Reader命令行参数?我能够使用Win32 api找出哪个bin对应哪个binnames,但这就是它。任何建议/快捷方式/等?
答案 0 :(得分:6)
好的,我想出来了。答案是:
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
使用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()
完成
答案 1 :(得分:1)
没有简单的方法可以做到这一点,因为您表示要从pdf中选择特定页面并使用Acrobat Reader将它们打印到特定的箱子
示例:在信头箱1上打印第1页,在库存箱2上打印第2页
Acrobat Reader仅允许从命令行打印整个文档:
你可以改变免费软件Ghostscript并做你想做的事。
或这个商业产品应该做的工作。 PDFPrint
有关详细信息,请参阅第24页的Acrobat Reader developer FAQ
AcroRd32.exe / t路径“printername”“drivername”“portname” - 启动Adobe Reader并打印文件,同时禁止“打印”对话框。必须完全指定路径。
/ t选项的四个参数计算为path,printername,drivername和portname(所有字符串)。
printername - 您的打印机名称。
drivername - 您的打印机驱动程序名称,与打印机属性中显示的名称相同。
portname - 打印机的端口。 portname不能包含 - 打印机驱动程序名称,因为它出现在打印机的属性中。
portname - 打印机的端口。 portname不能包含
答案 2 :(得分:1)
使用普通PDF无法实现这一点,因为您为任何特定的纸盒和纸盒组合创建了新的打印作业(并非所有打印机都允许您这样做,Xerox 4x和DP系列允许您使用做这些事情。)
我最好的选择是使用PostScript:将PDF转换为PostScript,您可以访问各个页面,然后提取所需的页面,并为每个页面(或多个页面)创建新的打印作业(例如,使用Windows程序) lpr
)。为了简化任务,我将为您必须打印的bin和tray的任意组合创建打印队列,然后将这些队列用作打印机。
答案 3 :(得分:0)
您已拥有理光机器,只需获得理光打印和分享软件,您就可以在那里定义您想要使用的托盘!
这些视频向您展示如何设置理光打印和分享软件: