Question

Ma question est similaire à "Comment puis-je ouvrir un PDF par programmation à un moment donné ?", mais le PDF est local, pas sur un serveur Web.

J'ai besoin d'un moyen d'accéder à une page donnée d'un PDF qui se trouve sur l'ordinateur de l'utilisateur, qui fonctionne sur toutes les versions d'Acrobat (ou en utilisant une autre visionneuse PDF comme Foxit Reader).Le PDF va être appelé à partir d'une application Java (il n'est utilisé que sous Windows, donc le multiplateforme n'est pas indispensable), et pour le moment, il fonctionne avec :

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);

Évidemment, cela ne fonctionnera que si l'utilisateur final utilise Acrobat 8 ​​pour 32 bits et l'a installé à l'emplacement par défaut.J'ai ensuite essayé d'utiliser :

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

pensant que cela ouvrirait le navigateur de l'utilisateur et accéderait à cette page, mais cela ouvrirait simplement Acrobat à la page 1.

Je suis donc perplexe et je demande de l'aide.

Était-ce utile?

La solution

J'ai fini par implémenter cela en utilisant ce code pour appeler reg.exe et analyser la sortie de HKLM\SOFTWARE\Classes.pdf pour voir s'il s'agit de la classe AcroExch, puis obtenir la ligne de commande de HKLM\SOFTWARE\Classes\AcroExch.Document\Shell\Open\Command.

C'est hacky, mais ça marche.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top