Укороченная версия:
- Можно ли каким-либо образом заставить MS Word 2007 (или новее) кодировать относительные гиперссылки файлов (гиперссылки, указывающие, например, на другой файл PDF), используя
Launch
типа действия вместоURI
(оба типа указаны на стр. 653 переносимого документа Adobe Формат, PDF Reference, версия 1.7, шестое издание - http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/pdf_reference_1-7.pdf )? Или это единственное решение для реализации постпроцессора, который может заменить все "неправильные" гиперссылки на файлы в кодировкеURI
на их эквивалентLaunch
?
Разработанная версия:
У меня есть два документа Word; doc1.docx
и doc2.docx
(оба скомпилированы с MS Word 2007).
В doc1.docx
я размещаю гиперссылку на PDF-версию моего второго документа ( doc2.pdf
) - так что теперь я получил:
Затем я сохраняю файл doc1.docx
как .docx
и .pdf
- генерация PDF
выполняется встроенным издателем PDF в MS Word 2007 с использованием следующих параметров:
Пока все хорошо - у меня есть следующая структура папок:
/superuser
- doc1.docx
- doc1.pdf
- doc2.docx
- doc2.pdf
Затем я открываю doc1.pdf
Adobe Reader X (версия 10.1.3) и нажимаю на гиперссылку, указывающую на doc2.pdf
. Поскольку ссылка является относительной, я бы предположил / предположил, что Adobe Reader X просто откроет целевой файл PDF либо в отдельном окне, либо в одном и том же экземпляре Adobe Reader X (в зависимости от параметра « Open cross-document links in same window
указанном окне»). в: Edit -> Preferences -> Documents
).
Однако это не так. Вместо этого Adobe Reader X разрешает гиперссылку, используя браузер по умолчанию (в моем случае Google Chrome v21+ на Windows 7 x64) - и, чтобы было ясно - это проблема. Я хочу, чтобы Adobe Reader X (и большинство его предшественников) просто разрешил гиперссылку, открыв целевой PDF-файл в другом экземпляре Adobe Reader X (при условии, что я снял флажок Open cross-document links in same window
). Повторение того же сценария с использованием моей (по умолчанию) программы для чтения PDF; Sumatra PDF работает как положено - Sumatra PDF открывает целевой файл PDF в отдельном окне и показывает мне содержимое doc2.pdf
. Так почему бы не использовать Sumatra PDF, тогда вы спросите? Мне бы очень хотелось - однако, проблема в том, что я работаю над проектом с потенциально большим количеством конечных пользователей, и я не могу предположить, что все они используют другой PDF-ридер, чем Adobe Reader X - поэтому другого пути нет что понять, что происходит с Adobe Reader X.
Поэтому, чтобы попасть туда, я начал копать.
Во- первых, посмотрев на адресную строку в Chrome, видно , что Adobe Reader X пытается решить doc2.pdf
используя file
схемы URI: file:///C:/superuser/doc2.pdf
- который кажется справедливым ко мне (оклейки тот же URI в диалоговом окне « Run
» в Windows 7 приводит к тому, что мой читатель PDF по умолчанию (Sumatra PDF) открывает файл), но почему Adobe Reader X запрашивает браузер по умолчанию для обработки PDF?
Чтобы ответить на это, я продолжал копать. Открытие doc1.pdf
в notepad++ показало, что гиперссылка была закодирована с использованием типа действия URI
(см. Стр. 653 и 662 в формате Adobe Portable Document Format, PDF Reference, версия 1.7, шестое издание - http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/pdf_reference_1-7.pdf ):
/Type/Action/S/URI/URI(doc2.pdf)
В справочнике PDF (стр. 662) говорится о типе действия URI
:
Универсальный идентификатор ресурса (URI) - это строка, которая идентифицирует (разрешает) ресурс в Интернете - обычно это файл, который является местом назначения гипертекстовой ссылки, хотя он также может разрешать запрос или другой объект.
Итак, то, что на первый взгляд выглядело как серьезная ошибка в Adobe Reader X, стало похоже на честную реализацию. По крайней мере, в этот момент я выяснил, почему Adobe Reader X ведет себя так, как он это делает - в результате возникает новый вопрос: как правильно кодировать гиперссылку файла (например, ссылку на doc2.pdf
) так, чтобы получающийся PDF-файл создавал Adobe Reader X обрабатывает саму ссылку (вместо того, чтобы просить браузер по умолчанию выполнить свою работу)?
Чтобы ответить на этот вопрос, я еще раз взглянул на спецификацию PDF и обнаружил Launch
Action Type - об этом типе в PDF-справке говорится следующее (стр. 659):
Действие запуска запускает приложение или открывает или печатает документ.
Итак, сделав следующее изменение (используя notepad++):
Замена:
/Type/Action/S/URI/URI(doc2.pdf)
С этим:
/Type/Action/S/Launch/F(doc2.pdf)
... Затем Adobe Reader X разрешает ссылку, открывая файл doc2.pdf
в отдельном окне / другом экземпляре Adobe Reader X - снова при условии, что я снял флажок Открывать Open cross-document links in same window
(ура !!).
А теперь перейдем к актуальному / последнему вопросу, который мне еще не удалось решить - есть ли способ заставить MS Word 2007 (или новее) кодировать относительные файловые гиперссылки (гиперссылка, указывающая, например, на другой файл PDF), используя Тип действия Launch
вместо URI
(оба типа указаны на стр. 653 Adobe Portable Document Format, PDF Reference, версия 1.7, шестое издание - http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe /en/devnet/pdf/pdfs/pdf_reference_1-7.pdf )? Или это единственное решение для реализации какого-либо постпроцессорного приложения, которое может заменить все "неправильные" гиперссылки на кодированные файлы URI
на их эквивалент Launch
?
Я знаю, что это может вызвать много "TLDR" - но если вам удастся попасть сюда, я очень ценю ваш интерес и надеюсь, что вы или кто-то еще можете указать мне в правильном направлении.
Благодарю.