【问题标题】:How to change page of already open pdf in python如何在python中更改已经打开的pdf页面
【发布时间】:2014-01-19 02:41:26
【问题描述】:

我有标准的 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()

【问题讨论】:

    标签: python pdf acrobat


    【解决方案1】:

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

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

    【讨论】:

    • 请注意,OP 不会尝试从服务器打开 pdf。 OP 正在打开一个启动 Acrobat 实例的本地文件。
    【解决方案2】:

    您可以关闭 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】:

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

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

    【讨论】:

    • 确实,这取决于流程是如何创建的。我相信您的方法完全符合 OP 要求(+1!)但是,亲爱的未来读者,请注意不要滥用它(例如,通过每次生成一个进程来打开数百页),否则您很快就会用完资源.
    【解决方案4】:

    正确的集成需要远程控制 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 之前,我仍然会三思而后行。我很确定更多特定于微软的工具和语言将使您能够更快地解决这个问题。无论如何,您想做的事情是不可移植的。

    【讨论】:

      猜你喜欢
      • 2021-10-15
      • 2019-11-15
      • 2014-05-01
      • 2015-04-12
      • 2011-02-17
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      相关资源
      最近更新 更多