python – 打印PDF并在打印完成后删除文件

我有一个
Python应用程序,将重复执行.它将PDF保存为文件,然后将其打印出来.打印结束时删除文件.

我目前的解决方案(用于打印和删除部分)是这样的:

win32api.ShellExecute(0, "print", file_path, None,  ".",  0)
time.sleep(10)
os.remove(self.options.dest_name)

time.sleep(10)是一个技巧,可以让打印过程在删除文件之前运行.如果没有它,Acrobat Reader会打开(无论如何都会打开),并提示它无法找到该文件.这是因为文件删除已经发生.

问题是:

>如果没有这种不可靠的技巧,我该怎么办?最好的办法是为打印过程设置一个处理程序并获取有关打印状态的信息:我等待报告它已完成并删除该文件.
>如果Acrobat Reader无法打开会更好,但这不是一个大问题.

编辑:我尝试切换到福昕阅读器作为默认的PDF阅读器,现在它不打开我不想要的时候. 😉

其他可能的解决方案:
Cylically检查文件是否可用(未被其他进程使用)以及何时可用该文件将其删除.我怎么能在Python中做到这一点?

最佳答案 最后我找到了一个很好的解决方案,感谢
this answer(还有@Lennart在评论中提到它):

install Ghostscript

install GSview(包括gsprint.exe)

写这段代码:

file_path = "C:\\temp\\test.pdf"
p = subprocess.Popen(["C:\\Ghostgum\\gsview\\gsprint.exe", "-printer", printer_name, "-colour",  file_path],
        stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate() # waits for the gs process to end
os.remove(file_path) # now the file can be removed

没有Acrobat窗口打开,打印前没有删除文件…烦恼:安装GS.

另见:gsprint reference

点赞