2009-02-13 8 views
5

Je sais que cette question a été posée, mais il n'y avait pas de réponse claire.Commutation Plateaux de l'imprimante

Comment puis-je modifier le bac de l'imprimante programme?

Je tente d'utiliser python pour imprimer des lots des fichiers PDF. J'ai besoin d'imprimer différentes pages à partir de différents plateaux. L'imprimante est un Ricoh 2232C. Existe-t-il un moyen de le faire et le paramètre de ligne de commande Acrobat Reader? Je suis capable d'utiliser l'API Win32 pour savoir quels bacs correspondent à quels binnames, mais c'est à peu près tout. Des conseils/raccourcis/etc?

Répondre

5

Ok, j'ai compris cela. La réponse est:

1.vous avez besoin d'une imprimante locale (si vous devez imprimer sur une imprimante réseau, téléchargez les pilotes et ajoutez-les en tant qu'imprimante locale)
2. utilisez win32print pour obtenir et définir l'imprimante par défaut
3. également en utilisant win32print, utilisez les éléments suivants Code:

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. qu'il est, le plateau a été modifié
  2. impression

    est effectuée en utilisant Internet explorer (du 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() 
    

Fait

1

Il n'y a pas moyen facile de le faire, puisque vous indiquez que vous voulez choisir des pages spécifiques du pdf et de les imprimer sur des bacs spécifiques à l'aide d'Acrobat Reader

Exemple: Imprimer la page 1 sur bac à en-tête 1, page 2 en stock bin 2

Acrobat Reader ne permet l'impression du document entier de la ligne de commande:

vous pouvez modifier le logiciel gratuit Ghostscript et faire ce que vous voulez.

ou ce produit commercial devrait faire le travail. PDFPrint


Voir Acrobat Reader developer FAQ à la page 24 pour plus de détails

chemin AcroRd32.exe/t "printername" "drivername" "nomport" - Démarrez Adobe Reader et imprimer un fichier tout en supprimant la boîte de dialogue Imprimer. Le chemin doit être entièrement spécifié.

Les quatre paramètres de l'option/t évaluent le chemin, le nom d'utilisateur, le nom du pilote et le nom du port (toutes les chaînes).

printername - Le nom de votre imprimante.

drivername - Le nom de votre pilote d'imprimante, tel qu'il apparaît dans les propriétés de votre imprimante.

portname - Le port de l'imprimante. nom_port ne peut pas contenir - Le nom de votre pilote d'imprimante, tel qu'il apparaît dans les propriétés de votre imprimante.

nomport - Le port de l'imprimante. nomport ne peut pas contenir

1

Ce n'est pas possible en utilisant PDF ordinaire, que vous avez créer de nouvelles travail d'impression pour tout bac particulier et la combinaison du plateau (et non toutes les imprimantes vous permettent de le faire, Xerox 4x et série DP vous permet de faire de telles choses). Mon meilleur pari serait de jongler avec PostScript: convertir PDF en PostScript, où vous avez accès à des pages individuelles, puis extraire les pages dont vous avez besoin et pour chaque page (ou pages) créer un nouveau travail d'impression (par exemple en utilisant Windows programme lpr). Pour faciliter la tâche, je créer une file d'attente d'impression pour toute combinaison de bac et de bacs à imprimer, puis utiliser ces files d'attente comme imprimantes.

Questions connexes