java - 如何跳转到本地pdf中的页面?

标签 java pdf acrobat

我的问题类似于 "How can I programmaticly open a pdf at a certain point?" ,但 PDF 是本地的,而不是在 Web 服务器上。

我需要一种方法来跳转到用户计算机上的 PDF 中的给定页面,该页面可以跨版本的 Acrobat(或使用替代的 PDF 查看器,如 Foxit Reader)。 PDF 将从 Java 应用程序调用(它仅在 Windows 上使用,因此跨平台不是必须的),现在它适用于:

int pageNum = 24;
String manualPath = "C:\\Program Files\\Foo\\Bar\\Docs\\RefMan.pdf";
String acrordPath = "C:\\Program Files\\Adobe\\Reader 8.0\\Reader\\AcroRd32.exe";
String cmdString = "\"" + acrordPath + \" /A \"page=" + pageNum + 
    "=OpenActions\" \"" + manualPath + \"";
Process p = Runtime.getRuntime().exec(cmdString);

显然,只有最终用户使用 32 位版 Acrobat 8​​ 并将其安装在默认位置时,这才有效。我接下来尝试使用:

rundll32 url.dll,FileProtocolHandler file:///C:/Program%20Files/Foo/Bar/Docs/RefMan.pdf#page=24

以为这会打开用户浏览器并跳转到该页面,但它只是在第 1 页上打开 Acrobat。

所以我很困惑,并寻求帮助。

最佳答案

我最终通过使用this code来实现这个调用 reg.exe 并解析 HKLM\SOFTWARE\Classes.pdf 的输出以查看其是否为 AcroExch 类,然后从 HKLM\SOFTWARE\Classes\AcroExch.Document\Shell\Open\Command 获取命令行。

它很hacky,但是很有效。

关于java - 如何跳转到本地pdf中的页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/730554/

相关文章:

java - 一起验证 int 和 float 值

java - 如何填充包含另一个 ArrayList<String> 的 ArrayList<ArrayList<String>>

java - 如何在angularjs中读取pdf流

java - 更改现有 PDF 文档的方向(纵向/横向)

java - IE 11 中的 Adob​​e PDF 灰屏

java - 如何修复 java.lang.NoSuchMethodError : sun. security.ssl.Handshaker.setApplicationProtocols([Ljava/lang/String;)

java - 为什么三元运算符在自动拆箱时会抛出 NPE?

python - 在 Windows Python 中将不可搜索的 Pdf 转换为可搜索的 Pdf

javascript - 如何通过 Excel VBA 设置 Acrobat XI 打印机设置?

php - pdftk + xfdf + php 无法处理变音符号