[GastForen Programmierung/Entwicklung AppleScript ID CS6: Objektstil ändern

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

ID CS6: Objektstil ändern

Goar
Beiträge gesamt: 395

8. Jun 2022, 11:32
Beitrag # 1 von 15
Bewertung:
(9528 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Skripter,

ich möchte in einem Objektstil die Optionen für verankertes Objekt von »Benutzerdefiniert« ändern in »Eingebunden«. Wenn ich das manuell mache, springen alle verankerten Textrahmen zu ihrem Anker.

Mit diesem Skript …
Code
tell application "Adobe InDesign CS6" 
tell document 1
activate
set anchObjSet to anchored object settings of properties of object style "amerikPage"
-- get anchored position of properties of anchObjSet
set properties of anchObjSet to {anchored position:inline position}
end tell
end tell

… wird die Änderung im Objektstil zwar ausgeführt, sie wirkt sich aber nicht auf das Layout aus; die verankerten Rahmen bleiben, wo sie sind.
Was fehlt da noch? Oder ist das der falsche Weg?

Gruß
X

ID CS6: Objektstil ändern

Uwe Laubender
Beiträge gesamt: 5316

8. Jun 2022, 16:41
Beitrag # 2 von 15
Beitrag ID: #583651
Bewertung:
(9491 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,
ich kann Dir zwar bei AppleScript nicht weiterhelfen, jedoch weiß ich aus dem ExtendScript DOM, dass man bei Objektstilen die gewünschte Funktion erstmal prinzipiell freischalten muss.

In ExtendScript ausgedrückt:

Code
enableAnchoredObjectOptions = true; 


Daraufhin folgen dann alle anderen Eigenschaften für verankerte Objekte in den anchoredObjectSettings. Es genügt also nicht, die anchoredObjectSettings zu definieren, sondern man muss sie explizit zuschalten.


als Antwort auf: [#583644]

ID CS6: Objektstil ändern

Goar
Beiträge gesamt: 395

8. Jun 2022, 16:53
Beitrag # 3 von 15
Beitrag ID: #583652
Bewertung:
(9486 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

etwas Derartiges befürchte ich auch in AS; bei vielen Manipulationen muss man erst in einem Nebenzimmer oder hinter einer Geheimtür einen Schalter umlegen, bevor die offensichtliche Handlung gelingt.
Bloß – wie lautet das Gegenstück in AS. In der Dokumentation zu AS in ID ist nur zu finden, wie man einen Objektstil anlegt und anwendet; da ist keine Rede von einem Freischaltbefehl. Auch in der AS-Bibliothek zu ID konnte ich nichts aufspüren.

Danke aber schon mal für den Hinweis


als Antwort auf: [#583651]

ID CS6: Objektstil ändern

Hans Haesler
  
Beiträge gesamt: 5826

8. Jun 2022, 17:30
Beitrag # 4 von 15
Beitrag ID: #583653
Bewertung:
(9475 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,

vorneweg: Einen herzlichen Dank an Uwe für seinen wertvollen Hinweis.

Leider muss ich mich momentan um andere Scriptprobleme kümmern. Dennoch habe ich nun rasch in der AppleScript-Bibliothek von InDesign nachgeforscht und folgendes gefunden:
-----
enable anchored object options (boolean) : If true, the object style will apply an anchored object setting.
-----

Kann gut sein, dass es mit ...
Code
set enable anchored object options to true 

... klappen wird.

Gruss, Hans


als Antwort auf: [#583652]

ID CS6: Objektstil ändern

Goar
Beiträge gesamt: 395

8. Jun 2022, 18:12
Beitrag # 5 von 15
Beitrag ID: #583654
Bewertung:
(9450 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

ich hoffe, es geht dir gut!

enable anchored object options gehört zu den properties von object style.
Es stand schon auf true.
Aber auch wenn ich diesen Wert noch einmal auf true setze, wirkt sich die Änderung am Objektstil nicht aus.

Hm


als Antwort auf: [#583653]

ID CS6: Objektstil ändern

Uwe Laubender
Beiträge gesamt: 5316

9. Jun 2022, 10:33
Beitrag # 6 von 15
Beitrag ID: #583655
Bewertung:
(9344 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,
wir könnten natürlich auch mogeln.
Etwas ExtendScript in Dein AppleScript einfügen und mit beispielsweise doScript zum Laufen bringen.


als Antwort auf: [#583644]

ID CS6: Objektstil ändern

Goar
Beiträge gesamt: 395

9. Jun 2022, 19:07
Beitrag # 7 von 15
Beitrag ID: #583658
Bewertung:
(9270 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

do script als Aufruf eines externen AppleScripts ist mir früher schon gelungen.
Hier ein »fremdsprachiges« Skript einzufügen ist für mich aber eine Nummer zu groß, zumal ich mich mit ExtendScript nicht auskenne.
Mit der oben zitierten Zeile konnte ich auch per do script nichts bewirken.

Kann ich dazu etwas Unterstützung bekommen?

Herzlich grüßt


als Antwort auf: [#583655]

ID CS6: Objektstil ändern

Uwe Laubender
Beiträge gesamt: 5316

13. Jun 2022, 13:40
Beitrag # 8 von 15
Beitrag ID: #583674
Bewertung:
(9122 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,
lade doch 'mal eine Beispieldatei aus InDesign CS6 auf die Dropbox und stelle den Download-Link bereit. Ich schau' mir das mal mit meiner "ExtendScript-Brille" an. Falls es mit ExtendScript funktioniert, werden wir das auch mit AppleScript und der do script-Methode zum Laufen bringen.


als Antwort auf: [#583644]

ID CS6: Objektstil ändern

Uwe Laubender
Beiträge gesamt: 5316

13. Jun 2022, 21:23
Beitrag # 9 von 15
Beitrag ID: #583681
Bewertung:
(9093 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ohne das testen zu können, glaube ich, dass hier der Hund begraben sein könnte:

Code
{anchored position:inline position} 


In ExtendScript jedenfalls braucht es für [b]anchoredPosition diesen Wert als Enumerator:
Code
{ 
anchoredPosition : AnchorPosition.INLINE_POSITION
}


Also fehlt möglicherweise ein Teil des Enumerators.
Aber frage mich bitte nicht wie da die genaue Syntax für AppleScript lautet.


als Antwort auf: [#583658]

ID CS6: Objektstil ändern

Uwe Laubender
Beiträge gesamt: 5316

13. Jun 2022, 21:46
Beitrag # 10 von 15
Beitrag ID: #583682
Bewertung:
(9080 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,
falls ich mit meiner Vermutung mit dem Enumerator in AppleScript falsch liege, kann das Problem einfach daran liegen, dass nach der Änderung des Objektstils alle Elemente, die mit diesem Stil ausgezeichnet sind, trotzdem nicht auf die Veränderung reagieren, sondern einfach eine Abweichung im zugewiesenen Objektstil anzeigen.

Das ist jedenfalls mit ExtendScript der Fall, wenn ich diesen Teil des Codes laufen lasse:

Code
var doc = app.documents[0]; 
var objStyle = doc.objectStyles.itemByName("amerikPage");
if( objStyle.isValid )
{
objStyle.enableAnchoredObjectOptions = true ;
objStyle.anchoredObjectSettings.properties =
{
anchoredPosition : AnchorPosition.INLINE_POSITION
};

};


Um zum gewünschten Ergebnis zu kommen, braucht es noch eine Zutat.

Ich untersuche also alle Elemente der Datei und frage nach dem zugewiesenen Objektstil. Ist der geänderte Objektstil zugewiesen, dann weise ich ihn erneut zu mit einer Methode (Funktion), die die Abweichungen löscht.

Der untere Code zusätzlich zum obigen erledigt dann den Job:

Code
var allPageItems = doc.allPageItems; 
for( var n=0; n<allPageItems.length; n++ )
{
if( allPageItems[n].appliedObjectStyle == objStyle )
{
allPageItems[n].applyObjectStyle( objStyle , true );
};
};



als Antwort auf: [#583658]
(Dieser Beitrag wurde von Uwe Laubender am 13. Jun 2022, 21:48 geändert)

ID CS6: Objektstil ändern

Uwe Laubender
Beiträge gesamt: 5316

13. Jun 2022, 22:10
Beitrag # 11 von 15
Beitrag ID: #583683
Bewertung:
(9063 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Kommen wir zur Einschleusung des oben genannten ExtendScript-Codes über do script nach AppleScript. Vielleicht gelingt das einfach so:
Code
set myJavaScript to '''var doc = app.documents[0]; 
var objStyle = doc.objectStyles.itemByName("amerikPage");
if( objStyle.isValid )
{
objStyle.enableAnchoredObjectOptions = true ;
objStyle.anchoredObjectSettings.properties =
{
anchoredPosition : AnchorPosition.INLINE_POSITION
};

};

var allPageItems = doc.allPageItems;
for( var n=0; n<allPageItems.length; n++ )
{
if( allPageItems[n].appliedObjectStyle == objStyle )
{
allPageItems[n].applyObjectStyle( objStyle , true );
};
};'''

do script myJavaScript language javascript


Wobei ich unsicher bin, ob das Tripple-Fencing mit den drei einfachen Anführungen um den ExtendScript-Code herum gelingt. Falls nicht, müsste unschönerweise vielleicht so gearbeitet werden:

Code
set myJavaScript to "var doc = app.documents[0]; var objStyle = doc.objectStyles.itemByName('amerikPage'); if( objStyle.isValid ){ objStyle.enableAnchoredObjectOptions = true ; objStyle.anchoredObjectSettings.properties = { anchoredPosition : AnchorPosition.INLINE_POSITION};}; var allPageItems = doc.allPageItems; for( var n=0; n<allPageItems.length; n++ ) { if( allPageItems[n].appliedObjectStyle == objStyle ){allPageItems[n].applyObjectStyle( objStyle , true );};};''' 

do script myJavaScript language javascript



als Antwort auf: [#583658]

ID CS6: Objektstil ändern

Goar
Beiträge gesamt: 395

19. Jun 2022, 18:20
Beitrag # 12 von 15
Beitrag ID: #583711
Bewertung:
(8815 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

schon interessant, ich konnte dein ExtendScript soweit verstehen, dass ich es in AS mit etwas Probieren nachbauen konnte:

Code
tell application "Adobe InDesign CS6" 
tell document 1
activate
set myObjStyle to object style "amerikPage"

-- Änderung am Objektstil »amerikPage« vornehmen
set anchObjSet to anchored object settings of properties of myObjStyle
set properties of anchObjSet to {anchored position:inline position}

-- alle page items aufnehmen
set allPageItems to all page items
set cntPI to length of allPageItems

-- allen page items, die mit dem object style formatiert sind …
repeat with i from 1 to cntPI
set curPI to object reference of item 1 of item i of allPageItems
set applObjStyle to applied object style of curPI
if (applObjStyle is myObjStyle) then
tell curPI -- … diesen object style noch einmal zuweisen
apply object style using myObjStyle
end tell
end if
end repeat

end tell
end tell


So hat es tatsächlich funktioniert.
Die Zuweisung {enable anchored object options:true} – wie auch immer sie zu verpacken sei – war offensichtlich nicht erforderlich.

Vielen Dank für deinen Einsatz und deine Geduld!


als Antwort auf: [#583683]

ID CS6: Objektstil ändern

Uwe Laubender
Beiträge gesamt: 5316

20. Jun 2022, 12:14
Beitrag # 13 von 15
Beitrag ID: #583721
Bewertung:
(8739 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,
sehr schön, dass Du das nun in AppleScript hast umsetzen können.

Es sei noch angemerkt, dass das erneute Zuweisen des Objektstils bei anderen Änderungen des Objektstils nicht notwendig ist. Habe aber nicht getestet, ob Änderungen in den anchoredObjectSettings die einzige Ausnahme ist.

Auch gibt eine Alternative zur Methode adjustObjectStyle() in ExtendScript, um die Abweichungen loszuwerden.
Die Methode clearObjectStyleOverrides().
Code
allPageItems[n].clearObjectStyleOverrides(); 


Diese Methode sollte es auch unter AppleScript geben.


als Antwort auf: [#583711]

ID CS6: Objektstil ändern

Hans Haesler
  
Beiträge gesamt: 5826

20. Jun 2022, 14:07
Beitrag # 14 von 15
Beitrag ID: #583722
Bewertung:
(8699 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,

Gratulation auch meinerseits, weil Du das Script zum Laufen gebracht hast.

Und nochmals herzlichen Dank an Uwe, für seine wertvollen Anstösse.

Urlaubsgrüsse aus Samos,
Hans


als Antwort auf: [#583721]

ID CS6: Objektstil ändern

Goar
Beiträge gesamt: 395

20. Jun 2022, 14:45
Beitrag # 15 von 15
Beitrag ID: #583725
Bewertung:
(8676 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ja, Uwe, die Zeile

Code
apply object style using myObjStyle 


kann durch diese

Code
clear object style overrides 


ersetzt werden. Das ist vermutlich die sauberere Lösung.
Die werde ich dann auch in dem Skript verwenden.

Vielen Dank


als Antwort auf: [#583721]
X