2009-02-13 18 views
5

Sé que esta pregunta se ha hecho antes, pero no hubo una respuesta clara.Cambio de las bandejas de la impresora

¿Cómo cambio la bandeja de la impresora de forma programática?

Estoy tratando de usar python para imprimir en lotes algunos archivos PDF. Necesito imprimir diferentes páginas de diferentes bandejas. La impresora es una Ricoh 2232C. ¿Hay alguna forma de hacerlo y el parámetro de la línea de comandos de Acrobat Reader? Puedo usar la API de Win32 para averiguar qué compartimientos corresponden a qué binnames, pero eso es todo. ¿Algún consejo/atajos/etc?

Respuesta

5

Ok, me di cuenta de esto. La respuesta es:

1.necesita una impresora local (si necesita imprimir en una impresora de red, descargue los controladores y agréguela como una impresora local)
2. use win32print para obtener y configurar la impresora predeterminada
3. también use win32print, use lo siguiente código:

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. eso es todo, la bandeja se ha cambiado
  2. la impresión se realiza utilizando Internet explorer (desde el blog de 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() 
    

Hecho

1

No hay manera fácil de hacer esto, ya que usted indica que desea elegir las páginas específicas del PDF e imprimirlos a contenedores específicos utilizando Acrobat Reader

Ejemplo: Imprimir la página 1 en Salida cabecera 1, página 2 en el compartimiento Stock 2

Acrobat Reader sólo permite la impresión de todo el documento desde la línea de comandos:

se podría alterar el software gratuito Ghostscript y hacer lo que quiera.

o este producto comercial debería hacer el trabajo. PDFPrint


Ver el Acrobat Reader developer FAQ en la página 24 para más detalles

AcroRd32.exe/t de ruta "nombredeimpresora" "drivername" "nombre de puerto" - Iniciar Adobe Reader e imprimir un archivo mientras se suprime el cuadro de diálogo Imprimir. La ruta debe estar completamente especificada.

Los cuatro parámetros de la opción/t evalúan la ruta, el nombre de la impresora, el nombre del controlador y el nombre del puerto (todas las cadenas).

printername - El nombre de su impresora.

nombre del controlador - El nombre del controlador de la impresora, tal como aparece en las propiedades de la impresora.

nombre de puerto - El puerto de la impresora. portname no puede contener: el nombre de su controlador de impresora, tal como aparece en las propiedades de su impresora.

nombre de puerto - El puerto de la impresora. nombre de puerto no puede contener

1

eso no es posible el uso de llanura PDF, ya que tienes crear nuevo empleo de impresión para cualquier bin particular y combinación de bandeja (y no todas las impresoras que le permiten hacer eso, Xerox 4x y la Serie DP le permite hacer tales cosas).

Mi mejor opción sería hacer malabarismos con PostScript: convertir PDF a PostScript, donde tiene acceso a páginas individuales, luego extraer las páginas que necesita y para cada página (o páginas) crear un nuevo trabajo de impresión (por ejemplo, usar Windows programa lpr). Para facilitar la tarea, crearía la cola de impresión para cualquier combinación de bandeja y bandeja en la que deba imprimir, y luego usaré estas colas como impresoras.

Cuestiones relacionadas