如何在python中更改已打开的pdf页面

时间:2014-01-01 14:25:24

标签: python pdf acrobat

我有标准的pdf链接,用于打开特定ppage的文件,但如果文件已经打开,页面不会更改,脚本只会打开已经打开的文件,如何在打开的文件中导航文件?或者作为解决方法,注意文件是打开的,关闭它,然后重新打开它?

path_to_pdf = os.path.abspath(openfile)

path_to_acrobat = os.path.abspath('C:\Program Files (x86)\Adobe\Acrobat 10.0\Acrobat\Acrobat.exe')

process = subprocess.Popen([path_to_acrobat, '/A', 'page=' + page, path_to_pdf], shell=False, stdout=subprocess.PIPE)
process.wait()

4 个答案:

答案 0 :(得分:2)

有时杀死其他进程并不礼貌 - 特别是如果你的程序不是产生它的程序。在这种情况下,您可能更愿意简单地启动另一个acrobat进程。要在Windows上执行此操作,use the /n option

process = subprocess.Popen([path_to_acrobat, '/n', '/A', 'page=' + page, path_to_pdf], shell=False, stdout=subprocess.PIPE)

答案 1 :(得分:0)

PDF是静态打印内容,所以简而言之,你不能。您必须重新生成pdf或处理接收方的传入请求。

可以使用链接中的密钥打印pdf,并根据该密钥从登录页面重定向。

答案 2 :(得分:0)

您可以关闭Acrobat实例(您可以使用these approaches找到该过程)并在特定页面重新打开该文件

import psutils

path_to_pdf = os.path.abspath(openfile)
path_to_acrobat = os.path.abspath('C:\Program Files (x86)\Adobe\Acrobat 10.0\Acrobat\Acrobat.exe')

procs = [p for p in psutil.get_process_list() if p.name == 'Acrobat']  # you may be more selective here (e.g. per-user filter)
for proc in procs:
    proc.terminate()
gone, alive = wait_procs(procs, 3)
for proc in alive:
    proc.kill()  # using brute force here

process = subprocess.Popen([path_to_acrobat, '/A', 'page=' + page, path_to_pdf], shell=False, stdout=subprocess.PIPE)
process.wait()

答案 3 :(得分:0)

正确整合需要远程控制acrobat - 这里记录了:http://livedocs.adobe.com/acrobat_sdk/10/Acrobat10_HTMLHelp/wwhelp/wwhimpl/js/html/wwhelp.htm?&accessible=true

OLE自动化可以在python中完成,在SO上甚至已经有了答案:How do I script an OLE component using Python?

但是肯定这不是一个快速的黑客,你将不得不花一些时间学习特定于Windows的自动化机制和acrobat的API。但恕我直言,这是最合适的方式。虽然我是一个伟大的python支持者,但在这种情况下使用python之前我仍会三思而后行。我非常确定更多特定于Microsoft的工具和语言将允许您更快地解决此问题。无论如何,你想做的事情都不是便携式的。