Imprimer un document PDF avec le module win32print de python?

j'essaie d'imprimer un document PDF avec le module win32print. Apparemment, ce module ne peut accepter que du PCL ou du texte brut. Est-ce exact?

si oui, y a-t-il un module Disponible pour convertir un document PDF en PCL?

j'ai envisagé D'utiliser ShellExecute; cependant, ce n'est pas une option car elle ne permet l'impression que sur l'imprimante par défaut. J'ai besoin d'imprimer à une variété d'Imprimantes sur des serveurs à travers divers réseaux.

Merci pour votre aide, Pete

2
demandé sur slypete 2009-09-23 01:52:15

3 réponses

j'ai fini par utiliser Ghostscript pour accomplir cette tâche. Il existe un outil en ligne de commande qui s'appuie sur Ghostscript appelé gsprint .

vous n'avez même pas besoin D'Acrobat installé pour imprimer des PDF de cette façon qui est assez agréable.

voici un exemple:

sur la ligne de commande:

gsprint -printer \server\printer "test.pdf"

de python:

win32api.ShellExecute(0, 'open', 'gsprint.exe', '-printer "\\' + self.server + '\' + self.printer_name + '" ' + file, '.', 0)

notez que j'ai ajouté à ma variable de chemin dans ces exemples, donc je n'ai pas à inclure le chemin entier lors de l'appel de l'exécutable.

il y a cependant un inconvénient. Le code est sous licence GPL, donc il n'est pas très utile dans les logiciels commerciaux.

Espérons que cela aide quelqu'un, Pete

9
répondu slypete 2012-03-04 21:05:22

j'utilisais déjà le win32api.Approche shellexécute et nécessaire pour imprimer sur une imprimante sans défaut. La meilleure façon de procéder était de changer temporairement l'imprimante par défaut. Donc, juste avant que je ne l'imprimer, le magasin de l'imprimante par défaut, remplacez-le, puis retournez après l'impression. Quelque chose comme:

tempprinter = "\\server01\printer01"
currentprinter = win32print.GetDefaultPrinter()

win32print.SetDefaultPrinter(tempprinter)
win32api.ShellExecute(0, "print", filename, None,  ".",  0)
win32print.SetDefaultPrinter(currentprinter)

Je ne vais pas dire que c'est joli, mais ça a marché et ça m'a permis de laisser mon autre code intact.

3
répondu Craig Smith 2010-07-19 20:22:27

Je ne suis pas sûr comment obtenir spécifiquement win32print à travailler, mais il pourrait y avoir un couple d'autres options. Reportlab si souvent évoqué lors de la création de Pdf à partir de Python. Si vous êtes déjà investi dans votre approche, peut-être utiliser PyX ou pypsg pour générer les fichiers Postscript et ensuite alimenter cela dans win32print fonctionnerait.

0
répondu John Paulett 2009-09-22 23:44:50