[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: 4664

11. Apr 2014, 09:07
Beitrag # 1 von 12
Bewertung:
(3276 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.

Gruß Kai Rübsamen
X

Mehrere Eigenschaften von Absatzformaten auslesen

WernerPerplies
Beiträge gesamt: 2683

11. Apr 2014, 09:42
Beitrag # 2 von 12
Beitrag ID: #526078
Bewertung:
(3258 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.

-

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign Alle neuen Skripte mit
neu: WpsProjectHandler 31.05.2020, Version 3.XX, neue Funktionen.
MultiSave ist Bestandteil meines WpsProjecthandlers
neu: WpsEanInTables, WpsSaRInHyperlinks
Kundenstimmen


als Antwort auf: [#526075]

Mehrere Eigenschaften von Absatzformaten auslesen

Kai Rübsamen
Beiträge gesamt: 4664

11. Apr 2014, 10:52
Beitrag # 3 von 12
Beitrag ID: #526086
Bewertung:
(3227 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?

Gruß Kai Rübsamen


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

Mehrere Eigenschaften von Absatzformaten auslesen

WernerPerplies
Beiträge gesamt: 2683

11. Apr 2014, 10:59
Beitrag # 4 von 12
Beitrag ID: #526088
Bewertung:
(3224 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.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign Alle neuen Skripte mit
neu: WpsProjectHandler 31.05.2020, Version 3.XX, neue Funktionen.
MultiSave ist Bestandteil meines WpsProjecthandlers
neu: WpsEanInTables, WpsSaRInHyperlinks
Kundenstimmen


als Antwort auf: [#526086]

Mehrere Eigenschaften von Absatzformaten auslesen

Kai Rübsamen
Beiträge gesamt: 4664

11. Apr 2014, 11:18
Beitrag # 5 von 12
Beitrag ID: #526093
Bewertung:
(3214 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.

Gruß Kai Rübsamen


als Antwort auf: [#526088]

Mehrere Eigenschaften von Absatzformaten auslesen

WernerPerplies
Beiträge gesamt: 2683

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

dann passe ich.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign Alle neuen Skripte mit
neu: WpsProjectHandler 31.05.2020, Version 3.XX, neue Funktionen.
MultiSave ist Bestandteil meines WpsProjecthandlers
neu: WpsEanInTables, WpsSaRInHyperlinks
Kundenstimmen


als Antwort auf: [#526093]

Mehrere Eigenschaften von Absatzformaten auslesen

Martin Fischer
  
Beiträge gesamt: 12590

11. Apr 2014, 11:45
Beitrag # 7 von 12
Beitrag ID: #526100
Bewertung:
(3186 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. :-(

Viele Grüße
Martin




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: 4664

11. Apr 2014, 11:57
Beitrag # 8 von 12
Beitrag ID: #526103
Bewertung:
(3174 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 ;-)

Gruß Kai Rübsamen


als Antwort auf: [#526100]

Mehrere Eigenschaften von Absatzformaten auslesen

Martin Fischer
  
Beiträge gesamt: 12590

11. Apr 2014, 11:58
Beitrag # 9 von 12
Beitrag ID: #526104
Bewertung:
(3172 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.

Viele Grüße
Martin




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: 12590

11. Apr 2014, 12:01
Beitrag # 10 von 12
Beitrag ID: #526105
Bewertung:
(3171 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.

Viele Grüße
Martin




als Antwort auf: [#526103]

Mehrere Eigenschaften von Absatzformaten auslesen

Kai Rübsamen
Beiträge gesamt: 4664

11. Apr 2014, 12:35
Beitrag # 11 von 12
Beitrag ID: #526109
Bewertung:
(3136 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.

Gruß Kai Rübsamen


als Antwort auf: [#526105]

Mehrere Eigenschaften von Absatzformaten auslesen

Kai Rübsamen
Beiträge gesamt: 4664

12. Apr 2014, 11:54
Beitrag # 12 von 12
Beitrag ID: #526128
Bewertung:
(2968 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 ;-)

Gruß Kai Rübsamen


als Antwort auf: [#526109]
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
02.02.2023

Prozesse optimieren und effizient gestalten

Zürich
Donnerstag, 02. Feb. 2023, 08.00 - 10.00 Uhr

Digitalisierung, Webauftritt

Digitalisierung mitgestalten - Worauf kommt es an? Wie wichtig ist die Webseite? Webseite mit Word Press? Interne Prozesse optimieren

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: Birol Isik, E-Mailinfo AT bkcc DOT ch

https://digitalisierung-heute.ch/digitalisierung-informationstag-schweiz/

Veranstaltungen
01.03.2023 - 09.03.2023

Online
Mittwoch, 01. März 2023, 00.00 Uhr - Donnerstag, 09. März 2023, 00.00 Uhr

Online Webinar

Wie gehen wir mit diesen Veränderungen um? Was ist notwendig, damit wir die Digitalisierung im Unternehmen klappt? Veränderungsprozesse verstehen und entsprechend handeln Mitarbeiter als Botschafter Webseite mit WordPress erstellen SEA /SEO (Ads aufschalten)

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: B. Isik, E-Mailinfo AT snfa DOT ch

https://www.fernstudiumfitness.ch/digitalisierung-schweiz/