[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Finde Textrahmen mit größter Schriftgröße

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

Finde Textrahmen mit größter Schriftgröße

WernerPerplies
Beiträge gesamt: 2633

14. Mai 2021, 07:40
Beitrag # 16 von 28
Beitrag ID: #579884
Bewertung:
(2061 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Faxinger,

Zitat Wieso kann ich nicht danach (sobald der Array fertig generiert wurde)den größten Wert aus diesem Array ermitteln?

Doch kannst Du!

Annahme: Array austeigend:
array.pop() -> letztes Element mit dem größten Wert

Annhame: Array absteigend:
array.shift() -> erstes Element mit dem größten Wert

Das Element wird aus dem Array entfernt.

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
Kundenstimmen


als Antwort auf: [#579883]
X

Finde Textrahmen mit größter Schriftgröße

Martin Fischer
  
Beiträge gesamt: 12477

14. Mai 2021, 07:41
Beitrag # 17 von 28
Beitrag ID: #579885
Bewertung:
(2060 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Ich glaube Programmierer denken anders :-)


Bin auch kein Programmierer, sondern ein an Automatisierung interessierter Schriftsetzer.

Antwort auf: Wieso kann ich nicht danach (sobald der Array fertig generiert wurde)den größten Wert aus diesem Array ermitteln?


Das geht schon.
Code
var max = Math.max(arr); 


Aber dann kennst Du zwar den maximalen Wert, weißt aber (noch) nicht, in welchem Textrahmen der nun steckt, weil er - skripttechnisch - noch keine Verbindung zum Textrahmen hat.

Nun könntest Du hingehen, und die Schleife nochmal durchgehen und prüfen, wo dieser Wert (zum ersten Mal) vorkommt. Das ist recht umständlich (und frißt ggf. Zeit).
Oder Du kannst die Position des höchsten Wertes im Array ermitteln und von dort auf den entsprechenden Textrahmen in der Auswahl schließen.

In meinem einfachen Code oben habe ich versucht, beim ersten Durchgang quasi das Ergebnis schon mitzunehmen: Was bei der Prüfung gleich richtig einsortiert wird, braucht nicht nachher neu herausgefunden werden.

Aber wie oben angegeben: Es führen viele Wege nach Rom.

Viele Grüße
Martin




als Antwort auf: [#579883]
(Dieser Beitrag wurde von Martin Fischer am 14. Mai 2021, 07:42 geändert)

Finde Textrahmen mit größter Schriftgröße

faxinger666
Beiträge gesamt: 161

14. Mai 2021, 07:42
Beitrag # 18 von 28
Beitrag ID: #579886
Bewertung:
(2056 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

vielen Dank für dein Skript, das kann ich logisch nachvollziehen, bis auf einen kleinen Punkt :-)
Code
                    arr.push(String(sel[i].characters[0].pointSize)); 


Warum wird hier ein String vor die Schriftgröße gesetzt?
Danke
LG
faxinger


als Antwort auf: [#579877]

Finde Textrahmen mit größter Schriftgröße

WernerPerplies
Beiträge gesamt: 2633

14. Mai 2021, 07:43
Beitrag # 19 von 28
Beitrag ID: #579887
Bewertung:
(2056 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Faxinger,

Zitat Wieso kann ich nicht danach (sobald der Array fertig generiert wurde)den größten Wert aus diesem Array ermitteln?

Doch kannst Du!

Annahme: Array austeigend:
array.pop() -> letztes Element mit dem größten Wert

Annhame: Array absteigend:
array.shift() -> erstes Element mit dem größten Wert

Das Element wird aus dem Array entfernt.

Mit meinem Prototypen würde das so aussehen:

ArrayMitTextStyleRanges.sortThis("pontSize", true, true).shift(); // , true -> absteigend, true -> numerisch

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
Kundenstimmen


als Antwort auf: [#579883]

Finde Textrahmen mit größter Schriftgröße

faxinger666
Beiträge gesamt: 161

14. Mai 2021, 07:54
Beitrag # 20 von 28
Beitrag ID: #579888
Bewertung:
(2043 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
var max = Math.max(arr);

Genau das hatte ich ja versucht mit 2 Durchgängen,
was zwar umständlicher ist als dein elegantes Vorgehen aber eben für mich durchschaubarer :-)

Aber math max lieferte mir nicht die größte pointsize von allen ausgewählten Textrahmen erstes Zeichen, sondern die pointsize des ersten ausgewählten Textrahmens (also die Größe des ersten Zeichens dieses Textrahmens) Und da bin ich gescheitert.

Meine Vorgehensweise wäre so, dass ich nachdem der maxWert ermittelt wurde, den Textrahmen adressieren würde. Wie genau muss ich mir noch überlegen. Vielleicht mit parentTextframe?

Vielen vielen Dank nochmal.


als Antwort auf: [#579885]

Finde Textrahmen mit größter Schriftgröße

Martin Fischer
  
Beiträge gesamt: 12477

14. Mai 2021, 08:10
Beitrag # 21 von 28
Beitrag ID: #579890
Bewertung:
(2055 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: arr.push(String(sel[i].characters[0].pointSize));


Im ersten Entwurf des Skripts oben sollten die Schriftgrößen am Ende als String ausgegeben werden. Zwar hätte die Umwandlung in Kombination mit einem anderen hinzuzufügenden String-Element (in JavaScript) automatisch funktioniert. Aber wo möglich, versuche ich die Kontrolle über diese Umwandlung zu behalten.

Und genau diese ausdrückliche Stringumwandlung sorgt bei Dir bei der späteren Sortierung für unerwartete Ergebnisse: im Array wird nicht nach nu merischen Schriftgrößen sortiert, sondern nach Strings.

Deswegen solltest Du auf die String-Umwandlung der Werte bei der Aufnahme in’s Array verzichten:

Code
arr.push(sel[i].characters[0].pointSize); 


Viele Grüße
Martin




als Antwort auf: [#579888]
(Dieser Beitrag wurde von Martin Fischer am 14. Mai 2021, 08:20 geändert)

Finde Textrahmen mit größter Schriftgröße

Martin Fischer
  
Beiträge gesamt: 12477

14. Mai 2021, 08:14
Beitrag # 22 von 28
Beitrag ID: #579891
Bewertung:
(2049 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Meine Vorgehensweise wäre so, dass ich nachdem der maxWert ermittelt wurde, den Textrahmen adressieren würde. Wie genau muss ich mir noch überlegen. Vielleicht mit parentTextframe?


parentTextFrames[0] würde passen, wenn es denn eine Verbindung von der ermittelten Zahl zu dem Textrahmen, in dem sie enthalten ist, geben würde.
Aber genau diese Verbindung fehlt Dir.
Du hast die maximale Zahl und kannst sie benennen. Aber zu diesem Zeitpunkt wissen Du und das Skript nicht mehr, aus welchem Textrahmen die Zahl entnommen ist, da sie nur noch nackert als Zahl da steht, ohne den Container, aus dem sie ermittelt wurde.

Viele Grüße
Martin




als Antwort auf: [#579888]

Finde Textrahmen mit größter Schriftgröße

faxinger666
Beiträge gesamt: 161

14. Mai 2021, 08:46
Beitrag # 23 von 28
Beitrag ID: #579893
Bewertung:
(2032 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke für die Erklärung, jetzt habe ich es geschnallt.

Schönen Tag noch.

Alles Liebe
faxinger


als Antwort auf: [#579891]

Finde Textrahmen mit größter Schriftgröße

Uwe Laubender
Beiträge gesamt: 4925

14. Mai 2021, 13:00
Beitrag # 24 von 28
Beitrag ID: #579897
Bewertung:
(2011 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,
ein Array kann ja nicht nur Strings speichern, man könnte auch den zugehörigen character oder textStyleRange mit dazu speichern. In einem Aufwasch.

Oder man macht das in einem Objekt.

Eine Schleife durch alle textStyleRanges, die PointSize wird ermittelt, übersteigt sie die PointSize im gespeicherten Objekt oder Array, werden die Werte dort einfach neu zugewiesen.

Hier ein Beispiel mit einem Array als Resultat.
Voraussetzung ist ein ausgewählter Textrahmen:

Code
var selectedTextFrame = app.selection[0]; 

var allTextStyleRanges =
selectedTextFrame.textStyleRanges.everyItem().getElements();

var resultArray =
[
[
0.001 ,
"Default"
]
];

for( var n=0; n<allTextStyleRanges.length; n++ )
{
if( resultArray[0][0] < allTextStyleRanges[n].pointSize )
{
resultArray[0][0] = allTextStyleRanges[n].pointSize;
resultArray[0][1] = allTextStyleRanges[n];
}
};


app.select( resultArray[0][1] );
alert( "PointSize:" +"\r"+ resultArray[0][0] );

*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#579893]

Finde Textrahmen mit größter Schriftgröße

Martin Fischer
  
Beiträge gesamt: 12477

14. Mai 2021, 13:39
Beitrag # 25 von 28
Beitrag ID: #579899
Bewertung:
(2000 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

zum Einen hatten Herr Perplies und ich oben auf die Möglichkeit eines Arrays mit Objekten und anschließender Sortierung bereits hingewiesen. Auf eine Ausführung dieses Ansatzes hatte ich jedoch bewusst verzichtet, um es Faxinger nicht zu kompliziert zu machen.

Zum Anderen geht es Faxinger nicht um die Ermittlung der textStyleRanges eines ausgewählten Textrahmens, sondern um die Bestimmung desjenigen Textrahmens (aus einer Auswahl von mehreren - ausdrücklich mit Inhalt), dessen erstes Zeichen (oder erster TextStyleRange) den höchsten Schriftgrad hat.

Oder hast Du für Deine Idee mit dem zweidimensionalen Array bewusst eine geänderte Aufgabenstellung verwendet?



Ferner hätte ich noch eine Frage zu Deiner Feststellung oben:
Zitat Arbeite mit textStyleRanges, anstatt mit einzelnen Zeichen.
[..]
Geht, je nach formatiertem Text, sehr viel schneller.
Vor allem dann, wenn Du große Textmengen hast.


Ist dem bei der gegebenen Aufgabenstellung tatsächlich so, dass die Auswertung des ersten textStyleRanges statt des ersten characters in mehreren ausgewählten Textrahmen einen zeitlichen Unterschied macht?
Kann mir das eigentlich nicht vorstellen, habe das aber auch nicht nachgemessen, weil ich vermute, dass bei ein paar Textrahmen der zeitliche Unterschied nicht ins Gewicht fallen dürfte und auf einem Druckbogen erwarte ich eine überschaubare Zahl an zu prüfenden Textrahmen, und nicht hunderte oder gar tausende.

Aber ich weiß, Du bist ein Perfektionist. ;-)

Viele Grüße
Martin




als Antwort auf: [#579897]
(Dieser Beitrag wurde von Martin Fischer am 14. Mai 2021, 14:05 geändert)

Finde Textrahmen mit größter Schriftgröße

Uwe Laubender
Beiträge gesamt: 4925

14. Mai 2021, 14:09
Beitrag # 26 von 28
Beitrag ID: #579902
Bewertung:
(1983 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
ich hoffe, ich habe ein für faxinger lesbares und verstehbares Skript geschrieben, das nach seiner sehr eng formulierten Aufgabenstellung etwas mehr Perspektive zeigt.
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#579899]

Finde Textrahmen mit größter Schriftgröße

Martin Fischer
  
Beiträge gesamt: 12477

14. Mai 2021, 14:23
Beitrag # 27 von 28
Beitrag ID: #579903
Bewertung:
(1971 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

dem ist gewiss so.
Mich verwundert lediglich etwas die Konzentration auf die textStyleRanges.
Und da dachte ich, ich könnte ja mal nachfragen, weil ich es mir nicht so recht vorstellen kann, dass/wie die Auswertung der jeweils ersten textStyleRanges von vielen Textrahmen performanter sein soll als die Auswertung von den jeweils ersten characters.

Werde gelegentlich mal eine Versuchsanordnung anlegen und dem nachspüren ob und ab wann das messbar wird.

Viele Grüße
Martin




als Antwort auf: [#579902]
(Dieser Beitrag wurde von Martin Fischer am 14. Mai 2021, 14:25 geändert)

Finde Textrahmen mit größter Schriftgröße

faxinger666
Beiträge gesamt: 161

18. Mai 2021, 13:54
Beitrag # 28 von 28
Beitrag ID: #579920
Bewertung:
(1333 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe und Martin,

nochmals herzlichen Dank für eure Anregungen.
@Uwe: der Weg über die textstyleRanges wäre mir deshalb nicht in den Sinn gekommen, weil es ja nur um die Ermittlung des ersten Zeichens bzw. dessen Schriftgröße aus einer Auswahl an Textrahmen ging. Bei textstyleRanges denke ich eher an wechselnde Formatierungen innerhalb eines Textabschnittes und das wäre in diesem Fall für mich kein Unterscheidungsmerkmal mit dem ich arbeiten würde.

Die Laufdauer des Skripts ist in meinem Fall auch nebensächlich, da meistens eine überschaubere Anzahl an Textrahmen (meist unter 10) ausgewählt ist. Ob die Ermittlung des Textrahmens mit dem größten ersten Zeichens dabei 0,05 Sekunden oder 0,04 Sekunden dauert ist mir schlichtweg Banane :-)

Alles Liebe
faxinger


als Antwort auf: [#579897]
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
05.02.2021 - 05.11.2021

Digicomp Academy AG, Limmatstrasse 50, 8005 Zürich
Freitag, 05. Feb. 2021, 13.00 Uhr - Freitag, 05. Nov. 2021, 17.00 Uhr

Lehrgang

Bilden Sie sich zum zertifizierten Publishing-Multimedia-Profi aus. Neben Fotografie und Video befassen Sie sich mit der Medienproduktion, digitalen Publikationen und dem Webdesign für Desktop- und mobile Endgeräte.

Preis: CHF 10'500.-
Dauer: 30 Tage (ca. 210 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt

Ja

Organisator: Digicomp Academy AG

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

digicomp.ch/d/9PM

Veranstaltungen
12.03.2021 - 16.07.2021

Digicomp Academy AG, Zürich oder virtuell
Freitag, 12. März 2021, 13.00 Uhr - Freitag, 16. Juli 2021, 17.00 Uhr

Lehrgang

Steigen Sie in die Welt des Publishings ein und erlangen Sie die Zertifizierung von publishingNETWORK. Lernen Sie in diesem Lehrgang Druckmedien professionell zu erarbeiten, druckfertige PDFs zu erstellen und CI/CD-Vorgaben umzusetzen.

Preis: CHF 6'300.-
Dauer: 18 Tage (ca. 126 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt.

Ja

Organisator: Digicomp Academy AG

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

digicomp.ch/d/9PBAS