hilfdirselbst.ch
Facebook Twitter gamper-media

**********************************************
        Facelifting HDS: Danke für deine Unterstützung!

**********************************************


Gaby Leuenberger m
Beiträge: 29
4. Dez 2017, 14:30
Beitrag #1 von 10
Bewertung:
(2109 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

hyperlinkURLDestinations schon von einem anderen Objekt verwendet


Hallo zusammen

Ich habe ein Problem mit identischen URLs im selben Dokument, die ich in Hyperlinks umwandeln möchte.

Wenn ich in der for-Schleife die gefundenen URLs abarbeite, beschwert sich das Skript bei 'hyperlinkURLDestinations.add()', dass diese Destination schon von einem anderen Objekt verwendet wir.
Hier mein Code dazu:
Code
var _myURL = _myDoc.findGrep(); 

for (var x = 0; x < _myURL.length; x++){ //Schleife durch alle gefundenen URLs, verlinke neu
var _URL = _myURL[x]; // Text-Objekt
var _source = _myDoc.hyperlinkTextSources.add(_URL); //hier muss Text sein, weil die Quelle ein Text-Objekt sein muss
var _URLstring = _myURL[x].contents; // String
var _dest = _myDoc.hyperlinkURLDestinations.add(_URLstring, {name: _URLstring}); //Destination will einen String
var _hyperlink = _myDoc.hyperlinks.add(_source, _dest, {name: _URLstring});
}


Ich habe versucht, die Destination über die ID oder den Namen anzusteuern, bin aber von der Syntax grade überfordert.

Vielleicht hat jemand eine Idee?

Danke und Gruss
Gaby Top
 
X
Martin Fischer  M  p
Beiträge: 11808
4. Dez 2017, 14:44
Beitrag #2 von 10
Beitrag ID: #561168
Bewertung:
(2108 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

hyperlinkURLDestinations schon von einem anderen Objekt verwendet


Hallo Gaby,

ein Textobjekt (Zeichen, Wort, ...) kann nur für je einen Hyperlink als Quelle dienen.
Was sollte dabei herauskommen, wenn Text auf mehrere unterschiedliche Ziele zielt. :-)

Prüfe vor der Zuweisung eines Hyperlinks, ob der Text bereits als Quelle für einen Hyperlink dient.
Wenn ja, entscheide, ob der alte Hyperlink weiter gelten oder gelöscht und durch den neuen ersetzt werden soll.

Viele Grüße
Martin
als Antwort auf: [#561164] Top
 
Gaby Leuenberger m
Beiträge: 29
4. Dez 2017, 14:52
Beitrag #3 von 10
Beitrag ID: #561169
Bewertung:
(2104 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

hyperlinkURLDestinations schon von einem anderen Objekt verwendet


Hallo Martin

Vielen Dank für deine rasche Antwort! Das ist mir im Prinzip ja klar, aber ich habe doch mehrere Textobjekte, an unterschiedlicher Stelle im Dokument, sie haben einfach denselben Inhalt, also der String ist identisch...?

Allfällige alte Hyperlinks, Quellen und Ziele habe ich vorgängig gelöscht, die können das Problem nicht sein.

Entschuldige, ich steh ich grad etwas auf dem Schlauch.

Lieber Gruss
Gaby
Gaby Leuenberger
als Antwort auf: [#561168] Top
 
Kai Rübsamen  M  p
Beiträge: 4484
4. Dez 2017, 16:20
Beitrag #4 von 10
Beitrag ID: #561181
Bewertung:
(2080 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

hyperlinkURLDestinations schon von einem anderen Objekt verwendet


Kann es sein, dass das nicht sauber programmiert ist? Wenn ich z.B. ein Hyperlinkziel per Skript anlege, das danach im UI lösche (es ist nicht mehr in der Liste), dann das Skript erneut starte, erhalte ich den Fehler auch. Offenbar spukt da noch etwas im Hintergrund …

Gruß Kai Rübsamen
_______________________
als Antwort auf: [#561169] Top
 
Gaby Leuenberger m
Beiträge: 29
5. Dez 2017, 11:13
Beitrag #5 von 10
Beitrag ID: #561206
Bewertung:
(1984 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

hyperlinkURLDestinations schon von einem anderen Objekt verwendet


Guten Morgen Kai

Ja, das dachte ich anfangs auch, weswegen ich ja alle Sources, Hyperlinks und Destinations zuerst entferne, und zwar je einzeln, weil die Arrays verschieden lang sein können.

Hier mal der ausführlichere Code (Warnung: Anfängerin):
Code
var  _myURL; 
var _myDoc = app.activeDocument;
var _oldDest = _myDoc.hyperlinkURLDestinations.everyItem().getElements();
var _oldSource = _myDoc.hyperlinkTextSources.everyItem().getElements();
var _aHyperlink = _myDoc.hyperlinks.everyItem().getElements(); //Array mit existierenden Hyperlinks

for (var i=_aHyperlink.length-1; i>=0; i--){//Hyperlinks entfernen
var _aHyperlinkRemove = _aHyperlink[i].remove();
_aHyperlink.pop();
}
for (var i=_oldDest.length-1; i>=0; i--){//Ziele entfernen
var _oldDestRemove = _oldDest[i].remove();
_oldDest.pop();
}
for (var i=_oldSource.length-1; i>=0; i--){//Quellen entfernen
var _oldSourceRemove = _oldSource[i].remove();
_oldSource.pop();
}




app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
//matche ALLE URLs
app.findGrepPreferences.findWhat = '((?:(?:https?|ftp|file)://|www\\.|ftp\\.)[-A-Za-z0-9+&@#/%=~_|$?!:,.]*[A-Za-z0-9+&@#/%=~_|$])';
var _myURL = _myDoc.findGrep();

for (var x = 0; x < _myURL.length; x++){ //Schleife durch alle gefundenen URLs, verlinke neu
var _URL = _myURL[x]; // Text-Objekt
try{
var _source = _myDoc.hyperlinkTextSources.add(_URL); //hier muss Text sein, weil die Quelle ein Text-Objekt sein muss
var _URLstring = _myURL[x].contents; // String
var _dest = _myDoc.hyperlinkURLDestinations.add(_URLstring, {name: _URLstring}); //Destination will einen String
var _hyperlink = _myDoc.hyperlinks.add(_source, _dest, {name: _URLstring}); }
catch (e){}
}


Und hier auch noch ein Muster meines Test-Dokuments:
Code
<https://www.revision.ch/liquiditaetsplanung.html> 
(zuletzt besucht am 29.06.2017).
https://www.nzz.ch
Blablabla
https://www.irgendeinewebseite.ch/index.html#id-1

https://www.irgendeinewebseite.ch/#a2343

https://www.nzz.ch


InDesign hätte ja das nette Hyperlink-Interface, das URLs zu Hyperlinks macht, aber das matcht a) die admin.ch-URL mit den # nicht korrekt und b) fügt es bei zwei identischen URLs auch nur einen Link ein. Ich verstehe aber auch nicht genau, was Martin denn nun meinte, aber vielleicht reden wir da nicht vom selben? Jedenfalls führt das Skript auch mit dem try-Block nicht zum Ziel.

Vielen Dank fürs Mitdenken, mir raucht schon der Kopf!

LG
Gaby
Gaby Leuenberger
als Antwort auf: [#561181] Top
 
Gaby Leuenberger m
Beiträge: 29
5. Dez 2017, 11:24
Beitrag #6 von 10
Beitrag ID: #561207
Bewertung:
(1984 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

hyperlinkURLDestinations schon von einem anderen Objekt verwendet


Ich glaube, ich habe das Problem gefunden:

Ich kann nicht denselben Namen vergeben für identische URLs...

Wenn ich bei
Code
   var _dest = _myDoc.hyperlinkURLDestinations.add( _URLtext, {name: _URLtext}); //Destination will einen String 
var _hyperlink = _myDoc.hyperlinks.add(_source, _dest, {name: _URLtext});


je die Option name: rauslösche, läuft es durch und setzt die Links (nummeriert sie dann halt und sie sind im Hyperlink-Panel dann nicht ohne weiteres zu identifizieren...

Vielleicht hat mir jemand eine schlaue Lösung?
Gaby Leuenberger
als Antwort auf: [#561206] Top
 
Kai Rübsamen  M  p
Beiträge: 4484
5. Dez 2017, 11:37
Beitrag #7 von 10
Beitrag ID: #561210
Bewertung:
(1980 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

hyperlinkURLDestinations schon von einem anderen Objekt verwendet


Hallo Gaby,

ich hab leider keine Zeit das heute zu testen. Ich löse das bei mir in der Praxis so, dass ich für alles einen Zähler mitlaufen lasse und damit gibt es quasi nichts doppelt.

Gruß Kai Rübsamen
_______________________
als Antwort auf: [#561207] Top
 
Gaby Leuenberger m
Beiträge: 29
5. Dez 2017, 11:45
Beitrag #8 von 10
Beitrag ID: #561212
Bewertung:
(1977 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

hyperlinkURLDestinations schon von einem anderen Objekt verwendet


Hallo Kai

Kein Stress, ich muss auch gleich wegrennen, und kann erst morgen wieder weitermachen.

Ich werd das mit dem Zähler mal versuchen, aber ich weiss grad noch nicht so recht, wie ich den der name-Option mitgeben soll.

Interessant: Wenn ich zu Fuss verlinke, macht ID auch einen Zähler hinter den URL-Namen, wenn ich über das Panel automatisch verlinke, dann setzt mir ID nummerierte Links unter ein- und dieselbe URL, oh Objektmodell, du treibst mich in den Wahnsinn...

Merci und Gruss
Gaby
Gaby Leuenberger
als Antwort auf: [#561210] Top
 
WernerPerplies
Beiträge: 2184
5. Dez 2017, 12:18
Beitrag #9 von 10
Beitrag ID: #561214
Bewertung:
(1960 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

hyperlinkURLDestinations schon von einem anderen Objekt verwendet


Hallo Gaby,

ja Hyperlinks haben es in sich, und mit dem Namen liegst Du richtig.

Ich habe das bei meinen Skripten , z. B. bei (
WpsHyperlinkInspector – Alle Hyperlinkinformationen einer Adobe InDesign Datei auf einen Blick), gelöst, indem ich entweder eine eigene Buchhaltung der Links gepflegt oder alternativ vor Erzeugung das Vorhanden sein geprüft habe.

Wenn ein Link schon vorhanden ist und voll gültig ist, erzeuge ich einen neuen Namen + (Zähler).

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler jetzt mit Vollwaschgang
Aktuelles
XING
als Antwort auf: [#561207] Top
 
Gaby Leuenberger m
Beiträge: 29
6. Dez 2017, 08:29
Beitrag #10 von 10
Beitrag ID: #561242
Bewertung:
(1894 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

hyperlinkURLDestinations schon von einem anderen Objekt verwendet


Hallo Werner (und Kai)

Danke für die Antwort. Heute morgen bin ich wacher und mir hat auch gleich gedämmert, wie ich den Zähler beim Namen setzen kann. Jetzt flutscht alles wunderbar! :)

Vielen Dank allen fürs Mitdenken, ich finde es immer wieder faszinierend, wie sehr ich mich vor eine Wand fahren kann und dann gar nichts mehr durchschaue, und einen Tag später fällt es wie Schuppen von den Augen ... (leider nicht immer :)).

Einen schönen Nikolaus wünsch ich

Liebe Grüsse
Gaby
als Antwort auf: [#561214] Top
 
X