[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt group, allPageItems, pageItems

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

group, allPageItems, pageItems

Kai Rübsamen
Beiträge gesamt: 4684

17. Feb 2014, 18:41
Beitrag # 1 von 16
Bewertung:
(7246 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo!

Ich habe offensichtlich die Zusammenhänge noch nicht verstanden:

Ich habe Rahmen mit Bildern, Rahmen mit Flächenfarbe (ohne Bilder) und Gruppen (Rahmen mit Bild u. Rahmen mit Flächenfarbe).

Ich suche jetzt die Bildrahmen, indem ich jeden Rahmen auf der Seite suche und prüfe, ob graphics.length == 1 ist.

Gerate ich an eine Gruppe, wirft das Skript einen Fehler, weil die Gruppe an sich keine Eigenschaft graphics hat.

Ich wollte jetzt die Gruppe zunächst ausschließen, weil ich annehme, dass man Elemente erst entgruppieren, durchsuchen u. dann wieder gruppieren muss?

Was ich nicht verstehe:
1. Wenn ich die Gruppe im UI auswähle u. app.selection[0].constructor.name prüfe, erhalte ich Group.
2. Gehe ich aber durch alle pageItems oder allPageItems erhalte ich für die Gruppe plötzlich bei constructor.name > pageItem.
3. Es sieht auch so aus, dass bei allPageItems auch die Bilder durchlaufen werden u. die haben ebenfalls keine Eigenschaft graphics

Was mache ich denn falsch oder wie geht man denn hier mit der Gruppe richtig um?

Danke.

(Dieser Beitrag wurde von Kai Rübsamen am 17. Feb 2014, 18:42 geändert)
X

group, allPageItems, pageItems

WernerPerplies
Beiträge gesamt: 2774

17. Feb 2014, 19:01
Beitrag # 2 von 16
Beitrag ID: #523752
Bewertung:
(7235 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

wenn ich mich recht erinnere, hast Du doch das Buch von Grant Gamble, oder?

Kapitel 10 Page Items and Layers

Da sind m. E. nach diese Zusammenhänge perfekt erklärt.


als Antwort auf: [#523751]

group, allPageItems, pageItems

Uwe Laubender
Beiträge gesamt: 5324

17. Feb 2014, 19:19
Beitrag # 3 von 16
Beitrag ID: #523754
Bewertung:
(7226 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Kai!

Das funktioniert bei ExtendScript wie mit dem Wald:
Wie Du hineinrufst, schallt es heraus ;-)

Also:
Du fragst nach pageItem und bekommst pageItem.
Du fragst nach rectangle und bekommst rectangle.


Wenn Du spezifisch wissen willst, was das pageItem denn nun für ein spezielles Ding ist, "Rectangle", "Oval", Polygon", "GraphicLine", "TextFrame" etc.pp.. musst Du das "auflösen". Das geschieht mit pageItem.getElements()[0].

Ausnahme ist die selection !!
Die hat das "Auflösen" (zumindest in der ersten Ebene) bereits für Dich getan.

app.selection[0] z.B. gibt immer "das Ding an sich" zurück; nie die Überkategorie pageItem. Daher auch Deine Verwirrung. Schätze ich mal…


als Antwort auf: [#523751]
(Dieser Beitrag wurde von Uwe Laubender am 17. Feb 2014, 19:20 geändert)

group, allPageItems, pageItems

Kai Rübsamen
Beiträge gesamt: 4684

17. Feb 2014, 20:54
Beitrag # 4 von 16
Beitrag ID: #523757
Bewertung:
(7173 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

hast dich recht erinnert. Werde den Gamble morgen lesen :)

@ Uwe: Sehr gut! Das mit der Verwirrung hast du ebenfalls richtig erkannt ;-)

Was mich aber auch verwirrt, warum Martins Variante hier ein Ergebnis liefert - auch ohne getElements??

http://www.hilfdirselbst.ch/..._P522138.html#522138

Ah: Kurz vor Absenden des Beitrags: mit allPageItems erhalte ich Image, Rectangle u. Group. Daher funktioniert auch Martins Abfrage. Langsam dämmert es :)

Danke euch beiden.


als Antwort auf: [#523754]

group, allPageItems, pageItems

WernerPerplies
Beiträge gesamt: 2774

17. Feb 2014, 21:19
Beitrag # 5 von 16
Beitrag ID: #523758
Bewertung:
(7161 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

Zitat Ah: Kurz vor Absenden des Beitrags: mit allPageItems erhalte ich Image, Rectangle u. Group. Daher funktioniert auch Martins Abfrage. Langsam dämmert es :)


Wirklich?, Das ist schön.

Erinnerst Du Dich, dass ich Dich mal darauf hingewiesen habe, wie wichtig Datentypen sein können?

PageItems ist eine Collection of PageItems, und kennt daher nur PageItems als Elemente.

AllPageItems ist ein Array und Arrays können unterschiedliche Datentypen enthalten, in diesem Fall also TextFrames, Rectangles ....

Alle Elemente in diesem Array sind aber PageItems. ;-)

Und weil PageItems und Arrays unterschiedliche Container sind, haben sie auch unterschiedliche Eigenschaften und Methoden.

Alles klar?


als Antwort auf: [#523757]

group, allPageItems, pageItems

Kai Rübsamen
Beiträge gesamt: 4684

17. Feb 2014, 21:42
Beitrag # 6 von 16
Beitrag ID: #523759
Bewertung:
(7152 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ja, ich erinnere mich dunkel um jetzt festzustellen, dass es auch allGraphics gibt :(

Doch ein Anfänger ;-)


als Antwort auf: [#523758]

group, allPageItems, pageItems

Uwe Laubender
Beiträge gesamt: 5324

17. Feb 2014, 22:10
Beitrag # 7 von 16
Beitrag ID: #523760
Bewertung:
(7124 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Kai!
Korrekt! Die allGraphics sind ein Array. Wie auch schön nachzulesen in Jongwares DOM-Dokumentation:

http://jongware.mit.edu/...6js/pc_Document.html

Und was sich hinter Graphic verbirgt, siehst Du hier:

http://jongware.mit.edu/idcs6js/pc_Graphic.html

Nämlich: EPS | Image | ImportedPage | PDF | PICT | WMF

Und bei Image geht die Unterteilung dann weiter ("leider" (?)) nur als "String"-Ausdruck mit imageTypeName. Zunächst etwas obskur, aber einen kleinen Hinweis finden wir aber hier ganz oben:

http://jongware.mit.edu/idcs6js/pc_Image.html

Zitat An imported bitmap image in any bitmap file format (including TIFF, JPEG, or GIF). Base Class: Graphic


(Hervorhebung von mir.)

Weshalb aber PICT 'ne eigene Klasse bekommt, aber TIFF, JPEG und GIF nicht, das ist mir nicht so ganz erklärlich…


als Antwort auf: [#523759]

group, allPageItems, pageItems

Uwe Laubender
Beiträge gesamt: 5324

17. Feb 2014, 22:25
Beitrag # 8 von 16
Beitrag ID: #523761
Bewertung:
(7111 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
So mancher fragt sich dann vielleicht: Und wo ist dann mein platziertes Illustrator file mit Endung "ai" geblieben? Tja, das fällt unter die Kategorie "PDF". Aber ich denke, das weisst Du bereits…

Wo taucht denn PhotoShop auf? Tja, das ist dann ein "Image" mit imageTypeName "Photoshop" (was sonst ;-) ) Mann, sind die drauf!!
Wird nicht mal in der Doku erwähnt!

Noch interessant: Bewegtbild fällt *nicht* unter die Abteilung "Graphic". Das ist 'ne eigene Abteilung: "MediaItem", die sich wiederum in "Movie" und "Sound" verzweigt.


als Antwort auf: [#523760]

group, allPageItems, pageItems

Dirk Becker
Beiträge gesamt: 193

17. Feb 2014, 23:07
Beitrag # 9 von 16
Beitrag ID: #523764
Bewertung:
(7084 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
PICT ist das native Datenformat von MacOS Classic. Das bestand damals schon aus einer aufgezeichneten Sequenz von Grafik-Operationen, auch wenn die nicht so mächtig waren wie heute die an PDF angelehnte Engine von OSX. Also definitiv mehr als die Bitmaps der Image Typen.

Übrigens, wenn man so mit den Objekt-Typen rumspielt sind einige Funktionen auch noch nützlich:

Die Objekt-Funktion hasOwnProperty() kann überall testen, ob eine Eigenschaft verfügbar ist. So kommt man um die meisten try-catch Blöcke herum, was wiederum den Vorteil hat dass man mit catch immer echte Fehler auffängt. Man kann so etwa die Selektion fragen, ob sie was mit Text zu tun hat: hasOwnProperty("baseline") ...

Wenn in einem Objekt viele Eigenschaften "fragwürdig" sind - also bei unpassenden Gelegenheiten nicht vorhanden oder mit bösen Fehlermeldung hinterlegt - kann man auch das properties Property verwenden, das eine saubere JavaScript Struktur zurückliefert. Ich verwende das zum Beispiel in einem Script, das mit nicht installierten Fonts arbeiten muß.

Die Funktion toSpecifier() gibt bei nativen InDesign Objekten einen XPath ähnlichen String-Ausdruck, der das Objekt recht gut beschreibt. Praktisch ist auch das Gegenstück resolve(). Da der Specifier dem internen Ausdruck entspricht, über den ExtendScript mit InDesign kommuniziert, kann das bei manchen Fehleranalysen helfen. Speziell bei XML Elementen sind die erzielten Ausdrücke interessant/grausig und erklären etwa, warum die XML Referenzen so instabil bei Änderungen sind.

Das angesprochene Buch von Grant Gamble kenne ich noch nicht, es wird sicher hilfreich wenn man von Web-JavaScript umlernen "darf". Das ganze Thema mit Containern vs. Einzelobjekte ist ja bei ExtendScript auch maximal verwirrend/flexibel gelöst. Wenn man die ganze Mächtigkeit des API in einer Typ-sicheren Sprache abbilden will - ich hab' das mal für Java gemacht, kommt man locker auf ca. 6 verschiedene Klassen pro ExtendScript/InDesign Klasse. Kein Wunder, wenn es unter den COM Bindings unbequem wird …

Grüße,
Dirk


als Antwort auf: [#523760]

group, allPageItems, pageItems

WernerPerplies
Beiträge gesamt: 2774

18. Feb 2014, 06:13
Beitrag # 10 von 16
Beitrag ID: #523766
Bewertung:
(6989 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Dirk,

Zitat Die Objekt-Funktion hasOwnProperty() kann überall testen, ob eine Eigenschaft verfügbar ist.

oder auch (mit durchaus interessanten Unterschieden):
Code
var o = {eins: 1, zwei: 2, drei: 1}; 
alert("eins" in o);
alert("vier" in o);
alert(o.hasOwnProperty ("eins"));
alert(o.hasOwnProperty ("vier"));
alert(("undefined" !== typeof o["eins"]));
alert(("undefined" !== typeof o["vier"]));

Zitat ... properties Property verwenden


Die Eigenschaft "Property" gibt es bei mir nicht, oder habe ich da etwas übersehen?
Vielleicht gibt es das ja auch nur beim Server?
Was ich anzubieten hätte, wäre "Properties", ist aber wenig informativ, die Funktion myProperties() hingegen ist sehr geschwätzig, sagt aner nichts darüber aus, ob ich auf die einzelnen Elemente zugreifen darf.
Also doch nur "try ... catch"?
Code
// DESCRIPTION WpsPropertiesCheck 
// Dateiname: WpsPropertiesCheck.jsx
// © 2014 by Werner Perplies, EDV-Anwendungsberatung,
// http://www.weepee.de, email: hds@weepee.de
main();

function main()
{
try
{
alert(app.selection[0]);
alert(app.selection[0].properties);
alert(myProperties(app.selection[0])); // Vorsicht, kann sehr viele Zeilen haben!
/*string*/function myProperties(/*object*/o)
{
var s = "";
for (var name in o)
{
s += name + "\n";
}
return s;
}
}
catch (error)
{
alert(error.message)
}
return;
}



als Antwort auf: [#523764]
(Dieser Beitrag wurde von WernerPerplies am 18. Feb 2014, 06:24 geändert)

group, allPageItems, pageItems

Dirk Becker
Beiträge gesamt: 193

18. Feb 2014, 09:59
Beitrag # 11 von 16
Beitrag ID: #523772
Bewertung:
(6927 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

Zitat Die Eigenschaft "Property" gibt es bei mir nicht, oder habe ich da etwas übersehen?


Deswegen hatte ich ja auch properties gesagt, und sogar in fett ;-)

Hier eine Alternative zu Deiner Funktion myProperties, mit der noch nicht erwähnten Funktion toSource(). Die enum-Werte werden ab CS5 leider etwas unbefriedigend ausgegeben, irgendwo habe ich noch einen Patch der das korrigiert.

Code
alert(app.activeDocument.allPageItems[0].properties.toSource().replace(/, /g,",\r\t")); 



als Antwort auf: [#523766]

group, allPageItems, pageItems

WernerPerplies
Beiträge gesamt: 2774

18. Feb 2014, 10:27
Beitrag # 12 von 16
Beitrag ID: #523774
Bewertung:
(6917 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen Dirk,

Zitat das properties Property verwenden

.

;-)
Das hast Du gesagt, meinst aber nach meinem Verständnis wohl:
... das Property properties.

Aber unwichtig, schließlich habe ich ja das richtige Property properties in meinem Beispiel verwendet.

Und das spuckt dann lediglich bei selektiertem Textrahmen dis aus:
Code
--------------------------- 
Skriptwarnung
---------------------------
[object Object]
---------------------------
OK
---------------------------

Code
alert(app.selection[0].properties.toSource().replace(/, /g,",\n\t")); 


Code
--------------------------- 
Skriptwarnung
---------------------------
({transparencySettings:resolve("/document[@id=1]//text-frame[@id=157156]/@transparency-settings"),
strokeTransparencySettings:resolve("/document[@id=1]//text-frame[@id=157156]/@stroke-transparency-settings"),
fillTransparencySettings:resolve("/document[@id=1]//text-frame[@id=157156]/@fill-transparency-settings"),
contentTransparencySettings:resolve("/document[@id=1]//text-frame[@id=157156]/@content-transparency-settings"),
textFramePreferences:resolve("/document[@id=1]//text-frame[@id=157156]/@text-frame-preferences"),
...

- "\n" eignet sich unter Windows besser, um den Inhalt des Alert-Fensters in die Zwischenablage zu schicken.

Für den Fall, das ich an solche Informationen kommen will, verwende ich lieber meine Klasse
WpsCompareObjects
Der Output ist übersichtlicher und kann gefiltert werden.

Dennoch hast Du mir wieder wichtigen Input gegeben, danke.


als Antwort auf: [#523772]

group, allPageItems, pageItems

Kai Rübsamen
Beiträge gesamt: 4684

18. Feb 2014, 10:55
Beitrag # 13 von 16
Beitrag ID: #523775
Bewertung:
(6904 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Jungs, erinnert ihr euch noch an die ursprüngliche Fragestellung? Also zurück zum Thema:

Werner, ich hab Kapitel 9 u. 10 gelesen. In Kapitel 9 'images' steht, dass allGraphics eine Eigenschaft des Dokuments ist u. das page diese Eigenschaft nicht hat. Trotzdem geht:

Code
var curDoc = app.activeDocument; 
var allPages = curDoc.pages;

for ( var i = 0; i < allPages.length; i++ ) {
var curPage = allPages[i];
var graphicsList = curPage.allGraphics;
}


Der Gamble ist ja zur CS5 erschienen. Verstehe ich da etwas falsch oder hat sich das Objektmodell danach geändert?


als Antwort auf: [#523774]

group, allPageItems, pageItems

WernerPerplies
Beiträge gesamt: 2774

18. Feb 2014, 11:05
Beitrag # 14 von 16
Beitrag ID: #523777
Bewertung:
(6890 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

Zitat Werner, ich hab Kapitel 9 u. 10 gelesen. In Kapitel 9 'images' steht, dass allGraphics eine Eigenschaft des Dokuments ist u. das page diese Eigenschaft nicht hat. Trotzdem geht:


Im Zweifelsfalle gilt, was geht, Du weißt ja: Irren ist menschlich.

Laut Typelib gibt's das auch CS3, CS4, CS5, CS 5.5 CS6.

Aber warum siehst Du nicht selbst nach?

Und war denn das Kapitel 10 hilfreich?

Bei mir gab es jede Menge Aha-Effekte.

Wobei Lesen ist eins, die Beispielprogramme Schritt für Schritt durchzugehen (Debug!) ist etwas anderes und effektiver.


als Antwort auf: [#523775]

group, allPageItems, pageItems

Kai Rübsamen
Beiträge gesamt: 4684

18. Feb 2014, 12:17
Beitrag # 15 von 16
Beitrag ID: #523781
Bewertung:
(6864 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Und war denn das Kapitel 10 hilfreich?
Bei mir gab es jede Menge Aha-Effekte.
Wobei Lesen ist eins, die Beispielprogramme Schritt für Schritt durchzugehen (Debug!) ist etwas anderes und effektiver.


Ja und Ja. Ich skripte ja eher so nebenher u. vergesse daher auch vieles wieder. Der Gamble verwirrt mich, weil seine Beispiele oft im Zusammenhang mit Dialogen erklärt werden u. das Buch nicht übersichtlich gesetzt ist.

Immer wieder mal drin lesen u. das dann auch gleich ausprobieren, ist gut. Und ja: Ich bin auch ein großer Freund vom ESTK :)


als Antwort auf: [#523777]
X

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
16.07.2024

Online
Dienstag, 16. Juli 2024, 10.00 - 10.30 Uhr

Webinar

In diesen beiden kostenlose Webinaren erfahren Sie, wie Sie mit Hilfe von Enfocus Griffin und dem Impressed Workflow Server Ihren LFP-Workflows optimieren können. 16.07.2024: So optimieren Sie Ihre Prozesse mit Enfocus Griffin 30.07.2024: So sparen Sie Zeit und Geld mit Impressed Workflow Server in der LFP-Edition Griffin: Griffin ist das leistungsstarke Kraftpaket für das automatische Nesting im Großformatdruck. Dank eines ausgeklügelten, KI-basierten Nesting-Algorithmus können Sie mit Griffin Vorlagen schnell und effizient vernutzen – und das klappt auch mit unregelmäßigen Formen perfekt. Das spart Ihnen unzählige Stunden, die Sie bisher mit dem manuellen Nesting und Ausschießen verbracht haben. Einige wichtige Funktionen Anlage von Beschnittzugaben Automatische Erzeugung der Schnittkontur Erstellung von Strichcodes, Textmarkierungen und Registrierungen ... IWS LFP Edition: Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Mit dem IWS LFP Edition automatisieren Sie Ihre Produktion von der Übernahme der Daten aus dem ERP-System bis zur Erzeugung der verschachtelten Druckform und der Übergabe an den RIP. Phoenix2Switch ist eine hochentwickelte KI-Technologie für die Planung und das Nesting von Druckerzeugnissen. Anders als herkömmliche Ausschießlösungen arbeitet Phoenix nicht auf Basis von Vorlagen, sondern erzeugt entsprechend der Maschinen- und Produktionsanforderungen druckfertige Layouts „on-the-fly“.

kostenlos

Ja

Organisator: Impressed GmbH

https://www.impressed.de/schulung.php?c=sDetail&sid=328

So optimieren Sie Ihren LFP-Workflow
Veranstaltungen
30.07.2024

Online
Dienstag, 30. Juli 2024, 10.00 - 10.30 Uhr

Webinar

In diesen beiden kostenlose Webinaren erfahren Sie, wie Sie mit Hilfe von Enfocus Griffin und dem Impressed Workflow Server Ihren LFP-Workflows optimieren können. 16.07.2024: So optimieren Sie Ihre Prozesse mit Enfocus Griffin 30.07.2024: So sparen Sie Zeit und Geld mit Impressed Workflow Server in der LFP-Edition Griffin: Griffin ist das leistungsstarke Kraftpaket für das automatische Nesting im Großformatdruck. Dank eines ausgeklügelten, KI-basierten Nesting-Algorithmus können Sie mit Griffin Vorlagen schnell und effizient vernutzen – und das klappt auch mit unregelmäßigen Formen perfekt. Das spart Ihnen unzählige Stunden, die Sie bisher mit dem manuellen Nesting und Ausschießen verbracht haben. Einige wichtige Funktionen Anlage von Beschnittzugaben Automatische Erzeugung der Schnittkontur Erstellung von Strichcodes, Textmarkierungen und Registrierungen ... IWS LFP Edition: Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Mit dem IWS LFP Edition automatisieren Sie Ihre Produktion von der Übernahme der Daten aus dem ERP-System bis zur Erzeugung der verschachtelten Druckform und der Übergabe an den RIP. Phoenix2Switch ist eine hochentwickelte KI-Technologie für die Planung und das Nesting von Druckerzeugnissen. Anders als herkömmliche Ausschießlösungen arbeitet Phoenix nicht auf Basis von Vorlagen, sondern erzeugt entsprechend der Maschinen- und Produktionsanforderungen druckfertige Layouts „on-the-fly“.

kostenlos

Ja

Organisator: Impressed GmbH

https://www.impressed.de/schulung.php?c=sDetail&sid=328

So optimieren Sie Ihren LFP-Workflow