[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Mehrere Eigenschaften von Absatzformaten auslesen

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

Mehrere Eigenschaften von Absatzformaten auslesen

Kai Rübsamen
Beiträge gesamt: 4684

11. Apr 2014, 09:07
Beitrag # 1 von 12
Bewertung:
(3601 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo!

In einem Absatzformat gibt es ja jede Menge Eigenschaften, die ich offensichtlich mit toSource() auslesen kann.

Wie man eine Eigenschaft ausliest, ist hier erklärt: http://www.hilfdirselbst.ch/...oSource%28%29#524543

Mir ist jetzt
1. nicht klar, was toSource() da genau macht?
2. Wie kann ich das Ganze auf z.B. 10 Eigenschaften aus einem Absatzformat begrenzen?

Dave Saunders schlägt im Amerik. Forum vor, man solle ein eigenes Objekt mit den Eigenschaften erstellen und dieses dann mit toSource() auslesen. Leider hat er kein Beispiel geliefert.

Ein eigenes Objekt würde ich so erstellen:
var cmd = {strokeWeight: 3, strokeColor: "Black", strokeTint: 44}; >> Beispiel von Werner!

Bei den verschiedenen Formaten will ich aber ja die Werte auslesen und nicht mitgeben. Wenn ich jetzt nur die Eigenschaften, aber nicht die Werte angebe, erhalte ich egal wie ich es schreibe Fehler.

Wie macht man das richtig?

Danke.
X

Mehrere Eigenschaften von Absatzformaten auslesen

WernerPerplies
Beiträge gesamt: 2762

11. Apr 2014, 09:42
Beitrag # 2 von 12
Beitrag ID: #526078
Bewertung:
(3583 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen Kai,
Zitat 1. nicht klar, was toSource() da genau macht?

toSource -> frei übersetzt -> mache Programmcode draus.
Gegenstück -> eval(Object.toSource()) -> führt diesen Programmcode aus.

Zitat 2. Wie kann ich das Ganze auf z.B. 10 Eigenschaften aus einem Absatzformat begrenzen?

Mir ist nicht klar, was das soll, aber dafür verwendet man eine Schleife, aber ich würde eher bestimmte Eigenschaften auslesen wollen.

Ich weiß ja, dass Du Dich nicht so sehr für generelle Lösungen interessierst, aber wie man beliebige Eigenschaften ausliest findest Du hier:
WpsCompareObjectsClass

Da müsstest Du Dich aber schon ein wenig damit beschäftigen,
am besten:
Debug+Single Step.

Einzelne Eigenschaften liest Du so aus:
Code
    function getBy(/*objectCollection*/oc, /*String*/property, /*Any*/what)  
{
try
{
if ("length" in oc)
{
for (var i = 0; i<oc.length; i++)
{
if (property in oc[i])
{
if (getProperty(oc[i], property, what))
return getProperty(oc[i], property, what);
// if ((oc[i][property] != null) && (oc[i][property]==what))
// return oc[i];
}
}
}
else
{
return getProperty(oc, /*String*/property, /*Any*/what);
}
/*Any*/function getProperty(/*Any*/elem, /*String*/property, /*Any*/what)
{
if ((property in elem) && (elem[property] != null))
{
if ((property == "fsName") || (property == "fullName"))
{
if (File(elem[property]).fsName == File(what).fsName)
return elem;
}
else
{
if (elem[property] == what)
return elem;
}
}
}
}
catch (error)
{}
return null;
}


Wenn Du diese Funktion über eine Schleife aufrufst, die über ein Array mit den gewünschten Eigenscaften läuft, solltest Du das gewünschte Ergebnis erhalten.

-


als Antwort auf: [#526075]

Mehrere Eigenschaften von Absatzformaten auslesen

Kai Rübsamen
Beiträge gesamt: 4684

11. Apr 2014, 10:52
Beitrag # 3 von 12
Beitrag ID: #526086
Bewertung:
(3552 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin Werner und alle Anderen,

bin mir nicht sicher, aber für mich klingt es nicht nach dem was ich suche?

Hier mal der Link ins amerikanische Forum: http://forums.adobe.com/message/6285859#6285859

Was dieser Trevor da macht, versteh ich nicht.

Die Aufgabe ist Folgende:
In einem Dokument gibt es 10 Absatzformate. Jetzt gilt es diese Formate miteinander zu vergleichen, damit man z.B. für EPUB rausfinden kann, welches CSS man braucht.

Ich nutze hierfür bisher ein Skript von Kasyan Servetsky, dass ich hier mal anhänge. Das Skript erstellt eine CSV-Datei, die eine Unmenge an Eigenschaften auflistet. In der Praxis brauche ich aber eigentlich nur 5-10 und suche mir die dann mühevoll in der CSV zusammen.

Ausgehend von dem o.g. Beitrag wollte ich mir jetzt ein eigenes Objekt basteln und NUR diese Infos für alle Formate auslesen.

Das könnte z.B. sein fontFamily, fontStyle, pointSize.

Naiv dachte ich jetzt, ich würde mir ein Objekt bauen: var meineWenigenEigenschaften = newObject{}
In dieses Objekt möchte ich dann fontFamily usw. aufnehmen, aber logischerweise keine Werte mitgeben.

Dann eine Schleife durch alle Absatzformate und anstelle von
myParagraphStyle.properties >> myParagraphStyle.meineWenigenEigenschaften auslesen.

Versteht mich einer? Geht sowas?


als Antwort auf: [#526078]
Anhang:
Export paragraph styles descriptions - 3.5.jsx (30.3 KB)

Mehrere Eigenschaften von Absatzformaten auslesen

WernerPerplies
Beiträge gesamt: 2762

11. Apr 2014, 10:59
Beitrag # 4 von 12
Beitrag ID: #526088
Bewertung:
(3549 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

Zitat bin mir nicht sicher, aber für mich klingt es nicht nach dem was ich suche?


Solche Aussagen liebe ich von Dir, Du magst nicht lesen, aber ich soll mir Deine Links ansehen.

Zitat Versteht mich einer? Geht sowas?

Ja, und ich habe Dir alle notwendigen Zutaten genannt.


als Antwort auf: [#526086]

Mehrere Eigenschaften von Absatzformaten auslesen

Kai Rübsamen
Beiträge gesamt: 4684

11. Apr 2014, 11:18
Beitrag # 5 von 12
Beitrag ID: #526093
Bewertung:
(3539 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Schreib es halt so, dass man dich versteht ;-)

Wenn du mir eine Frage beantworten willst und damit 2 neue Fragezeichen aufmachst, hilft mir das nicht.


als Antwort auf: [#526088]

Mehrere Eigenschaften von Absatzformaten auslesen

WernerPerplies
Beiträge gesamt: 2762

11. Apr 2014, 11:19
Beitrag # 6 von 12
Beitrag ID: #526094
Bewertung:
(3535 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

dann passe ich.


als Antwort auf: [#526093]

Mehrere Eigenschaften von Absatzformaten auslesen

Martin Fischer
  
Beiträge gesamt: 12783

11. Apr 2014, 11:45
Beitrag # 7 von 12
Beitrag ID: #526100
Bewertung:
(3511 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Rübe,

habe die Links nicht gelesen.
Auf die Schnelle hier eine Skizze, wie Du auf einfache Weise gezielt bestimmte Eigenschaften aus Objekten auslesen könntest.

Code
main(); 

function main()
{
var doc = (app.documents.length > 0) ? app.documents.firstItem() : app.documents.add(),
i = 0, ps_props = new Array,
props2get = {
appliedFont: null,
name: null,
pointSize: null,
fillColor: null,
underline: null,
parent: null,
dummy: null // Unsinn!
};

for (i = 0; i < doc.allParagraphStyles.length; i++)
ps_props.push( get_selprops(props2get, doc.allParagraphStyles[i]));

// do something
$.bp();

function get_selprops(obj, ps)
{
var o = {}, x = 0;
for (x in obj)
if (ps.hasOwnProperty(x) )
o[x] = ps[x];
return o;
}
}


Die ermittelten Eigenschaften - hier der Absatzformate - werden als Objekte im Array ps_props gesichert.

Manche Eigenschaften liegen als Objekt vor (appliedFont).
Diese müsstest Du ggf. durch eine weitere Routine auflösen bzw. die gewünschten Eigenschaften herauspicken.

----
edit: Nun habe ich doch mal kurz in den Link reingespickelt.
Bei Trevor ist die Auflösung ja praktisch auch sehr differenziert enthalten. ;-)
Vergiss meinen Ansatz oben.
Kann den Ansatz von Trevor aber aus zeitlichen Gründen jetzt nicht analysieren und erklären. :-(


als Antwort auf: [#526075]
(Dieser Beitrag wurde von Martin Fischer am 11. Apr 2014, 11:55 geändert)

Mehrere Eigenschaften von Absatzformaten auslesen

Kai Rübsamen
Beiträge gesamt: 4684

11. Apr 2014, 11:57
Beitrag # 8 von 12
Beitrag ID: #526103
Bewertung:
(3499 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Martin,

bis auf die for in-Schleife verstehe ich hier zumindest alles. Bin heute Abend allein zu Haus und werde das testen. Danke.

@ Werner: Natürlich auch vielen Dank. Während Martins Code für mich sehr einfach zu lesen ist, weis ich bei deinen Zeilen leider erst Mal gar nicht, was da los ist. >> das alte Problem ;-)


als Antwort auf: [#526100]

Mehrere Eigenschaften von Absatzformaten auslesen

Martin Fischer
  
Beiträge gesamt: 12783

11. Apr 2014, 11:58
Beitrag # 9 von 12
Beitrag ID: #526104
Bewertung:
(3497 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Rübi,

hier Trevors Skript mit ausgewählten Eigenschaften - props2sel:

Code
doc = app.activeDocument, 
ps = doc.allParagraphStyles,
l = ps.length,
paraStyles = [],
c = 0;
while (l--) {
var styleDetails = [], n = 0, s, x, p, q,
props2sel = {
appliedFont: null,
name: null,
pointSize: null,
fillColor: null,
underline: null,
parent: null
}
;
s = ps[l].properties;
for (x in props2sel) {
p = (s[x] && s[x].hasOwnProperty ("name")) ? s[x].name : s[x]; // change according to requirements.
if (p && p.constructor.name == "String") p = '"' + p +'"'; // ok if the sctring doesn't contain a " mark
else if (x == "tabList") p = getTabList (s[x]);
else if (p instanceof Object && p.constructor.name != "Enumerator") {
var objProps = [], z = 0;
for (q in p) objProps[z++] = q + ": " + p[q]
p = x + " {" + objProps.join(", ") + "}";
}
styleDetails[n++] = x + ": " + p;
}
paraStyles[c++] = "{" + styleDetails.join(", ") + "}";
}

temp = new File (Folder (Folder.temp) + "/" + doc.name + " Paragraph Style Properties " + ("" + new Date).replace(/:/g,"\xB7").replace(/\s\S+$/,"")+ ".txt");
temp.encoding = "UTF-8";
temp.lineFeed = ($.os[0]=="M") ? "Macintosh" :" Windows";
temp.open('w');
temp.write("\uFEFF" + paraStyles.join("\r"));
temp.close();
$.sleep(300);
temp.execute(true);

function getTabList (t) {
var tl = t.length, n, pTabList = [];
for (n = 0; n < tl; n++) { // if the leader etc. contains a " then you have to use ' instead of "
pTabList[n] = "({alignment: " + t[n].alignment + ', alignmentCharacter: "' + t[n].alignmentCharacter + '", leader: "' +t[n].leader + '", position: ' + t[n].position + "})";
}
return "[" + pTabList.join(", ") + "]";
}

function getGrepList (g) { // nestedGrepStyles
return // couldn't be bothered to do this one, sorry
var tl = g.length, n, pnestedGrepList = [];
for (n = 0; n < tl; n++) { // if the leader etc. contains a " then you have to use ' instead of "
// pTabList[n] = figure for yourself
}
return "[" + pTabList.join(", ") + "]";
}


----
edit: Sorry, hatte bei copy & paste einmal zu viel gedrückt, so dass das Skript 2x ausgeführt wurde.
Der Code oben ist nun korrigiert.


als Antwort auf: [#526103]
(Dieser Beitrag wurde von Martin Fischer am 11. Apr 2014, 12:17 geändert)

Mehrere Eigenschaften von Absatzformaten auslesen

Martin Fischer
  
Beiträge gesamt: 12783

11. Apr 2014, 12:01
Beitrag # 10 von 12
Beitrag ID: #526105
Bewertung:
(3496 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

Antwort auf: bis auf die for in-Schleife verstehe ich hier zumindest alles


Mit der for in-Schleife greifst Du der Reihe nach gezielt auf die keys des Objekts zu.


als Antwort auf: [#526103]

Mehrere Eigenschaften von Absatzformaten auslesen

Kai Rübsamen
Beiträge gesamt: 4684

11. Apr 2014, 12:35
Beitrag # 11 von 12
Beitrag ID: #526109
Bewertung:
(3461 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Huch und ich dachte, das wäre ein Dreizeiler ;-)

Dank dir > schau ich mir auch heute Abend an.


als Antwort auf: [#526105]

Mehrere Eigenschaften von Absatzformaten auslesen

Kai Rübsamen
Beiträge gesamt: 4684

12. Apr 2014, 11:54
Beitrag # 12 von 12
Beitrag ID: #526128
Bewertung:
(3293 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

hab dein Skript im Einzeilenmodus nachvollzogen und halbwegs verstanden, was passiert. Trevors Skript scheint dann schon die fertige Liste zu erzeugen.

Cool, was alles geht, aber (noch) eine Nummer zu hoch für mich ;-)


als Antwort auf: [#526109]
X