MS Word 2007+ - может ли он кодировать гиперссылки, используя PDF «Тип запуска» вместо «URI» при публикации файла «.docx» в PDF?

9

Укороченная версия:

  • Можно ли каким-либо образом заставить 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эквиваленты?

Разработанная версия:

У меня есть два документа Word; doc1.docxи doc2.docx(оба скомпилированы с MS Word 2007).

В doc1.docxI место гиперссылки на PDF версию моего второго документа ( doc2.pdf) - так что теперь я получил:

Свойства гиперссылки <code> doc2.pdf </ code> в <code> doc1.docx </ code>

Затем я сохраняю doc1.docxфайл как .docxи .pdf- PDFгенерация обрабатывается встроенным PDF-издателем в MS Word 2007 с использованием следующих параметров:

MS Word 2007 PDF Publish Свойства

Пока все хорошо - у меня есть следующая структура папок:

/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 Reader; 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- об этом типе в ссылке на 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» - но если вам удастся попасть сюда, я очень ценю ваш интерес и надеюсь, что вы или кто-то еще можете указать мне в правильном направлении.

Спасибо.

Лассе Кристиансен
источник
2
Не уверен, что комментарии «поднимают» вопрос, но это стоит того, чтобы прочитать.
Таннер Фолкнер
1
Спасибо за ваш вопрос. Само по себе содержит много деталей и одно возможное решение. Вам удалось найти лучший способ сделать это? Замена Действие работает отлично.
Фариш
1
@Farish К сожалению нет. До сих пор использование почтового процессора было решением, которое работает для меня. Если я когда-нибудь найду лучший способ, я выложу обновление здесь :)
Lasse Christiansen

Ответы:

2

Спасибо за вашу отличную статью. Оно работает! Сначала не для меня, но потом я обнаружил, что в Adobe X нужно отключить «защищенный режим». У меня вообще нет этой проблемы в Adobe 9. Мне кажется, что индустрия идет в обратном направлении по функциональности в имя безопасности.

Итак, в Adobe Reader X сделайте:

  1. Убедитесь, что открытые перекрестные документы .. не отмечены. (как вы сказали)
  2. Отключить защищенный режим: Изменить »Настройки» Общие
  3. Поиск и замена /Type/Action/S/URI/URIс /Type/Action/S/Launch/F(использованием подходящего шестнадцатеричного редактора

Не существует простого решения для того, что мы хотим сделать, - позволить любому пользователю, у которого есть только программа чтения PDF, без каких-либо настроек, перемещаться по папке.
Но еще раз спасибо за всю вашу работу и свет, который она проливает на эту тему.

Боб Браун
источник
Я рад, что это работает, используя идею «постпроцессора». Поскольку я разместил вопрос, я все еще не нашел лучшего решения, поэтому я также буду продолжать использовать этап постобработки, пока не будет найдено лучшее решение. Спасибо за ваш вклад :)
Лассе Кристиансен
0

FWIW, я не думаю, что ссылки работают в Суматре, если имя файла содержит пробелы (размещение кавычек вокруг имени не помогло, так как Word, кажется, лишает их при создании ссылки). Я не верю, что можно изменить поведение Word, так что ...

Обходной путь № 1: Используйте лучший создатель PDF.

Обходной путь № 2. Создайте PDF-файлы с помощью Word, как обычно, затем используйте шестнадцатеричный редактор или утилиту командной строки, например http://stahlforce.com/dev/index.php?tool=rep, чтобы заменить все необходимые экземпляры / Type / Action / S / URI / URI ( с помощью / Type / Action / S / Launch / F ( .

Каран
источник
0

Число рейнольдса вопрос относительной гиперссылки.

В справке MS Office указано, что настройка «обновить ссылки при сохранении» (кнопка «Office» / «Параметры Word» / «Дополнительно» / «Веб-настройки») приводит к тому, что вставка гиперссылок будет относительной. Если не проверено, они становятся абсолютными. Однако этот параметр не изменил мои попытки. То, что сделал, было точкой, в которой файл был сохранен. Для создания относительных ссылок я открываю новый пустой файл и сохраняю его в соответствующую папку, прежде чем вставлять какие-либо ссылки. В поле «Вставить гиперссылку» выберите «Существующая папка». В этом случае папка, показанная в поле, является папкой, только что сохраненной в дереве внизу, а не вверх. т.е. относительный

Для создания абсолютных ссылок я открываю новый пустой файл и, не сохраняя его, вставляю ссылку. Поле вставки теперь показывает существующую папку на верхнем уровне. Разверните файл, с которым нужно установить связь, и путь, показанный внизу окна, является полным путем к C :. , , , , .. (показывает букву диска) т.е. абсолютный.

При наведении курсора на ссылки в двух файлах Word отображается полный абсолютный путь в обоих случаях. Однако, если папка «Родитель» копируется на другой диск, относительная ссылка открывает папку на новом диске, а абсолютная ссылка возвращается к папке «C: диск», которую я хочу увидеть. Я еще не обнаружил, как сделать оба вида ссылок в одном файле. Но мне все равно это не нужно. Я смог преобразовать оба моих файла MS Word в pdf, используя вышеописанную модификацию hex-редактирования, и они оба работали, один в абсолютном режиме, другой родственник.

Число рейнольдса ваш "метод подмены шестнадцатеричного редактирования"

Это работало хорошо для меня в некоторых случаях, а не в других. Я обнаружил, что должен убедиться, что в целевых именах файлов нет пробелов. Я заменил их символом подчеркивания. Тогда они работали.

Боб Браун
источник
0

Сейчас я достиг этого, насколько это возможно для меня. Поскольку это касается непосредственно исходного вопроса, я просто передам свое окончательное резюме.

Число рейнольдса абсолютные и относительные ссылки в одном документе

посмотрите на путь, показанный внизу поля Вставить гиперссылку. Если папка верхнего уровня является выбранной вами, то ссылка будет относительной. Чтобы сделать его абсолютным, используйте древовидную структуру в поле «вставка», чтобы развернуть вверх вплоть до буквы диска. По умолчанию это относительные ссылки, когда файл был впервые сохранен в «родительской» папке.

Шаги по созданию переносимой индексной папки

(с индексным документом, ссылающимся на файлы в подпапках.)

  1. Создайте новую папку, которая будет папкой для транспортировки (папка «Родитель»).

  2. Создайте или поместите подпапки с их файлами в родительский.

  3. Теперь откройте документ Word 2007, который будет вашим «индексным документом». Перед вставкой любых ссылок сохраните этот файл на свой «родительский».

  4. Теперь сделайте «вставить гиперссылку». Поле «Вставить гиперссылку» будет отображать древовидную структуру папок / файлов вниз от «родительского», то есть относительного. Чтобы получить абсолютную связь, просверлите вверх всю букву до буквы диска.

  5. Сохраните файл Word, который теперь будет работать как «индексный документ».

  6. Чтобы преобразовать 'index doc' в pdf, откройте файл word и сохраните как PDF. Эта версия индексного документа открывает целевые файлы через браузер, либо загружает их, либо отображает в виде PDF в браузере.

  7. Чтобы сделать документ «Index.pdf», откройте ссылки в их собственном приложении, измените файл, используя метод шестнадцатеричного редактирования, описанный ранее, и подставьте / Type / Action / S / URI / URI (для / Type / Action / S / Launch / F (

  8. 3. Важное примечание! Перед изменением файла .pdf убедитесь, что в именах всех папок и файлов нет пробелов. Подстановочные пробелы с подчеркиванием или тире.

Боб Браун
источник