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

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

11. Apr 2014, 09:42
Beitrag # 2 von 12
Beitrag ID: #526078
Bewertung:
(3023 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
neu: WpsProjectHandler 16.12.2020, Version 3.XX, neue Funktionen
Kundenstimmen


als Antwort auf: [#526075]

Mehrere Eigenschaften von Absatzformaten auslesen

Kai Rübsamen
Beiträge gesamt: 4659

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

11. Apr 2014, 10:59
Beitrag # 4 von 12
Beitrag ID: #526088
Bewertung:
(2989 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
neu: WpsProjectHandler 16.12.2020, Version 3.XX, neue Funktionen
Kundenstimmen


als Antwort auf: [#526086]

Mehrere Eigenschaften von Absatzformaten auslesen

Kai Rübsamen
Beiträge gesamt: 4659

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

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


als Antwort auf: [#526093]

Mehrere Eigenschaften von Absatzformaten auslesen

Martin Fischer
  
Beiträge gesamt: 12390

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

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

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

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

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

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

Aktuell

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
21.01.2021 - 22.01.2021

Digicomp Academy AG, Bern oder Basel
Donnerstag, 21. Jan. 2021, 08.30 Uhr - Freitag, 22. Jan. 2021, 17.00 Uhr

Kurs

Dieser Basic-Kurs ist der perfekte Einstieg in die Welt von InDesign, dem vielseitigen Layout-Programm. Sie lernen, wie InDesign aufgebaut ist, wie saubere Dokumente erstellt werden und wie man korrekt mit gelieferten InDesign-Projekten umgeht.

Dauer: 2 Tage
Preis: CHF 1'400.–

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberatung AT digicomp DOT ch

digicomp.ch/d/INDEM1

Veranstaltungen
21.01.2021

Illustrator - das unbekannte Wesen

Online
Donnerstag, 21. Jan. 2021, 19.00 Uhr

Vortrag

Millionen Funktionen, und immer kommen neue dazu! Monika Gause ist jeden Januar aufs Neue ein gern gesehener Gast bei der IDUG Stuttgart. - Sie bringt alle Neuerungen mit, die 2020 dazukamen und jede Menge Tipps und Tricks. - Zudem wird sie uns informieren, was wir in Illustrator beachten müssen, wenn wir Daten fürs Web erstellen bzw. aufbereiten. - Wichtig zu wissen: "Dos and Don'ts" in Illustrator. Welche Fehler sollte man dringend vermeiden und was muss man unbedingt tun, damit es Spaß macht mit Illustrator zu arbeiten. - Dieses Jahr hast Du zusätzlich die Möglichkeit Monika im Voraus Fragen zu stellen. Fülle dieses Formular mit deinen Fragen; auch Beispieldateien sind anfügbar: https://forms.gle/fJmF8C6MjbDoEhED8

Nein

Organisator: InDesign Usergroup Stuttgart

Kontaktinformation: Christoph Steffens, E-Mailidug AT satzkiste DOT de

https://idugs67.eventbrite.de/

IDUGS #67 Illustrator mit Monika Gause

Neuste Foreneinträge


Fortlaufende Nummerierung der Druckbogen

Verschiedene Netzwerke Handeln

Netzwerklaufwerke verbinden -> Bei nicht verfügbar Fehlermeldung unterdrücken

Ende der Unterstützung von Flash Player - und jetzt?

Bilder High> Low

weitere peinliche Fragen zu Selbstverständlichkeiten

WLAN-Verbindung mit iPhone 11

In Illustrator einen Kreis zerschneiden bzw. erstmal sinnvoll anlegen

Event 'mausedown': Kriege das Kontext-Menü des Browsers nicht weg...

Skript-Ordner
medienjobs