Secuencia de comandos de InDesign para listar hipervínculos en el documento activo

Estoy tratando de obtener una lista de hipervínculos de mi documento impreso en la consola o en un archivo de texto. Esto es con lo que estoy jugando:

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

Respuestas (1)

Más de un error ahí, me temo. "Hipervínculo" no está cubierto en la última versión de la guía de secuencias de comandos de Adobe (que sería "Guía de secuencias de comandos de Adobe InDesign CS6: JavaScript" en http://www.adobe.com/devnet/indesign/documentation.html ), pero eso es no hay razón para simplemente 'probar' cosas. El Editor del kit de herramientas de ExtendScript tiene una Ayuda propia, el "Visor de modelos de objetos" en "Ayuda", en la que puede encontrar hyperlinktodas sus propiedades, pero prefiero esta versión de los mismos datos: hipervínculo .

Tienes los siguientes problemas:

  1. app.activeDocument.hyperlinks.item[k]: itemno es una matriz , es una función (ver Hyperlinks.item() ).
  2. Cuando solicite correctamente el item, obtendrá un [Object Hyperlink]porque es un objeto con múltiples propiedades.
  3. .. y la propiedad que le interesa es destination:

    El texto, la página o la URL a la que apunta el hipervínculo. Puede devolver: HyperlinkTextDestination, HyperlinkPageDestination, HyperlinkExternalPageDestination, HyperlinkURLDestination o ParagraphDestination.

  4. .. más específicamente, dado que los hipervínculos pueden apuntar a muchos objetos diferentes, destination deben ser de tipo HyperlinkURLDestination;

  5. .. que es un objeto en sí mismo, nuevamente con muchas propiedades (ver HyperlinkURLDestination ); y presumiblemente desea obtener el archivo destinationURL.

Poniendo todo eso junto, el siguiente script

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

enumerará todas las URL externas. Escribir en un archivo también es sencillo:

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