Способ перехода на страницу в местном PDF? - PullRequest
1 голос
/ 08 апреля 2009

Мой вопрос похож на «Как программно открыть PDF-файл в определенный момент?» , но PDF-файл локальный, а не на веб-сервере.

Мне нужен способ перехода на заданную страницу в 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);

Очевидно, это будет работать только в том случае, если конечный пользователь использует Acrobat 8 ​​для 32-разрядной версии и установит его в папку по умолчанию. Затем я попытался использовать:

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

думал, что это откроет браузер пользователей и перейдет на эту страницу, но он просто открыл Acrobat на странице 1.

Так что я ошарашен и прошу помощи.

1 Ответ

0 голосов
/ 09 апреля 2009

В итоге я реализовал это, используя этот код для вызова reg.exe и анализа выходных данных из HKLM \ SOFTWARE \ Classes.pdf, чтобы определить, является ли это классом AcroExch, а затем получить командную строку из HKLM. \ SOFTWARE \ Classes \ AcroExch.Document \ Shell \ Open \ Command.

Хак, но это работает.

...