InDesign-Skript zum Auflisten von Hyperlinks im aktiven Dokument

Ich versuche, eine Liste von Hyperlinks aus meinem Dokument zu erhalten, das in der Konsole gedruckt oder in eine Textdatei ausgegeben wird. Damit spiele ich:

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

Antworten (1)

Da gibt es mehr als einen Fehler, fürchte ich. „Hyperlink“ wird in der neuesten Version von Adobes eigenem Scripting-Handbuch (das wäre „Adobe InDesign CS6 Scripting Guide: JavaScript“ auf http://www.adobe.com/devnet/indesign/documentation.html ) nicht behandelt, aber das ist es kein Grund, Dinge einfach zu „probieren“. Der ExtendScript Toolkit Editor hat eine eigene Hilfe – den „Object Model Viewer“ unter „Help“ – in der Sie hyperlinkalle seine Eigenschaften finden können, aber ich bevorzuge diese Version derselben Daten: Hyperlink .

Sie haben folgende Probleme:

  1. app.activeDocument.hyperlinks.item[k]: itemist kein Array , sondern eine Funktion (siehe Hyperlinks.item() ).
  2. Wenn Sie richtig nach dem fragen item, erhalten Sie ein, [Object Hyperlink]da es sich um ein Objekt mit mehreren Eigenschaften handelt.
  3. .. und die Immobilie, die Sie interessiert, ist destination:

    Der Text, die Seite oder die URL, auf die der Hyperlink verweist. Kann zurückgeben: HyperlinkTextDestination, HyperlinkPageDestination, HyperlinkExternalPageDestination, HyperlinkURLDestination oder ParagraphDestination.

  4. .. genauer gesagt, da Hyperlinks auf viele verschiedene Objekte verweisen können, destination muss der vom Typ sein HyperlinkURLDestination;

  5. .. das ist ein eigenes Objekt, wieder mit vielen Eigenschaften (siehe HyperlinkURLDestination ); und Sie möchten vermutlich die destinationURL.

Alles zusammen, das folgende Skript

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

listet alle externen URLs auf. Das Schreiben in eine Datei ist ebenfalls einfach:

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