[GastForen Programme Print/Bildbearbeitung Adobe InDesign Wiederholender "Hyperlink" auf "Textanker"

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

Wiederholender "Hyperlink" auf "Textanker"

Markus H.
Beiträge gesamt: 15

23. Jul 2009, 09:58
Beitrag # 1 von 32
Bewertung:
(6797 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Gruezi!

Wir erstellen ein Interaktives PDF mit InDesign CS4.
Darin gibt es einen Glossar bei welchem die "Textanker" gesetzt werden und die entsprechenden Begriffe im Dokument mit dem "Hyperlink" jeweils darauf verweisen. Das funktioniert!

Nur treten die einzelnen Begriffe x-fach im Dokument auf und bei jedem Begriff den "Neuer Hyperlink" manuell zu setzen benötigt zu viel Arbeit. Wie kann ich dies speditiv abarbeiten?

Eine Idee war mit "Suchen Ersetzen" aber da nimmt er mir nur die Zeichen mit und nicht den "Hyperlink". Könnte ich eine Art Makro aufzeichnen..?

Über eine Antwort freue ich mich.
Mit Gruss markus
X

Wiederholender "Hyperlink" auf "Textanker"

Martin Fischer
  
Beiträge gesamt: 12783

23. Jul 2009, 10:01
Beitrag # 2 von 32
Beitrag ID: #402869
Bewertung:
(6792 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Markus,

> Könnte ich eine Art Makro aufzeichnen..?

Makro aufzeichnen geht nicht.
Aber Skripten geht.
(JavaScript, AppleScript, Visual Basic)

Allerdings ist dies mit etwas Lehrzeit verbunden.


als Antwort auf: [#402866]

Wiederholender "Hyperlink" auf "Textanker"

Markus H.
Beiträge gesamt: 15

23. Jul 2009, 10:19
Beitrag # 3 von 32
Beitrag ID: #402871
Bewertung:
(6788 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke! Dann lernen wir mal.
Dazu wollte ich das deutsche Skript-Handbuch auf Adobe öffnen, leider funktioniert aber der Link nicht: "www.adobe.com/go/scripting_id_de"
Auf der DVD habe ich nur den englischen Beitrag gefunden. Gibt es dieses Buch noch?


als Antwort auf: [#402869]

Wiederholender "Hyperlink" auf "Textanker"

Martin Fischer
  
Beiträge gesamt: 12783

23. Jul 2009, 10:37
Beitrag # 4 von 32
Beitrag ID: #402874
Bewertung:
(6783 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Markus,

ich fürchte, bei Adobe findest Du keine Einführung ins Skripten in deutscher Sprache.

Dokumentationen findest Du etwa hier: http://www.adobe.com/...n/documentation.html
Quellen zum Skripten findest Du auch unter 'Scripting resources' in http://www.adobe.com/.../indesign/scripting/


als Antwort auf: [#402871]

Wiederholender "Hyperlink" auf "Textanker"

Markus H.
Beiträge gesamt: 15

23. Jul 2009, 10:42
Beitrag # 5 von 32
Beitrag ID: #402875
Bewertung:
(6775 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Martin!
Werde micht dort mal schlau machen.


als Antwort auf: [#402874]

Wiederholender "Hyperlink" auf "Textanker"

Martin Fischer
  
Beiträge gesamt: 12783

23. Jul 2009, 11:16
Beitrag # 6 von 32
Beitrag ID: #402878
Bewertung:
(6759 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Markus,

weil's mich spontan selbst gekitzelt hat, hier eine kleine Skriptstudie für diese Aufgabe.
Ich betone 'Studie', weil es kein ausgereiftes Skript ist.
Ein solches folgt vielleicht irgendwann einmal im Skript-Archiv.
Code
var myArray = new Array; 

// Liste mit Paaren von a) gesuchter Begriff und b) definiertem Anker
myArray[0] = ['Rumpelstilzchen', 'Anker1'];
myArray[1] = ['Hänsel', 'Anker2'];
// ...

var d = app.activeDocument;

// Zurücksetzen der Suche-Ersetze Einstellungen
app.findTextPreferences = app.changeTextPreferences = null;

// Definition der Suche-/Ersetze Einstellungen (ganzes Wort, auch in Fußnoten suchen)
app.findChangeTextOptions.wholeWord = true;
app.findChangeTextOptions.includeFootnotes = true;

// Schleife durch die oben definierte Liste
for ( var i = 0; i < myArray.length; i++ )
makeHyperlinks(myArray[i]);


function makeHyperlinks(aPair)
{
// Prüfung, ob Anker vorhanden ist
var myAnchor = null;
myAnchor = d.hyperlinkTextDestinations.item(aPair[1]);
if (myAnchor != null)
{
app.findTextPreferences.findWhat = aPair[0];
// gefundenes Stellen mit dem Begriff
var r = d.findText();
for ( var f = 0; f < r.length; f++ )
{
try // um die wiederholte Verlinkung eines bereits verlinkten Texts abzufangen
{
// Hinzufügen der neuen Quelle
var mySource = d.hyperlinkTextSources.add({sourceText: r[f]});
// Hinzufügen des Hyperlinds
var myHyperlink = d.hyperlinks.add({ source: mySource, destination:myAnchor});
} catch(e){}
}
}
}


Am Anfang des Skripts wird eine erweiterbare Liste definiert.
Dort sind paarweise das im Dokument zu suchende Wort und der Name des Hyperlinkziels definiert:
myArray[0] = ['Rumpelstilzchen', 'Anker1'];
'Rumpelstilzchen' wird gesucht und überall im Text mit dem Textanker 'Anker1' verknüpft.

Im Code sind ein paar Kommentare enthalten, die auf Deutsch darauf hinweisen, was an diesen Stellen passiert.


als Antwort auf: [#402875]
(Dieser Beitrag wurde von Martin Fischer am 23. Jul 2009, 15:15 geändert)

Wiederholender "Hyperlink" auf "Textanker"

Markus H.
Beiträge gesamt: 15

23. Jul 2009, 13:02
Beitrag # 7 von 32
Beitrag ID: #402902
Bewertung:
(6723 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wow, werde es sehr gerne damit versuchen!

markus


als Antwort auf: [#402878]

Wiederholender "Hyperlink" auf "Textanker"

Markus H.
Beiträge gesamt: 15

23. Jul 2009, 14:40
Beitrag # 8 von 32
Beitrag ID: #402918
Bewertung:
(6694 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Er gibt mir die Fehlermeldung siehe Anhang (auch die Ansicht des Script).

Die Kommentare sollte er ja übergehen?

Bleibt bei der ersten Zeile stehen...

markus


als Antwort auf: [#402878]
Anhang:
fehlermeldung.jpg (21.2 KB)   ansicht-script.jpg (102 KB)

Wiederholender "Hyperlink" auf "Textanker"

Martin Fischer
  
Beiträge gesamt: 12783

23. Jul 2009, 14:48
Beitrag # 9 von 32
Beitrag ID: #402919
Bewertung:
(6695 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Markus,

ein JavaScript braucht die Endung 'jsx' (oder 'js'), um von InDesign als solches erkannt zu werden.
Ein Skript mit der Endung 'vbs' wird als Visual Basic Script interpretiert.
Und das geht nicht.


Schau hier: Skripte installieren.
Oder hier: Skripte installieren nach Singelmann.


als Antwort auf: [#402918]
(Dieser Beitrag wurde von Martin Fischer am 23. Jul 2009, 14:49 geändert)

Wiederholender "Hyperlink" auf "Textanker"

Markus H.
Beiträge gesamt: 15

23. Jul 2009, 15:12
Beitrag # 10 von 32
Beitrag ID: #402923
Bewertung:
(6678 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Sali Martin

Ich habe es angepasst. Es läuft bis Zeile 39, ich find aber nichts falsches dort, siehe Anhänge.
"Try ohne Catch oder Finally"...


als Antwort auf: [#402919]
Anhang:
fehlermeldung2.jpg (18.8 KB)   ansicht-script2.jpg (120 KB)

Wiederholender "Hyperlink" auf "Textanker"

Martin Fischer
  
Beiträge gesamt: 12783

23. Jul 2009, 15:16
Beitrag # 11 von 32
Beitrag ID: #402924
Bewertung:
(6679 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Markus,

das ist ein Flüchtigkeitsfehler von mir.
Zeile 38 muss lauten: } catch(e){}

Ich hab's oben entsprechend korrigiert.


als Antwort auf: [#402923]

Wiederholender "Hyperlink" auf "Textanker"

Markus H.
Beiträge gesamt: 15

23. Jul 2009, 16:04
Beitrag # 12 von 32
Beitrag ID: #402943
Bewertung:
(6648 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Martin,
Ich habe mal die zweite Zeile rausgenommen und konzentriere mich auf das Wort "aP" (Rumpelstilzchen).
Den Textanker habe ich eröffnet auch mit der Bezeichnung "aP" (Anker1), siehe Anhang.
Kann es sein das bei der Textankerbezeichnung noch mehr "Code" rein muss? Habe auch die ' Zeichen mal rausgenommen => selbe Fehlermeldung.

Du hast von einer "kleinen Skriptstudie" geschrieben vielleicht wollen wir jetzt zuviel…

Markus


als Antwort auf: [#402924]
Anhang:
fehlermeldung3.jpg (20.7 KB)   ansicht-script3.jpg (114 KB)   NameTextanker.jpg (13.3 KB)

Wiederholender "Hyperlink" auf "Textanker"

Martin Fischer
  
Beiträge gesamt: 12783

23. Jul 2009, 16:13
Beitrag # 13 von 32
Beitrag ID: #402944
Bewertung:
(6650 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Markus,

Du hast die erste Zeile meines Skripts unterschlagen.

Code
var myArray = new Array; 


Wie Du bemerkt hast, bleibt das nicht ohne Folgen.


als Antwort auf: [#402943]

Wiederholender "Hyperlink" auf "Textanker"

Markus H.
Beiträge gesamt: 15

23. Jul 2009, 16:35
Beitrag # 14 von 32
Beitrag ID: #402951
Bewertung:
(6636 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
;-)

Geilo Martin, es läuft!

aber

ich sollte "unsichtbare Rechtecke" haben.
Wenn ich es manuel mache, frag er mich ja jeweils danach. Siehe PDF.


als Antwort auf: [#402944]
Anhang:
aP-Rahmen-hyperlink.jpg (125 KB)   aP-Rahmen-textanker.jpg (147 KB)

Wiederholender "Hyperlink" auf "Textanker"

Martin Fischer
  
Beiträge gesamt: 12783

23. Jul 2009, 17:00
Beitrag # 15 von 32
Beitrag ID: #402954
Bewertung:
(6633 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich hoffe, Du wünscht nicht, dass Dich auch das Skript jedes Mal fragt. ;-)

Ändere die Zeile var myHyperlink = d.hyperlinks.add({ source: mySource, destination:myAnchor}); wie folgt:

Code
var myHyperlink = d.hyperlinks.add({ source: mySource, destination:myAnchor, visible:false}); 


Übrigens: Wenn Du für den Text des Textankers dieselbe Bezeichnung verwendest wie für den zu suchenden Begriff, dann bekommt auch dieser eine Verknüpfung zum Textanker (also quasi zu sich selbst). Ich hoffe, das stört nicht.

Und wenn der Name des Textankers gleich lautet wie die Bezeichnungen der Textquellen (also beide 'aP' oder 'up' usw.) könnte man auch auf die Definition von Paaren verzichten und stattdessen eine eindimensionale Liste anlegen (myArray = ['aP', 'uP']). Das müsste man freilich in der Funktion dann entsprechend berücksichtigen.

Darüberhinaus könnte man die Liste extern in einer Textdatei anlegen und über das Skript per Dialog auswählen. So könnte man mehrere Listen verwalten und müsste nicht jedes Mal das Skript editieren.


als Antwort auf: [#402951]
(Dieser Beitrag wurde von Martin Fischer am 23. Jul 2009, 17:17 geändert)

Wiederholender "Hyperlink" auf "Textanker"

Markus H.
Beiträge gesamt: 15

24. Jul 2009, 11:27
Beitrag # 16 von 32
Beitrag ID: #403056
Bewertung:
(3115 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Genau :-)

Die Zeile habe ich geändert und es läuft nun ohne Rahmen!
Die Verknüpfung zu sich selbst stört überhaupt nicht.

Zur Zeit sind die Bezeichnungen gleich, könnte aber auch mal anders sein. So können wir gleich beides abdecken.

Das mit der Textdatei verstehe ich, nur nicht wie ich das einrichte... Aber das Skript zu editieren ist kein Problem.

Herzlichen Dank für Deine Arbeit!

Bonné Weekend aus Zürich
markus


als Antwort auf: [#402954]

Wiederholender "Hyperlink" auf "Textanker"

Gaby Leuenberger
Beiträge gesamt: 29

6. Nov 2013, 14:55
Beitrag # 17 von 32
Beitrag ID: #519364
Bewertung:
(2889 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Fischer

Ihr Script linktodestination ist sehr nützlich (Danke dafür!) und ich benötige es fast genau so wie Markus H., der die Anfrage ursprünglich gestellt hatte.

Ich bin eine Scripting-Anfängerin und habe versucht, wie von Ihnen vorgeschlagen die Funktion anzupassen an die Tatsache, dass Quelle (also der Verweis, von dem aus verlinkt werden soll) und Ziel (also der Textanker) gleich heissen. Daran scheitere ich und ich stelle fest, dass ich nicht ganz verstehe, was in der Funktion makeHyperlinks genau abläuft. Die Verwendung von aPair zB versteh ich überhaupt nicht. Der Parameter ist ja nirgends definiert?

Ich habe oben eine eindimensionale Liste angelegt, wie muss ich die denn jetzt einbauen?

Code
var myArray = new Array;  

var VerwGrep = "(103)" ; // mal ein Dummie der in meinem Text sicher matcht

//Alles zurücksetzten
app.findGrepPreferences = app.changeGrepPreferences = null;
app.findGrepPreferences.findWhat = VerwGrep;
app.findGrepPreferences.position = Position.normal;
app.findGrepPreferences.strokeColor="OR";

var Verw = app.activeDocument.findGrep (true);

for (v=0; v < Verw.length; v++){
myArray[v] = Verw[v].contents;
myArray[v] = myArray[v] + ""; //weil contents Zahlen sind, die evtl nicht als String interpretiert werden. siehe auch Fehler unten

}
$.writeln (myArray);



Mein bescheidener Versuch des Funktionsumbaus sieht so aus:
function makeHyperlinks(Verw)
Code
{  
// Prüfung, ob Anker vorhanden ist
var Anker = d.hyperlinkTextDestinations;
for (var j=0; j<Anker.length; j++)
{
var myAnchor = Anker[j].name;
if (myArray[i] == myAnchor)
{
//app.findTextPreferences.findWhat = aPair[0];
// gefundenes Stellen mit dem Begriff
//var r = d.findText();
//for ( var f = 0; f < r.length; f++ )
//{
try // um die wiederholte Verlinkung eines bereits verlinkten Texts abzufangen
{
// Hinzufügen der neuen Quelle
var mySource = d.hyperlinkTextSources.add({sourceText: myArray[i].text});
// Hinzufügen des Hyperlinds
var myHyperlink = d.hyperlinks.add({ source: mySource, destination:myAnchor});
} catch(e){$.writeln(e)}
}
}
}

Ich erhalte aber die Meldung "Fehler: Ungültiger Wert für Parameter "source" der Methode "add". Text erwartet, aber nothing erhalten."

Ist das ein Problem der insertionPoints, davon hab ich anderswo im Forum im Zusammenhang mit HypertextDestinations gelesen.

Ich steh grad ziemlich auf dem Schlauch und wäre wirklich froh um Hilfe.

Gaby Leuenberger


als Antwort auf: [#402954]

Wiederholender "Hyperlink" auf "Textanker"

Martin Fischer
  
Beiträge gesamt: 12783

6. Nov 2013, 15:37
Beitrag # 18 von 32
Beitrag ID: #519369
Bewertung:
(2869 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gaby,

kann im Moment nicht umfassend antworten, aber hier schon mal eine kleine Antwort.

Antwort auf: Die Verwendung von aPair zB versteh ich überhaupt nicht. Der Parameter ist ja nirgends definiert?


Beim Aufruf der Funktion makeHyperlinks() wird ein Wert übergeben, nämlich myArray[i]. Dieser Wert erhält innerhalb der Funktion den Bezeichner (die Variable) "aPair".

Hilft das schon einen kleinen Schritt weiter?


als Antwort auf: [#519364]
(Dieser Beitrag wurde von Martin Fischer am 6. Nov 2013, 15:37 geändert)

Wiederholender "Hyperlink" auf "Textanker"

Martin Fischer
  
Beiträge gesamt: 12783

6. Nov 2013, 15:43
Beitrag # 19 von 32
Beitrag ID: #519371
Bewertung:
(2866 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Quelle (also der Verweis, von dem aus verlinkt werden soll) und Ziel (also der Textanker) gleich heissen


Auf die Schnelle vielleicht so
Antwort auf: // Liste mit Paaren von a) gesuchter Begriff und b) definiertem Anker
myArray[0] = ['Rumpelstilzchen', 'Rumpelstilzchen'];
myArray[1] = ['Hänsel', 'Hänsel'];


statt so
Code
myArray[0] = ['Rumpelstilzchen', 'Anker1'];  
myArray[1] = ['Hänsel', 'Anker2'];



als Antwort auf: [#519364]

Wiederholender "Hyperlink" auf "Textanker"

Gaby Leuenberger
Beiträge gesamt: 29

6. Nov 2013, 15:54
Beitrag # 20 von 32
Beitrag ID: #519372
Bewertung:
(2855 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin

Wow, das ging ja super schnell, Danke! Ich denk mich mal weiter rein.
Auf die Idee mit dem doppelten Array mit gleichnamigen Paaren kam ich schon (den Dummie, der funktioniert, habe ich so eingerichtet), aber grundsätzlich fand ich das ineffizient, wenn sie doch sowieso gleich heissen. Am Ende sollen ja etwa tausend Seiten verlinkt werden, da weiss ich nicht, ob das dann nicht etwas langsam wird ...?

Auf jeden Fall jetzt schon vielen Dank für deine Bemühungen.


als Antwort auf: [#519371]

Wiederholender "Hyperlink" auf "Textanker"

Martin Fischer
  
Beiträge gesamt: 12783

6. Nov 2013, 16:05
Beitrag # 21 von 32
Beitrag ID: #519373
Bewertung:
(2846 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
In der Funktion kannst Du Dir die Unterscheidung aPair[0] und aPair[1] sparen.

Übergebe mit der Funktion einen Wert (String/Zeichenfolge, keinen Array), greif diesen in der Funktion z.B. mit einer Variable namens '_str' auf und verwende in der Funktion statt aPair[0] und aPair[1] nur _str.

Achte also darauf, dass Du nicht einen Array mit zwei Strings übergibst, sondern nur einen String.


als Antwort auf: [#519372]

Wiederholender "Hyperlink" auf "Textanker"

Gaby Leuenberger
Beiträge gesamt: 29

6. Nov 2013, 16:14
Beitrag # 22 von 32
Beitrag ID: #519374
Bewertung:
(2840 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wow, so klappt das tatsächlich Super!
Ich weiss zwar noch immer nicht zu 100%, was in der Funktion schrittweise alles passiert, aber es funktioniert (soll ja eine Funktion auch ;-)).

Jetzt kann ich endlich weitermachen und den richtigen Grep einbauen. Vielen Dank!

Beste Grüsse
Gaby


als Antwort auf: [#519373]

Wiederholender "Hyperlink" auf "Textanker"

Martin Fischer
  
Beiträge gesamt: 12783

6. Nov 2013, 16:21
Beitrag # 23 von 32
Beitrag ID: #519376
Bewertung:
(2832 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Schön, dass sich das so schnell lösen lassen konnte.

Weiterhin gutes Gelingen!


als Antwort auf: [#519374]

Wiederholender "Hyperlink" auf "Textanker"

Gaby Leuenberger
Beiträge gesamt: 29

8. Nov 2013, 14:28
Beitrag # 24 von 32
Beitrag ID: #519461
Bewertung:
(2724 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Lieber Martin

Wie befürchtet, habe ich mich zu früh gefreut ... *seufz*

Code
var myArray = new Array;  

var VerwGrep = "(?<![/\|/\\d|/\\d\\d])(\\d+(\\l+)?)" ; // Interne Verweise in Eckigen Klammern finden
//var VerwGrep = "(103|120)"; //mit dem dummieGrep hat's funktioniert

//Alles zurücksetzten
app.findGrepPreferences = app.changeGrepPreferences = null;
app.findGrepPreferences.findWhat = VerwGrep;

app.findGrepPreferences.appliedCharacterStyle="Link_OR";

var Verw = app.activeDocument.findGrep (true);

for (v=0; v < Verw.length; v++){
myArray[v] = Verw[v].contents;
myArray[v] = myArray[v] + "";

}
$.writeln (myArray);
$.writeln (myArray.length);


var d = app.activeDocument;

// Zurücksetzen der Suche-Ersetze Einstellungen
app.findTextPreferences = app.changeTextPreferences = null;

// Definition der Suche-/Ersetze Einstellungen (ganzes Wort, auch in Fußnoten suchen)
app.findChangeTextOptions.wholeWord = true;
app.findChangeTextOptions.includeFootnotes = true;

// Schleife durch die oben definierte Liste
for ( var i = 0; i < myArray.length; i++ )
makeHyperlinks(myArray[i]);


function makeHyperlinks(_str)
{
// Prüfung, ob Anker vorhanden ist
var myAnchor = null;
myAnchor = d.hyperlinkTextDestinations.item(_str);
if (myAnchor != null)
{
app.findTextPreferences.findWhat = _str;
app.findTextPreferences.appliedCharacterStyle="Link_OR";
// gefundenes Stellen mit dem Begriff
var r = d.findText();

for ( var f = 0; f < r.length; f++ )
{
try // um die wiederholte Verlinkung eines bereits verlinkten Texts abzufangen
{
// Hinzufügen der neuen Quelle
var mySource = d.hyperlinkTextSources.add({sourceText: r[f]});
// Hinzufügen des Hyperlinds
var myHyperlink = d.hyperlinks.add({ source: mySource, destination:myAnchor});
} catch(e){$.writeln(e)}
}
}
}


Jetzt linkt er mir die weiteren Verweise auf zb. auf 41 nicht mehr. Auch gibt mir das Skript den folgenden Fehler aus:
Das ausgewählte Objekt wird bereits von einem anderen Hyperlink verwendet.
Aber ich kann doch beliebig viele Links auf einen Anker setzen, dachte ich...
Deine function makeHyperlinks ist leider immer noch eine Blackbox für mich.

Verzeih, aber im Moment weiss ich gar nicht, in welche Richtung ich denken soll...

Gruss
Gaby


als Antwort auf: [#519376]

Wiederholender "Hyperlink" auf "Textanker"

Gaby Leuenberger
Beiträge gesamt: 29

8. Nov 2013, 14:58
Beitrag # 25 von 32
Beitrag ID: #519463
Bewertung:
(2708 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wenn ich die Funktion richtig interpretiere, dann sucht findText für r nocheinmal die Verweise, die ich doch schon oben im myArray habe.
Dann wäre es für mich logisch, dass es schon verlinkte Verweise gibt, denn im myArray gibt es natürlich mehrere Vorkommen von zb 41.

Ich habe versucht, eine Version ohne die zweite Schleife zu bauen, aber die gibt mir eben den Fehler zurück:
Ungültiger Wert für Parameter "source" der Methode "add". Text erwartet, aber "41" erhalten.
Dies wär dann für diesen Code
Code
function makeHyperlinks(_str)  
{
// Prüfung, ob Anker vorhanden ist
var Anker = d.hyperlinkTextDestinations;
for (var j=0; j<Anker.length; j++)
{
var myAnchor = Anker[j].name;
if (_str == myAnchor)
{
try // um die wiederholte Verlinkung eines bereits verlinkten Texts abzufangen
{
// Hinzufügen der neuen Quelle
var mySource = d.hyperlinkTextSources.add({sourceText: _str});
// Hinzufügen des Hyperlinds
var myHyperlink = d.hyperlinks.add({ source: mySource, destination:myAnchor});
} catch(e){}
}
}
}



als Antwort auf: [#519461]

Wiederholender "Hyperlink" auf "Textanker"

Gaby Leuenberger
Beiträge gesamt: 29

8. Nov 2013, 17:26
Beitrag # 26 von 32
Beitrag ID: #519475
Bewertung:
(2670 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Martin,

Ich hab das script jetzt doch anders aufgebaut (mit dem doppelten Array).
zusätzlich habe ich noch deine Funktion get_name() angehängt, damit die Benennung der Links. so läuft es. Allerdings weiss ich nicht, ob sich jetzt nicht grad mein InDesign erhängt hat zur Laufzeit :(

Naja, Montag ist auch wieder ein Tag.

Danke dir für deine Inputs, ein schönes Wochenende.

Gruss
Gaby


als Antwort auf: [#519463]

Wiederholender "Hyperlink" auf "Textanker"

Martin Fischer
  
Beiträge gesamt: 12783

8. Nov 2013, 21:57
Beitrag # 27 von 32
Beitrag ID: #519478
Bewertung:
(2618 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gaby,

sorry, war heute lange unterwegs.
Du hast recht, Montag ist auch wieder ein Tag.

Ein erholsames Wochenende
Martin Fischer


als Antwort auf: [#519475]

Wiederholender "Hyperlink" auf "Textanker"

Gaby Leuenberger
Beiträge gesamt: 29

11. Nov 2013, 10:10
Beitrag # 28 von 32
Beitrag ID: #519535
Bewertung:
(2537 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen Martin

Ich hab ein neues Problem entdeckt, leider.

Code
var myAnchor = null;  
myAnchor = d.hyperlinkTextDestinations.item(aPair[1]);
if (myAnchor != null)
{
app.findGrepPreferences.findWhat = aPair[0];
app.findGrepPreferences.appliedCharacterStyle="Link_OR";
app.findGrepPreferences.position = Position.normal;
// gefundenes Stellen mit dem Begriff
var r = d.findGrep();


In meinem Testfile habe ich Textanker von 21 bis 142. Ich habe aber auch Verweise auf zB 553. Die sollten ja nicht verlinkt werden, weil in der Datei dazu der Textanker fehlt.
Jetzt matcht aber natürlich der findGrep() den Verweis 553 auch mit dem Anker 53 und setzt einen Link.
Kann ich die app.findGrepPreferences auf "greedy" stellen?
findText mit der Option ganze Wörter funktioniert leider nicht, weil ich teilweise hinter den Verweisen hochgestellte Ziffern habe ... *seufz*

Vielleicht weisst du ja was?

Gruss
Gaby


als Antwort auf: [#519478]

Wiederholender "Hyperlink" auf "Textanker"

Martin Fischer
  
Beiträge gesamt: 12783

11. Nov 2013, 10:28
Beitrag # 29 von 32
Beitrag ID: #519540
Bewertung:
(2527 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Du musst eben mit einem Vergleich der Inhalte der Fundstellen für Quelle und Ziel sicherstellen, dass sie den identischen Wort-/Zeichenlaut haben und eindeutig sind (nicht mehrere Ziele für eine Quelle).

Dann, und nur dann, soll die Verlinkung erfolgen.


als Antwort auf: [#519535]

Wiederholender "Hyperlink" auf "Textanker"

Gaby Leuenberger
Beiträge gesamt: 29

11. Nov 2013, 13:08
Beitrag # 30 von 32
Beitrag ID: #519550
Bewertung:
(2490 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das habe ich versucht, aber irgendwie beisst sich die Katze in den Schwanz.
Code
		for ( var f = 0; f < r.length; f++ )   
{
try // um die wiederholte Verlinkung eines bereits verlinkten Texts abzufangen
{
if (r[f].contents == myAnchor.name){
// Hinzufügen der neuen Quelle
var mySource = d.hyperlinkTextSources.add({sourceText: r[f]});
// Hinzufügen des Hyperlinds

var myHyperlink = d.hyperlinks.add({ source: mySource, destination:myAnchor});
}
} catch(e){}
}


Wär ja mal, soweit so gut; aber weiter oben durchlaufe ich die Anker ja in einer Schlaufe und da finde ich halt wieder die falschen Sources (r[f]) von unten.
Ich hatte ja mal gedacht, ich könnte das abkürzen mit dem folgenden Code, und ganz ohne das doppelte Array:
Code
for ( var i = 0; i < myArray.length; i++ )  { 
makeHyperlinks(myArray[i]);
}

function makeHyperlinks(_str)
{
// Prüfung, ob Anker vorhanden ist
var Anker = d.hyperlinkTextDestinations;
for (var j=0; j<Anker.length; j++)
{
var myAnchor = Anker[j].name;
if (_str.contents == myAnchor)
{
try // um die wiederholte Verlinkung eines bereits verlinkten Texts abzufangen
{
// Hinzufügen der neuen Quelle
var mySource = d.hyperlinkTextSources.add({sourceText: _str.contents});
// Hinzufügen des Hyperlinds
var myHyperlink = d.hyperlinks.add({ source: mySource, destination:myAnchor});
} catch(e){$.writeln(e)}
}
}
}


Aber das funktioniert nach wie vor gar nicht, wobei ich nicht verstehe, weswegen nicht.
Ich bekomm irgendwie einfach nicht den Durchblick


als Antwort auf: [#519540]

Wiederholender "Hyperlink" auf "Textanker"

Martin Fischer
  
Beiträge gesamt: 12783

11. Nov 2013, 13:10
Beitrag # 31 von 32
Beitrag ID: #519551
Bewertung:
(332 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gaby,

ich schau mir das später (heute Abend) mal etwas genauer an.


als Antwort auf: [#519550]

Wiederholender "Hyperlink" auf "Textanker"

Gaby Leuenberger
Beiträge gesamt: 29

11. Nov 2013, 13:43
Beitrag # 32 von 32
Beitrag ID: #519554
Bewertung:
(318 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ok, Danke!


als Antwort auf: [#519551]
X