[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Hyperlink zu Textanker (CC2020, WIN10, JSX)

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Hyperlink zu Textanker (CC2020, WIN10, JSX)

cwenet
Beiträge gesamt: 1139

6. Jun 2020, 14:00
Beitrag # 1 von 8
Bewertung:
(11436 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Tag,

mit folgendem Script versuche ich gerade Hyperlinks zu erstellen.
Die Zielanker sind bereits gesetzt.
Das Script erstellt zwar die gewünschten Hyperlinks, aber das Ziel wird nicht erkannt.
Code
app.findTextPreferences = NothingEnum.nothing; 
app.findTextPreferences.appliedCharacterStyle = "start";
myLinkResult = app.activeDocument.findText();
myDoc = app.activeDocument;

for (i = 0; i < myLinkResult.length; i += 1) {

myLink = myLinkResult[i];
myLinkText = myDoc.hyperlinkTextSources.add(myLink);
myDoc.hyperlinks.add(myLinkText, myLink.contents);

}


Die Namen der Textanker sind identisch mit der Hyperlink-Quelle.

Hier ein Demo-Dok:
https://www.dropbox.com/s/uqs3actdkanw20h/hyperlink.indd?dl=0

Ich bräuchte bitte nochmals Eure Hilfe.
Gruss
Christoph
X

Hyperlink zu Textanker (CC2020, WIN10, JSX)

Martin Fischer
  
Beiträge gesamt: 12783

6. Jun 2020, 17:59
Beitrag # 2 von 8
Beitrag ID: #575614
Bewertung:
(11387 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

schau Dir mal die Syntax des hyperlinks.add()-Befehls an: hyperlinks.add()

Das erste Argument ist hyperlinkSource.
Das ist in Deinem Schnippsel korrekt.

Das zweite Argument ist hyperlinkDestination.
Du übergibst aber einen String.

Hier müsste aber Dein "Anker" als hyperlinkDestination-Objekt (vermutlich HyperlinkTextDestination) angegeben werden.

Wenn dieses Objekt noch nicht definiert ist, musst Du das ggf. aus dem Textobjekt erzeugen: HyperlinkTextDestination.add().


als Antwort auf: [#575609]

Hyperlink zu Textanker (CC2020, WIN10, JSX)

cwenet
Beiträge gesamt: 1139

6. Jun 2020, 18:53
Beitrag # 3 von 8
Beitrag ID: #575616
Bewertung:
(11367 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

danke fürs heranführen.
Eigentlich müsste es doch jetzt so richtig sein:

Code
app.findTextPreferences = NothingEnum.nothing;  
app.findTextPreferences.appliedCharacterStyle = "start";
myLinkResult = app.activeDocument.findText();
myDoc = app.activeDocument;

for (i = 0; i < myLinkResult.length; i += 1) {

myLink = myLinkResult[i];
source = myDoc.hyperlinkTextSources.add(myLink);
anchor = myDoc.hyperlinkTextDestinations.item(myLink.contents);
xref = myDoc.hyperlinks.add (source, anchor);
myRandomString = String(Math.random());
xref.name = myLink.contents+ "_" + myRandomString.slice(2,);
}


Fehler: Ungültiger Wert für Parameter "hyperlinkDestination"
Leider komme ich irgendwie nicht weiter.


als Antwort auf: [#575614]

Hyperlink zu Textanker (CC2020, WIN10, JSX)

Martin Fischer
  
Beiträge gesamt: 12783

6. Jun 2020, 20:06
Beitrag # 4 von 8
Beitrag ID: #575619
Bewertung:
(11325 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ja, eigentlich müsste es so richtig sein und bei mir funktioniert das auch mit Deinem oben angegebenen Beispieldokument.

Hier ist noch eine kleine Prüfung zur Existenz der hyperlinkTextDestination eingebaut, aber im Wesentlichen ist das Dein Code:

Code
var myDoc = app.activeDocument; 
var myLinkResult = [];
var myLink = null;
var source = null;
var xref = null;
var i = 0;
var myRandomString = '';

app.findTextPreferences = NothingEnum.nothing;
app.findTextPreferences.appliedCharacterStyle = myDoc.characterStyles.itemByName("start");
myLinkResult = app.activeDocument.findText();

for (i = 0; i < myLinkResult.length; i += 1)
{
myLink = myLinkResult[i];
source = myDoc.hyperlinkTextSources.add(myLink);
if (myDoc.hyperlinkTextDestinations.item(myLink.contents).isValid)
anchor = myDoc.hyperlinkTextDestinations.item(myLink.contents);
else
anchor = myDoc.hyperlinkTextDestinations.add({destinationText:myLink, name: myLink.contents});
xref = myDoc.hyperlinks.add (source, anchor);
myRandomString = String(Math.random());
xref.name = myLink.contents + "_" + myRandomString.slice(2,);
}


Im Moment habe ich keine Erklärung, weshalb es bei Dir mit dem Beispieldokument nicht funktioniert.

---
edit:
Die else-Alternative ist freilich Quatsch, weil sie das Ziel bei der Quelle ergänzt. Das müsstest Du ggf. noch konkreter anpassen. Es sollte nur sicher stellen, dass ein ansprechbares Ziel mit diesem Namen existiert.


als Antwort auf: [#575616]
(Dieser Beitrag wurde von Martin Fischer am 6. Jun 2020, 20:11 geändert)

Hyperlink zu Textanker (CC2020, WIN10, JSX)

cwenet
Beiträge gesamt: 1139

6. Jun 2020, 20:39
Beitrag # 5 von 8
Beitrag ID: #575621
Bewertung:
(11306 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Dank, Martin, für die Aufbereitung.

Es funktioniert fast.
Der erste Hyperlink [1] im Fliesstext verweist komischerweise auf sich selber.
Es wird dort ein Textanker platziert.


als Antwort auf: [#575619]

Hyperlink zu Textanker (CC2020, WIN10, JSX)

Martin Fischer
  
Beiträge gesamt: 12783

6. Jun 2020, 20:46
Beitrag # 6 von 8
Beitrag ID: #575623
Bewertung:
(11296 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat von Christoph Der erste Hyperlink [1] im Fliesstext verweist komischerweise auf sich selber.
Es wird dort ein Textanker platziert.


Dann ist Dir das Ziel (der "Anker") vorhin verlorengegangen. Denn mit meinem Code oben wird ein fehlendes Ziel direkt an der Quelle erzeugt.

Siehe Hinweis oben:

Zitat von Martin Fischer Die else-Alternative ist freilich Quatsch, weil sie das Ziel bei der Quelle ergänzt. Das müsstest Du ggf. noch konkreter anpassen. Es sollte nur sicher stellen, dass ein ansprechbares Ziel mit diesem Namen existiert.



als Antwort auf: [#575621]
(Dieser Beitrag wurde von Martin Fischer am 6. Jun 2020, 20:46 geändert)

Hyperlink zu Textanker (CC2020, WIN10, JSX)

cwenet
Beiträge gesamt: 1139

6. Jun 2020, 20:58
Beitrag # 7 von 8
Beitrag ID: #575624
Bewertung:
(11282 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich glaube, ich habe es nicht verstanden.
So läuft es jetzt fehlerfrei durch, aber ohne die erste Fundstelle.
Das Ziel ist aber da.

Code
var myDoc = app.activeDocument;  
var myLinkResult = [];
var myLink = null;
var source = null;
var xref = null;
var i = 0;
var myRandomString = '';

app.findTextPreferences = NothingEnum.nothing;
app.findTextPreferences.appliedCharacterStyle = myDoc.characterStyles.itemByName("start");
myLinkResult = app.activeDocument.findText();

for (i = 0; i < myLinkResult.length; i ++)
{
myLink = myLinkResult[i];
source = myDoc.hyperlinkTextSources.add(myLink);
if (myDoc.hyperlinkTextDestinations.item(myLink.contents).isValid) {
anchor = myDoc.hyperlinkTextDestinations.item(myLink.contents);
xref = myDoc.hyperlinks.add (source, anchor);
myRandomString = String(Math.random());
xref.name = myLink.contents + "_" + myRandomString.slice(2,);
}
}



als Antwort auf: [#575623]

Hyperlink zu Textanker (CC2020, WIN10, JSX)

cwenet
Beiträge gesamt: 1139

6. Jun 2020, 21:02
Beitrag # 8 von 8
Beitrag ID: #575626
Bewertung:
(11275 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Entwarnung.
Ich habe nochmal alle Ziele gelöscht und neu erstellt.
Jetzt tut es.
Die Textanker sind ein Mysterium.
Schönen Abend und vielen Dank
Christoph


als Antwort auf: [#575624]
(Dieser Beitrag wurde von cwenet am 6. Jun 2020, 21:03 geändert)
X