[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Auf Objekte innerhalb von Gruppen zugreifen

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

Auf Objekte innerhalb von Gruppen zugreifen

faxinger
Beiträge gesamt: 246

3. Aug 2017, 09:47
Beitrag # 1 von 10
Bewertung:
(3747 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich habe schon ein Skript das mir alle Objekte auf dem Druckbogen die das Objektformat "A" haben um 90 Grad dreht. Das funktioniert solange gut sofern diese Objekte ungruppiert auf dem Druckbogen herumliegen.

Mein Fall ist aber leider so, dass diese Objekte eigentlich Teile von mehreren Gruppen sind.
Daher muss ich immer zuerst alle Gruppierungen auflösen das Skript ausführen und dann die Gruppierungen händisch wieder umsetzen.

Ginge das auch per Skript dass ich auf alle Elemente die Objektformat A haben innerhalb der Gruppe drehe und somit die Gruppierungen nicht auflösen müsste?

Danke
X

Auf Objekte innerhalb von Gruppen zugreifen

Uwe Laubender
Beiträge gesamt: 5316

3. Aug 2017, 11:25
Beitrag # 2 von 10
Beitrag ID: #558908
Bewertung:
(3741 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
( nahezu* ) alle Objekte einer Seite bekommst Du so:

Code
var objStyleName = "Mein Objektformatname"; 

var doc = app.activeDocument;
var objectStyle = doc.objectStyles.itemByName( objStyleName );
if(!objectStyle.isValid){ alert("Objektformat nicht gefunden. Abbruch."); exit() };

// Beispiel Seite 1 des aktiven Dokuments:
var allPageItemsOfPage1 = doc.pages[0].allPageItems;

// Schleife:
for(var n=0;n<allPageItemsOfPage1.length;n++)
{
if(allPageItemsOfPage1[n].appliedObjectStyle == objectStyle)
{
// Was mit dem gefundenen Objekt passieren soll:
doSomethingReasonable( allPageItemsOfPage1[n] );
};
}

function doSomethingReasonable( pageItem )
{
alert("Rotate me!"+"\r"+pageItem.id+"\r"+pageItem.parent.constructor.name);
};


( nahezu* ) alle Objekte eines Druckbogens:

Code
var allPageItemsOfSpread1 = doc.spreads[0].allPageItems; 


nahezu*
nahezu deswegen, weil allPageItems einer Seite, Druckbogen oder Dokuments nur den aktiven Status eines Mehrstatusobjekts erfassen kann.


als Antwort auf: [#558906]

Auf Objekte innerhalb von Gruppen zugreifen

faxinger
Beiträge gesamt: 246

3. Aug 2017, 13:17
Beitrag # 3 von 10
Beitrag ID: #558911
Bewertung:
(3727 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

vielen Dank.

Ich werde es dann gleich testen und Feedback geben.

LG
faxinger


als Antwort auf: [#558908]

Auf Objekte innerhalb von Gruppen zugreifen

faxinger
Beiträge gesamt: 246

3. Aug 2017, 13:21
Beitrag # 4 von 10
Beitrag ID: #558912
Bewertung:
(3725 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich glaube da kollidiert etwas:

das war mein skript dass die Gruppen unberücksichtigt ließ:
Code
 // Allen vorhandenen Textrahmen  mit Objektformat  "artikelnummer" um 90° drehen // 
var allFrames = app.activeDocument.textFrames;
var nFrames = allFrames.length;

for (var n=0; n<nFrames; n++) {
var curFrame = allFrames[n];
if (curFrame.appliedObjectStyle.name == "artikelnummer") {
curFrame.rotationAngle = 90;
}
}



als Antwort auf: [#558911]

Auf Objekte innerhalb von Gruppen zugreifen

Uwe Laubender
Beiträge gesamt: 5316

3. Aug 2017, 13:45
Beitrag # 5 von 10
Beitrag ID: #558913
Bewertung:
(3723 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Nun ja, wenn Du das gesamte Dokument im Fokus hast (inkl. aller Musterseitenelemente), dann musst Du eben den allPageItems Array des Dokuments durchsuchen.


als Antwort auf: [#558912]

Auf Objekte innerhalb von Gruppen zugreifen

faxinger
Beiträge gesamt: 246

22. Aug 2017, 16:41
Beitrag # 6 von 10
Beitrag ID: #559170
Bewertung:
(3293 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

ich wollte dein skript adaptieren, bin aber gescheitert.

Wo muss ich bei meinem skript ansetzen um direkt innerhalb der Gruppen auf meine Objekt mit dem Objektformat "artikelnummer" zuzugreifen?

Code
 // Allen vorhandenen Textrahmen  mit Objektformat  "artikelnummer" um 90° drehen // 
var allFrames = app.activeDocument.textFrames;
var nFrames = allFrames.length;

for (var n=0; n<nFrames; n++) {
var curFrame = allFrames[n];
if (curFrame.appliedObjectStyle.name == "artikelnummer") {
curFrame.rotationAngle = 90;
}
}


Ich schätze mal dass nicht textframes angesprochen werden sollen sondern allPageItems...

Nur ich dreh mich da etwas im Kreis
Danke


als Antwort auf: [#558913]
(Dieser Beitrag wurde von faxinger am 22. Aug 2017, 16:42 geändert)

Auf Objekte innerhalb von Gruppen zugreifen

Uwe Laubender
Beiträge gesamt: 5316

22. Aug 2017, 18:05
Beitrag # 7 von 10
Beitrag ID: #559171
Bewertung:
(3277 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
also, da gibt's zwei Wege:

1. Alle pageItems des Dokuments adressieren und die TextFrames aussortieren und prüfen.

2. Alle stories des Dokuments adressieren und über die jeweiligen textContainers der Story die Textrahmen mit dem zugewiesenen Objektformat ausfiltern.

Auf die Schnelle:

Code
// The active document: 
var doc = app.documents[0];
var nameOfObjectStyle = "artikelnummer";

// Where is the rotation's center?
doc.layoutWindows[0].transformReferencePoint = AnchorPoint.CENTER_ANCHOR;

var allStories = doc.stories.everyItem().getElements();
var objectStyle = doc.objectStyles.itemByName(nameOfObjectStyle);

// In case you run this script the first time and are too lazy to add an object style:
if(!objectStyle.isValid)
{
var objectStyle = app.documents[0].objectStyles.add({name : nameOfObjectStyle});
};

// Loop all stories:
for(var n=0;n<allStories.length;n++)
{
var textContainers = allStories[n].textContainers;

// Loop all text containers of a particular story:
for(var c=0;c<textContainers.length;c++)
{
// Only text frames, no text paths
// And only text frames with our defined object style applied from above:
if(textContainers[c].constructor.name == "TextFrame" && textContainers[c].appliedObjectStyle == objectStyle)
{
// Rotate the text container:
textContainers[c].rotationAngle = 90;
};
};
};


Wenn Du ausschließlich Textrahmen einer Gruppe bearbeiten möchtest, müssen noch ein paar Zeilen rein, die untersuchen, ob der anvisierte Textrahmen teil einer Gruppe ist.


als Antwort auf: [#559170]

Auf Objekte innerhalb von Gruppen zugreifen

faxinger666
Beiträge gesamt: 167

23. Aug 2017, 08:59
Beitrag # 8 von 10
Beitrag ID: #559174
Bewertung:
(3226 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Dank Uwe,

so funktioniert es. Ich dachte zwar es ginge auch mit weniger Code, bzw. Code den ich größtenteils nachvollziehen könnte.

Aber dein Skript fragt ja auch Eventualitäten ab.
Jedenfalls funktioniert es genauso wie ich es brauche. Nochmals vielen Dank.

Ein kleiner Nachtrag - die Kür wäre es wenn alle Rahmen (Egal ob Text oder Bildrahmen in den Gruppen noch auf den Inhalt beschränkt / zugeschnitten würden.

Also dass z.B. alle Textrahmen nur die Größe des Inhalts verbrauchen würden. (fit to frame oder sowas in der Richtung)

Ginge das gleich in einem Aufwasch?

Danke
LG
faxinger


als Antwort auf: [#559171]

Auf Objekte innerhalb von Gruppen zugreifen

Uwe Laubender
Beiträge gesamt: 5316

23. Aug 2017, 09:14
Beitrag # 9 von 10
Beitrag ID: #559175
Bewertung:
(3221 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Faxinger,
schau' mal hier:

http://jongware.mit.edu/...c_TextFrame.html#fit

Oder hier ( CS6 und höher) für das automatische Anpassen:
http://jongware.mit.edu/...FramePreference.html


als Antwort auf: [#559174]

Auf Objekte innerhalb von Gruppen zugreifen

Uwe Laubender
Beiträge gesamt: 5316

23. Aug 2017, 09:16
Beitrag # 10 von 10
Beitrag ID: #559176
Bewertung:
(3220 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Oder Du machst das bereits im Objektformat.
Das wäre die elegantere Methode.


als Antwort auf: [#559175]
X