Скрипт InDesign для отображения гиперссылок в активном документе

Я пытаюсь получить список гиперссылок из моего документа, распечатанный в консоли или выводимый в текстовый файл. Вот с чем я играю:

for (k=0; k<app.activeDocument.hyperlinks.length-1; k++)
{
    $.writeln(app.activeDocument.hyperlinks.item[k]);
}

Ответы (1)

Боюсь, там больше одной ошибки. «Гиперссылка» не рассматривается в последней версии собственного руководства Adobe по созданию сценариев (которое будет называться «Руководство по созданию сценариев Adobe InDesign CS6: JavaScript» на http://www.adobe.com/devnet/indesign/documentation.html ), но это нет причин просто «пробовать» что-то. Редактор ExtendScript Toolkit имеет собственную справку — «Просмотр модели объекта» в разделе «Справка», в которой вы можете найти hyperlinkвсе его свойства, но я предпочитаю эту версию тех же данных: Hyperlink .

У вас есть следующие проблемы:

  1. app.activeDocument.hyperlinks.item[k]: itemэто не массив , это функция (см. Hyperlinks.item() ).
  2. Когда вы правильно запросите item, вы получите , [Object Hyperlink]потому что это объект с несколькими свойствами.
  3. .. и недвижимость, которая вас интересует destination:

    Текст, страница или URL-адрес, на который указывает гиперссылка. Может возвращать: HyperlinkTextDestination, HyperlinkPageDestination, HyperlinkExternalPageDestination, HyperlinkURLDestination или ParagraphDestination.

  4. .. более конкретно, поскольку гиперссылки могут указывать на множество различных объектов, они destination должны быть типа HyperlinkURLDestination;

  5. .. который является собственным объектом, опять же с множеством свойств (см. HyperlinkURLDestination ); и вы, вероятно, хотите получить destinationURL.

Собрав все это вместе, следующий скрипт

for (k=0; k<app.activeDocument.hyperlinks.length; k++)
{
    if (app.activeDocument.hyperlinks[k].destination instanceof HyperlinkURLDestination)
        $.writeln (app.activeDocument.hyperlinks[k].destination.destinationURL);
}

перечислит все внешние URL-адреса. Запись в файл также проста:

writeFile = File(Folder.myDocuments+'/urls.txt');
writeFile.open("w");

for (k=0; k<app.activeDocument.hyperlinks.length; k++)
{
    if (app.activeDocument.hyperlinks[k].destination instanceof HyperlinkURLDestination)
        writeFile.writeln (app.activeDocument.hyperlinks[k].destination.destinationURL);
}
writeFile.close();
writeFile.execute();