سؤال

سؤالي مشابه ل "كيف يمكنني فتح ملف 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.

لذلك أنا في حيرة من أمري، وأطلب المساعدة.

هل كانت مفيدة؟

المحلول

انتهى بي الأمر بتنفيذ هذا باستخدام هذا الرمز لاستدعاء reg.exe وتحليل الإخراج من HKLM\SOFTWARE\Classes.pdf لمعرفة ما إذا كانت فئة AcroExch، ثم الحصول على سطر الأوامر من HKLM\SOFTWARE\Classes\AcroExch.Document\Shell\Open\Command.

إنه اختراق، لكنه يعمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top