[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Textanker über Script anlegen

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

Textanker über Script anlegen

MarioF
Beiträge gesamt: 390

7. Sep 2014, 23:49
Beitrag # 1 von 2
Bewertung:
(2698 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
ich stehe noch am Anfang was das Scripten betrifft und benötige evt. ein Gedankenanstoß ;)
Ich wollte ein Script machen, welches aus einen Absatzformat ein Textanker erstellt. Das klappt so weit auch ganz gut.
Code
var doc = app.activeDocument       
var myParagraphStyle = sucheDialog(doc);
app.changeTextPreferences = NothingEnum.nothing;
app.findTextPreferences = NothingEnum.nothing;
app.findTextPreferences.appliedParagraphStyle = myParagraphStyle;

var myFound = app.activeDocument.findText();

for( var n = myFound.length-1; n >= 0; n-- ) {

var myTargetContent= myFound[n];
var aText = myTargetContent.texts[0];
var aDest =doc.hyperlinkTextDestinations.add(aText, {name:aText.contents});


}



function sucheDialog(doc){
var myFieldWidth = 120;

var myCharStyles = doc.paragraphStyles.everyItem().name;

var sucheDialog = app.dialogs.add({name:"Textanker erstellen"});


with(sucheDialog.dialogColumns.add()){
with(dialogRows.add()){



with(dialogColumns.add()){
staticTexts.add({staticLabel:"Absatzformat: ", minWidth:myFieldWidth});
}
with(dialogColumns.add()){
var mySourceDropdown = dropdowns.add({stringList:myCharStyles, selectedIndex:myCharStyles.length-1});
}
}
}
var myResult = sucheDialog.show();
if(myResult == true){
var theCharStyle =myCharStyles[mySourceDropdown.selectedIndex];
sucheDialog.destroy();
}
else{
myDialog.destroy()
exit();
}
return theCharStyle;
}

Nun würde ich die ganze Sache ein wenig erweitern. Es soll bei der Abfrage des Absatzformat eine Abfrage erfolgen, ob nur neue Eintrage mit dem Absatzformat als Textanker verlinkt werden oder alle. Mit der Option soll vermieden weden, das es doppelte oder mehr Einträge gibt.
X

Textanker über Script anlegen

Uwe Laubender
Beiträge gesamt: 5319

13. Sep 2014, 12:04
Beitrag # 2 von 2
Beitrag ID: #532016
Bewertung:
(2535 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Mario!

Nur so ein paar Ideen in die Runde:

hyperlinkTextDestination-Einträge werden über einen Special Character im Text repräsentiert. Kodierung: <FEFF> in der Textsuche. Die GREP-Suche taugt dafür nicht. Vorsicht: Ein Vorkommen von <FEFF> heißt nicht unbedingt, dass es sich um eine hyperlinkTextDestination handelt.

Alle destinationText-Werte aller hyperlinkTextDestinations werden über insertionPoints definiert.

Code
app.documents[0].hyperlinkTextDestinations.everyItem().destinationText 


Dies ergibt ein Array von insertionPoints. Diese könnten abgefragt werden, ob deren Formatierung der des gewünschten Absatzformats entspricht.

An einen konkreten Absatz kommst Du so heran:

Code
app.documents[0].hyperlinkTextDestinations[0].destinationText.paragraphs[0] 


Fragen, die sich mir stellen:

Was geschieht, wenn nach einem Skriptdurchgang Text umformatiert wurde?

Was, wenn hyperlinkTextDestinations in Verwendung sind? Können, sollen diese zusammen mit ihren Hyperlinks gelöscht werden, falls das falsche Absatzformat zugewiesen wurde?

Ach ja, Du wirst mit der Erzeugung der hyperlinkTextDestinations auf den Bauch fallen, wenn verschiedene Absätze mit gleichem Inhalt vorkommen, denn Du benamst ja die hyperlinkTextDestinations nach dem Inhalt des gefundenen Absatzes. Die Namen von hyperlinkTextDestinations müssen einmalig sein. Das müsstest Du sicherstellen.

Nur so mal zum Nachdenken…


als Antwort auf: [#531825]