[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt MakeHyperlinks_CS.jsx erweitern?

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

MakeHyperlinks_CS.jsx erweitern?

iduser
Beiträge gesamt: 107

11. Mär 2012, 19:04
Beitrag # 1 von 22
Bewertung:
(5525 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
gern würde ich das Script von Martin Fischer erweitern wollen, jedoch stehe ich auf dem Schlauch und weiß nicht genau wo ich ansetzen soll.

Was das Script machen soll:
aus allen Absätze mit dem Absatzformat "Hyperlink" soll ein Hyperlink erstellt werden. Der Teil der in die URL aufgenommen werden soll besteht aber nur aus den letzten 7 Zeichen (nur Buchstaben und Zahlen) des Absatzes.

Bsp.:

"Dies ist Absatz1 - 1b6f5r8"
bekommt die URL http://www.abc.de/1b6f5r8

"Dies ist Absatz2 - 165d776"
bekommt die URL http://www.abc.de/165d776

Den regulären Ausdruck habe ich noch hinbekommen, ab dann weis ich nicht mehr weiter...

so siehts zur Zeit aus.

Code
main();   

function main() {
with (app.findChangeGrepOptions) {
includeFootnotes = true;
includeHiddenLayers = false;
includeLockedLayersForFind = false;
includeLockedStoriesForFind = false;
includeMasterPages = true;
}

app.findGrepPreferences = null;

// URL
app.findGrepPreferences.appliedParagraphStyle = "Hyperlink";
app.findGrepPreferences.findWhat = '(\[\\d\\w]{7})\$';
var myURLs = app.activeDocument.findGrep();
makeHyperlink('http://www.soll-immer-gleich-bleiben.de/', myURLs);

}

function makeHyperlink(aPrefix, myArray) {
for (var i = myArray.length-1; i >= 0; i-- ) {
try{
var aString = aPrefix + myArray[i].contents.replace(aPrefix, '')
var myHyperlinkTextSource = app.activeDocument.hyperlinkTextSources.add(myArray[i]);
var myHyperlinkDestination = app.activeDocument.hyperlinkURLDestinations.add({destinationURL:aString});
var myHyperlink = app.activeDocument.hyperlinks.add({source:myHyperlinkTextSource, destination:myHyperlinkDestination});
//myHyperlink.visible = true;
}
catch(e){}
}
}


Aber wie kann ich nun die Auswahl der gefundenen Stelle erweitern? Oder ist es sinnvoller den kompletten Absatz mit dem Absatzformat zu suchen und sich davon die letzten Zeichen zu extrahieren und diese in die url einfügen.

Ich bin für jeden Vorschlag dankbar,
Viele Grüße
Philipp
X

MakeHyperlinks_CS.jsx erweitern?

Martin Fischer
  
Beiträge gesamt: 12783

12. Mär 2012, 18:24
Beitrag # 2 von 22
Beitrag ID: #491711
Bewertung:
(5471 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Philipp,

Dein GREP lässt sich etwas einfacher fassen.
Zahlen (\d) sind eine Untergruppe der Wortzeichen (\w).
Außerdem brauchst Du die runden Klammern nicht.
Du suchst ja nur – und zwar ohne Wiederholung von Phrasen.
Eventuell ist am Anfang ein Wortbegrenzer hilfreich.

Versuch's mal damit.
''\\<\\w{7}\$''

Antwort auf: Aber wie kann ich nun die Auswahl der gefundenen Stelle erweitern?


Du möchtest nicht nur das letzte Wort, sondern den ganzen Absatz als Hyperlinkquelle verwenden? Dann passe die hyperlinkTextSource entsprechend an.

Code
var myHyperlinkTextSource = app.activeDocument.hyperlinkTextSources.add(myArray[i].paragraphs.firstItem()); 



als Antwort auf: [#491672]

MakeHyperlinks_CS.jsx erweitern?

iduser
Beiträge gesamt: 107

13. Mär 2012, 09:29
Beitrag # 3 von 22
Beitrag ID: #491723
Bewertung:
(5442 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
du hast mich vollkommen richtig verstanden. Das ist genau das was ich gern möchte.

Vielen Dank für deine Unterstützung :)


als Antwort auf: [#491711]

MakeHyperlinks_CS.jsx erweitern?

iduser
Beiträge gesamt: 107

14. Mär 2012, 08:35
Beitrag # 4 von 22
Beitrag ID: #491810
Bewertung:
(5415 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
eine Frage hätte ich noch.
In der Hyperlinkpalette sind die Hyperlinks von hinten aufgelistet.
Sodass Hyperlink1 ist der letzte im Dokument und Hyperlink X ist der Erste ist.

Worin liegt der Vorteil, die Hyperlinks beginnend von hinten zu erstellen?

Viele Grüße
Philipp


als Antwort auf: [#491723]

MakeHyperlinks_CS.jsx erweitern?

Martin Fischer
  
Beiträge gesamt: 12783

14. Mär 2012, 09:20
Beitrag # 5 von 22
Beitrag ID: #491813
Bewertung:
(5402 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Philipp,

wenn Hyperlinkquellen angelegt werden, ändert sich der Index der InsertionPoints danach. Um sicherzustellen, dass diese Änderung sich nicht negativ auf die ermittelten Textobjekte für die Anlage weiterer Quellen auswirkt, habe ich die Schleife rückwärts gewählt.

Es ist durchaus möglich (sogar sehr wahrscheinlich), dass dies gar nicht nötig ist.
Probier's einfach mal aus und dreh die Schleife um.
Und teile uns Deine Ergebnisse bzw. Erfahrungen mit.


als Antwort auf: [#491810]
(Dieser Beitrag wurde von Martin Fischer am 14. Mär 2012, 09:21 geändert)

MakeHyperlinks_CS.jsx erweitern?

iduser
Beiträge gesamt: 107

14. Mär 2012, 20:14
Beitrag # 6 von 22
Beitrag ID: #491863
Bewertung:
(5357 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
ich habe gerade die Schleife umgestellt, und konnte noch keine negativen Auswirkungen, in diesem Fall feststellen.

Code
for (var i = 0; i < myArray.length; i++ ) 


Ich habe auch noch vor, ein Script zu erstellen, welches die Hyperlinks zur Kontrolle ausließt, mal schauen ob sich da noch Langzeitfolgen zeigen. Sollte dies der Fall sein, werde ich auf jedenfall davon berichten.

Danke für deine Hilfe,
Gruss,
Philipp


als Antwort auf: [#491813]

MakeHyperlinks_CS.jsx erweitern?

WernerPerplies
Beiträge gesamt: 2762

14. Mär 2012, 21:03
Beitrag # 7 von 22
Beitrag ID: #491867
Bewertung:
(5345 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Philipp,

Zitat Ich habe auch noch vor, ein Script zu erstellen, welches die Hyperlinks zur Kontrolle ausließt


Meinst Du in etwa so etwas?
Wps Hyperlink-Inspektor


als Antwort auf: [#491863]

MakeHyperlinks_CS.jsx erweitern?

Martin Fischer
  
Beiträge gesamt: 12783

14. Mär 2012, 21:07
Beitrag # 8 von 22
Beitrag ID: #491868
Bewertung:
(5344 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Philipp,

prima.
Wenn ich mir unsicher bin, ob die Schleife vorwärts Probleme bereiten könnte, und zu faul, es einfach auszuprobieren, lege ich die Schleife rückwärts an, um möglichen Ärger zu umgehen. Zumal damit in der Regel keine negativen Konsequenzen zu befürchten sind – außer dass die Hyperlinks dann freilich auch in umgekehrter Reihenfolge in der Palette erscheinen.

Wenn ich mir die Referenzierung der Textobjekte für die Quellen und Ziele vor Augen führe, scheint es mir jetzt auch plausibel, dass selbst die Schleife vorwärts nicht die befürchteten Folgen mit sich bringt. Durch das Skript wird ja nicht die Zahl der Zeichen verändert, sondern nur die Zahl der Einfügepunkte.


als Antwort auf: [#491863]
(Dieser Beitrag wurde von Martin Fischer am 14. Mär 2012, 21:52 geändert)

MakeHyperlinks_CS.jsx erweitern?

iduser
Beiträge gesamt: 107

14. Mär 2012, 21:50
Beitrag # 9 von 22
Beitrag ID: #491874
Bewertung:
(5326 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,
so in etwa stell ich mir das vor. Deine Variante ist sehr ausführlich.
Bei mir soll nur die TextQuelle, die ZielURL und gegebenenfalls den Namen in der Hyperlinkpalette angezeigt werden. Ach und die Seitenzahl auf der der Link steht.

Wo wir gerade dabei sind...
ich lese in einer Schleife, mit ...
Code
app.activeDocument.hyperlinkTextSources.item(i).sourceText.contents 

... die Quelle aus, aber wie bekommt man dann die seitenzahl heraus?

ich habe schon probiert, mit ...
Code
app.activeDocument.hyperlinkTextSources.item(i).sourceText.parent 

... das Elternelement herauszufinden, dabei liefert der ESTK [object story] als Ergebnis
und bei ...
Code
app.activeDocument.hyperlinkTextSources.item(i).sourceText.parent.parent 

... [object document]

aber wo kann ich jetzt ansetzen, um die Seitenzahl im Dokument zu ermitteln, auf der der Hyperlink vorkommt?

Das Script ist schon fast fertig (bis auf die Seitenzahlen).
Später werden die gesammelten Informationen, als Liste in ein neues Dokument ausgegeben.

Viele Grüße
Philipp


als Antwort auf: [#491867]

MakeHyperlinks_CS.jsx erweitern?

Martin Fischer
  
Beiträge gesamt: 12783

14. Mär 2012, 21:55
Beitrag # 10 von 22
Beitrag ID: #491877
Bewertung:
(5313 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: aber wie bekommt man dann die seitenzahl heraus?


Verwende dazu z.B. die findPage()-Funktion von Gregor Fellenz und übergib ihr das Textobjekt aus app.activeDocument.hyperlinkTextSources.item(i).sourceText.


als Antwort auf: [#491874]
(Dieser Beitrag wurde von Martin Fischer am 14. Mär 2012, 21:57 geändert)

MakeHyperlinks_CS.jsx erweitern?

iduser
Beiträge gesamt: 107

14. Mär 2012, 23:12
Beitrag # 11 von 22
Beitrag ID: #491888
Bewertung:
(5270 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Martin,
!!! YOU MADE MY DAY!!! IT'S PERFECT !!!

Viele Grüße
Philipp

PS: Nochmal Danke :)


als Antwort auf: [#491877]

MakeHyperlinks_CS.jsx erweitern?

Martin Fischer
  
Beiträge gesamt: 12783

14. Mär 2012, 23:29
Beitrag # 12 von 22
Beitrag ID: #491890
Bewertung:
(5262 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Keine Ursache.
Ich habe lediglich einen Querverweis beigesteuert. ;-)


als Antwort auf: [#491888]

MakeHyperlinks_CS.jsx erweitern?

WernerPerplies
Beiträge gesamt: 2762

15. Mär 2012, 06:26
Beitrag # 13 von 22
Beitrag ID: #491895
Bewertung:
(5207 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Philipp,

mein Werk ist auch noch in Arbeit, Seite kommt noch und man wird direkt aus dem Treeview an die entsprechende Stelle spingen können, außerdem wird es Lösch- und Änderungsmöglichkeiten geben.


als Antwort auf: [#491874]
(Dieser Beitrag wurde von WernerPerplies am 15. Mär 2012, 06:27 geändert)

MakeHyperlinks_CS.jsx erweitern?

Uwe Laubender
Beiträge gesamt: 5317

15. Mär 2012, 08:56
Beitrag # 14 von 22
Beitrag ID: #491901
Bewertung:
(5184 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Martin Fischer ] …Verwende dazu z.B. die findPage()-Funktion von Gregor Fellenz und übergib ihr das Textobjekt…


Hallo, Martin!
Dave Saunders sollte an dieser Stelle nicht unerwähnt bleiben, der den ersten Entwurf dieser Funktion geschrieben hat.

Bemerkenswert von meiner Seite ist, dass die Funktion auch bei einer ausgewählten Tabelle seinen Dienst tut. Wie kommt das?

Das Objekt Table hat schließlich keine Property parentPage und ist auch in der Liste der case-Abfragen nicht zu finden. Zudem kann laut Dokumentation der parent von Table niemals Page sein.

So habe ich getestet (die Funktion findPage() muss natürlich auch vorhanden sein) mit InDesign CS 4 und CS5.5:

Code
//Usage of findPage(theObj) by Dave Saunders and Gregor Fellenz 
//A Table is selected:

try{
var pageOfSelectedObject = findPage(app.selection[0]);
}catch(e){alert(e.message)};

alert(app.selection[0].constructor.name +"\r"+ pageOfSelectedObject +"\r"+ pageOfSelectedObject.name);

/*
Result:
Table
[object Page]
1
*/
$.writeln(app.selection[0].constructor.name +"\r"+ pageOfSelectedObject +"\r"+ pageOfSelectedObject.name);


Zum weiteren Verständnis:
ich hätte erwartet, dass die Funktion findPage(theObj) folgende Zeile enthalten müsste, um auch Tabellen zu behandeln:

Code
case Table: theObj = theObj.cells[0].insertionPoints[0].parentTextFrames[0]; break; 


Braucht sie aber offensichtlich nicht…


als Antwort auf: [#491877]

MakeHyperlinks_CS.jsx erweitern?

Martin Fischer
  
Beiträge gesamt: 12783

15. Mär 2012, 09:30
Beitrag # 15 von 22
Beitrag ID: #491906
Bewertung:
(5171 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

Antwort auf: Dave Saunders sollte an dieser Stelle nicht unerwähnt bleiben, der den ersten Entwurf dieser Funktion geschrieben hat.


Du hast freilich recht.
Normalerweise erwähne ich beide, Dave, der die Grundfunktion ausgearbeitet hat, und Gregor, der ihr den letzten Schliff gegeben hat.
Ich habe mich dieses Mal kürzer gehalten, weil ich annahm, dass sich Philipp mehr für die Funktion selbst als für die Autoren, die sich darum verdient gemacht haben, interessiert. Aber Dave sollte tatsächlich als der eigentliche Urheber erwähnt werden.


Antwort auf: Bemerkenswert von meiner Seite ist, dass die Funktion auch bei einer ausgewählten Tabelle seinen Dienst tut. Wie kommt das?


Am Anfang findest Du die Abfrage if (theObj.hasOwnProperty("baseline")).
Hast Du Text in einer Zelle ausgewählt oder den Cursor in einer Zelle platziert, trifft dies zu und der Variable des zu untersuchenden Objekts wird parentTextFrames[0] des Objekts zugewiesen (theObj = theObj.parentTextFrames[0];).
Da bist Du dann schon beim Textrahmen und von dem ist es nicht mehr weit bis zur Seite. Denn wenn der Textrahmen eine Eigenschaft parentPage hat (und damit nicht anderswo verankert ist), bist Du am Ziel.


als Antwort auf: [#491901]
(Dieser Beitrag wurde von Martin Fischer am 15. Mär 2012, 09:49 geändert)
X