[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, 18:04
Beitrag # 1 von 22
Bewertung:
(5190 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: 12494

12. Mär 2012, 17:24
Beitrag # 2 von 22
Beitrag ID: #491711
Bewertung:
(5136 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()); 


Viele Grüße
Martin




als Antwort auf: [#491672]

MakeHyperlinks_CS.jsx erweitern?

iduser
Beiträge gesamt: 107

13. Mär 2012, 08:29
Beitrag # 3 von 22
Beitrag ID: #491723
Bewertung:
(5107 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, 07:35
Beitrag # 4 von 22
Beitrag ID: #491810
Bewertung:
(5080 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: 12494

14. Mär 2012, 08:20
Beitrag # 5 von 22
Beitrag ID: #491813
Bewertung:
(5067 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.

Viele Grüße
Martin




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

MakeHyperlinks_CS.jsx erweitern?

iduser
Beiträge gesamt: 107

14. Mär 2012, 19:14
Beitrag # 6 von 22
Beitrag ID: #491863
Bewertung:
(5022 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: 2659

14. Mär 2012, 20:03
Beitrag # 7 von 22
Beitrag ID: #491867
Bewertung:
(5010 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

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign Alle neuen Skripte mit
neu: WpsProjectHandler 31.05.2020, Version 3.XX, neue Funktionen.
MultiSave ist Bestandteil meines WpsProjecthandlers
Kundenstimmen


als Antwort auf: [#491863]

MakeHyperlinks_CS.jsx erweitern?

Martin Fischer
  
Beiträge gesamt: 12494

14. Mär 2012, 20:07
Beitrag # 8 von 22
Beitrag ID: #491868
Bewertung:
(5009 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.

Viele Grüße
Martin




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

MakeHyperlinks_CS.jsx erweitern?

iduser
Beiträge gesamt: 107

14. Mär 2012, 20:50
Beitrag # 9 von 22
Beitrag ID: #491874
Bewertung:
(4991 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: 12494

14. Mär 2012, 20:55
Beitrag # 10 von 22
Beitrag ID: #491877
Bewertung:
(4978 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.

Viele Grüße
Martin




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

MakeHyperlinks_CS.jsx erweitern?

iduser
Beiträge gesamt: 107

14. Mär 2012, 22:12
Beitrag # 11 von 22
Beitrag ID: #491888
Bewertung:
(4935 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: 12494

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

Viele Grüße
Martin




als Antwort auf: [#491888]

MakeHyperlinks_CS.jsx erweitern?

WernerPerplies
Beiträge gesamt: 2659

15. Mär 2012, 05:26
Beitrag # 13 von 22
Beitrag ID: #491895
Bewertung:
(4872 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.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign Alle neuen Skripte mit
neu: WpsProjectHandler 31.05.2020, Version 3.XX, neue Funktionen.
MultiSave ist Bestandteil meines WpsProjecthandlers
Kundenstimmen


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

MakeHyperlinks_CS.jsx erweitern?

Uwe Laubender
Beiträge gesamt: 4997

15. Mär 2012, 07:56
Beitrag # 14 von 22
Beitrag ID: #491901
Bewertung:
(4849 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…
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#491877]

MakeHyperlinks_CS.jsx erweitern?

Martin Fischer
  
Beiträge gesamt: 12494

15. Mär 2012, 08:30
Beitrag # 15 von 22
Beitrag ID: #491906
Bewertung:
(4836 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.

Viele Grüße
Martin




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

Aktuell

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
05.02.2021 - 05.11.2021

Digicomp Academy AG, Limmatstrasse 50, 8005 Zürich
Freitag, 05. Feb. 2021, 13.00 Uhr - Freitag, 05. Nov. 2021, 17.00 Uhr

Lehrgang

Bilden Sie sich zum zertifizierten Publishing-Multimedia-Profi aus. Neben Fotografie und Video befassen Sie sich mit der Medienproduktion, digitalen Publikationen und dem Webdesign für Desktop- und mobile Endgeräte.

Preis: CHF 10'500.-
Dauer: 30 Tage (ca. 210 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberatung AT digicomp DOT ch

digicomp.ch/d/9PM

Veranstaltungen
09.09.2021 - 17.12.2021

Digicomp Academy, Zürich
Donnerstag, 09. Sept. 2021, 13.00 Uhr - Freitag, 17. Dez. 2021, 19.00 Uhr

Lehrgang

Steigen Sie in die Welt des Publishings ein und erlangen Sie die Zertifizierung von Publishing NETWORK. Lernen Sie in diesem Lehrgang Druckmedien professionell zu erarbeiten, druckfertige PDFs zu erstellen und CI/CD-Vorgaben umzusetzen.

Preis: 6'300.– zzgl. 7.7% MWST
Dauer: 18 Tage(ca. 126 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt.

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberater AT digicomp DOT ch