Ciche drukowanie PDF w Pythonie

Próbuję wydrukować PDF w Pythonie, bez otwierania aplikacji PDF viewer (Adobe, Foxit itp.). Muszę również wiedzieć, kiedy drukowanie zostało zakończone (aby usunąć plik).

Tutaj znalazłem to implementacja :

import win32ui, dde, os.path, time
from win32api import FindExecutable
from os import spawnl, P_NOWAIT
...
pd = "C:\\temp\\test.pdf"
pdbits = os.path.split(pd)
readerexe = FindExecutable(pdbits[1],pdbits[0])

spawnl(P_NOWAIT,readerexe[1],"DUMMY") #I added "DUMMY" to avoid a weird error

time.sleep(2)

s = dde.CreateServer()
s.Create('')
c = dde.CreateConversation(s)
c.ConnectTo('acroview', 'control')

c.Exec('[FilePrintSilent("%s")]' % (pd,))

s.Destroy()

Ale wyrzuca ten wyjątek w linii ConnectTo:

dde.error: ConnectTo failed
Ktoś wie jak to rozwiązać? Czy ma inne rozwiązanie do cichego drukowania? Lub na liście można podać link do referencji dla ConnectTo? Można znaleźć w sieci nic o tym nie ma.

Praca z: Python 2.7, Windows 7, Acrobat Reader 10.0

Author: bluish, 2010-12-21

1 answers

Sugeruję zainstalowanie GSView i GSPrint i wysłanie powłoki do gsprint.exe, Aby wydrukować plik pdf.

p = subprocess.Popen([r"p:\ath\to\gsprint.exe", "test.pdf"], 
                     stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
print stdout
print stderr

Użyłem tego w przemysłowym rozwiązaniu do drukowania etykiet, działa świetnie.

Gdy program gsprint.exe zakończy działanie (tj. po wywołaniu communicate), możesz usunąć plik pdf.

 18
Author: codeape,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-21 11:52:53