Python中PDF的静默打印

14
我想使用Python打印PDF文件,而不需要打开PDF查看器应用程序(如Adobe,Foxit等)。我还需要知道何时打印完成(以便删除文件)。
这里,我找到了这个实现
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()

但是它在ConnectTo行抛出了这个异常:

dde.error: ConnectTo failed

有人知道如何解决吗?或者有不同的方案可以实现静默打印吗?或者至少能提供一个关于ConnectTo参考链接吗?在网上找不到任何相关信息。

使用环境:Python 2.7,Windows 7,Acrobat Reader 10.0

1个回答

21

我建议您安装GSViewGSPrint,并使用外壳调用gsprint.exe打印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

我在工业级标签打印解决方案中使用过这个,效果很好。

gsprint.exe程序退出(即在调用communicate后),您可以删除PDF文件。


1
太好了!我解决了这个困扰我数天的问题。我要补充说明需要安装GhostScript(“后端”,可从http://pages.cs.wisc.edu/~ghost/下载)和GSView(“前端”,包括GSView和GSPrint,可从codeape的第一个链接下载)。 - bluish
1
是的 - Ghostscript 工具链是这里的最佳选择。值得注意的是,现今几乎所有 Linux 和其他 Unix 的打印解决方案都会以某种方式使用 GS 程序。 - jsbueno
谢谢。我使用ESC序列将我的文本文件打印到PCL打印机上,然后将其转换为PDF格式,并使用Ghostscript静默地打印到非PCL打印机上 :) - Hrvoje T
我可以在商业软件中使用gsprint吗? - Jisson
gsprint.exe的选项在安装文件中的gsprint.html文档中有详细说明。我相信双面打印的选项分别为“-duplex_vertical”和“-duplex_horizontal”。 - codeape
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接