[GastForen Programme Print/Bildbearbeitung Adobe InDesign Anzahl Objekte ermitteln

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

Anzahl Objekte ermitteln

buehda
Beiträge gesamt: 59

4. Nov 2010, 15:48
Beitrag # 1 von 6
Bewertung:
(10633 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen

Ist es möglich, per Skript die Anzahl bestimmter Objekte auf einer bestimmten Seite zu ermitteln?

Ich habe z.B. 24 blaue Rechtecke platziert, mit dem Objektstil "rechteck_blau". 35 grüne Rechtecke, mit dem Objektstil "rechteck_grün", 94 gelbe Kreise mit dem Objektstil "kreis_gelb", und so weiter.

ich möchte, dass dann die ermittelten Zahlen in vordefinierten Textfeldern in einer Tabelle erscheinen (dort muss also ein Platzhalter stehen).

Ist so etwas realistisch? Oder extrem aufwändig? Meine Programmierkenntnisse sind sehr mager, ich kann das nicht beurteilen...

Danke & Gruss
X

Anzahl Objekte ermitteln

buehda
Beiträge gesamt: 59

5. Nov 2010, 14:48
Beitrag # 2 von 6
Beitrag ID: #456140
Bewertung:
(10591 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vereinfachung: Das Skript durchsucht das ganze Dokument, dann wird eine txt-Datei mit folgendem Text generiert:

Seite 1:
32 rechteck_blau
12 rechteck_grün

Seite 3:
13 kreis_gelb

...und so weiter. Es werden also immer die Anzahl Objekte pro Seite aufgelistet, die einen Objektstil haben.
Ich hab schon andere Skripte gefunden, die nach Farben suchen (searchObjectByColor_3.jsx, FarbeSuchen_305d.js), aber ich habe zu wenig Wissen, um die für meine Bedürfnisse umzuschreiben.

Kann mir jemand helfen dabei?

Gruss David


als Antwort auf: [#456030]

Anzahl Objekte ermitteln

buehda
Beiträge gesamt: 59

10. Nov 2010, 22:29
Beitrag # 3 von 6
Beitrag ID: #456557
Bewertung:
(10494 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen

Ich hab nach langem ausprobieren mal folgendes zustande gebracht... bitte nicht lachen;)

Code
var myDoc = app.activeDocument; 
var myOriginalLayer = myDoc.activeLayer.name;

var myQuelleLayer = app.activeDocument.layers.firstItem();
var myLayerItems = myQuelleLayer.allPageItems;
for(i = 0; i < myLayerItems.length; i++) {

app.select(myLayerItems[i], SelectionOptions.ADD_TO);
}


alert("«" + myOriginalLayer + "» hat "+ app.selection.length + " Objekte." );


Das meldet mir:
«Ebene 1» hat 82 Objekte.

Wie kann ich das Script auffordern, alle Elemente des aktiven Layers zu selektieren? Das fehlt mir hier noch. Irgendwas mit PageItems?
Ich bin jetzt so weit, dass ich nicht mehr nach Objektstil auswähle, sondern nach Layer (ich mache einfach für jeden Objektstil ein Layer).

Ich wäre dankbar für Hilfe, da ich wirklich am Ende meines Script-Lateins bin!

Gruss, David


als Antwort auf: [#456140]

Anzahl Objekte ermitteln

Gerald Singelmann
  
Beiträge gesamt: 6268

10. Nov 2010, 23:04
Beitrag # 4 von 6
Beitrag ID: #456561
Bewertung:
(10484 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich finde, das sieht schon sehr gut aus.

Hier ein Fragment, das Ihnen wahrscheinlich weiterhelfen kann.
Code
main(); 

function main() {
var doc = app.activeDocument;
var spread = doc.layoutWindows[0].activeSpread;
var items = spread.allPageItems;
var objects = new Array();
var stylenames = new Array();
var osname;
for (var n = 0; n < items.length; n++) {
osname = items[n].appliedObjectStyle.name;
if (objects[ osname ] == undefined) {
objects[ osname ] = new Array();
stylenames.push( osname );
}
objects[ osname ].push( items[n] );
}
var meldung = "Anzahl der Objekte nach Objektformat\r";
for (var n = 0; n < stylenames.length; n++) {
meldung += stylenames[n] + ": \t" + objects[ stylenames[ n ] ].length+ "\r";
}
meldung += "\r\rEs werden die Objekte \"" + stylenames[0] + "\" markiert.";
app.select( objects[ stylenames[0] ] );
alert( meldung );
}

Was ich hier mit arrays mache, ist vielleicht nicht sofort selbsterklärend...

Ein array-Element kann einerseits über einen Index angesprochen werden, also z.B. pageItems[4].
Andererseits kann man seinen array-Elementen aber auch Namen geben. Das sähe in einem sinnlosen Beispiel dann so aus:
Code
var alter_der_jungs = new Array(); 
alter_der_jungs[ "Detlef"] = 12
alter_der_jungs["Heinz"] = 13
alter_der_jungs["Karl"] = 11;
alert( "Detlefs Alter: " + alter_der_jungs["Detlef"]);



Schaun Sie mal, ob das weiterhilft...


als Antwort auf: [#456557]

Anzahl Objekte ermitteln

buehda
Beiträge gesamt: 59

11. Nov 2010, 11:49
Beitrag # 5 von 6
Beitrag ID: #456596
Bewertung:
(10424 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Dank für den Vorschlag!
Ich kann das so gebrauchen. Wie kann ich verhindern, dass die vorgegebenen Formate [None], [Normal Text Frame] und [Normal Graphics Frame] angezeigt werden? Die sind eigentlich überflüssig.


Nun hab ich dank dem neuen Script festgestellt, dass es z.T. auch Objekte hat, die gruppiert sind (also aus einer Fläche und einem Textfeld bestehen). In diesem Fall möchte ich es mit diesem Script lösen:


Code
var myDoc = app.activeDocument;  
var myActiveLayerName = myDoc.activeLayer.name;
var myActiveLayer = myDoc.activeLayer;

// var spread = myDoc.layoutWindows[0].activeSpread;
// var items = spread.allPageItems;


var myLayerItems = myActiveLayer.allPageItems;
for(i = 0; i < myLayerItems.length; i++) {

app.select(myLayerItems[i], SelectionOptions.ADD_TO);
}


alert(myActiveLayerName + ": \t"+ app.selection.length + " Objekte" );


Dabei werden alle Objekte des aktiven Layers ausgewählt und dann die Anzahl ausgegeben. Das funktioniert perfekt bei einseitigen Dokumenten, aber nicht wenn es 2 oder mehr Seiten sind. Es kommt eine Fehlermeldung:

Zitat Es ist nicht möglich, zwei Objekte auf unterschiedlichen Druckbögen auszuwählen.
Zeile: 12
Quelle: app.select(myLayerItems, SelectionOptions.ADD_TO);


Wie kann ich das Script anweisen, nur die Objekte auf der aktuellen Seite (und dem aktuellen Layer) auszuwählen? Irgendwas mit activeSpread, aber ich schaff es nicht!
Zusätzlich müsste noch vor dem app.select Befehl alles deselektioniert werden. Wie kann ich das bewerkstelligen?

Gruss


als Antwort auf: [#456561]

Anzahl Objekte ermitteln

buehda
Beiträge gesamt: 59

15. Nov 2010, 15:59
Beitrag # 6 von 6
Beitrag ID: #456982
Bewertung:
(10333 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich muss nochmal nachhaken. Kann mir jemand bei dieser Frage helfen:
Wie kann ich das Script anweisen, nur die Objekte auf der aktuellen Seite (und dem aktuellen Layer) auszuwählen? Muss ich dazu ein Array machen?


Zusätzlich müsste noch vor dem app.select Befehl alles deselektioniert werden. Wie kann ich das bewerkstelligen?


als Antwort auf: [#456596]
X