[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Textlänge in mm oder pt?

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

Textlänge in mm oder pt?

sleepless
Beiträge gesamt: 152

7. Dez 2010, 15:55
Beitrag # 1 von 9
Bewertung:
(3706 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich habe mal wieder ein kleines Problem: Ich gebe per Skript einen Textrahmen aus, in dem ein einzeiliger Text steht (meistens ein Preis; z.B. 99.99). Die x- und y-Koordinate des Text habe ich, die Höhe des Textes auch, aber wie kann ich mir Breite des Textes in eine Variable schreiben?
Mit txtFrame.texts.item(0).length; bekomme ich nur die Anzahl der Buchstaben, aber ich bräuchte die Länge, um den Text durchzustreichen (von links unten nach rechts oben). Da der Preis aber von einer Datenbank übergeben wird, ebenso wie die Schriftart und Schriftgröße, muss ich die Koordinaten errechnen. Das letzte Puzzlesteinchen, das mir fehlt, ist ein Befehl, der die Textlänge in mm oder pt oder auch px zurückgibt.

Vielen Dank für Eure Mühe,
stephan
X

Textlänge in mm oder pt?

Martin Fischer
  
Beiträge gesamt: 12691

7. Dez 2010, 16:24
Beitrag # 2 von 9
Beitrag ID: #459146
Bewertung:
(3692 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Stephan,

wenn ich Dich richtig verstehe, dann willst Du nicht die Distanz eines bestimmt,en Textes vom Beginn des Buchstabens a bis zum Ende des Buchstabens b ermitteln, sondern die Breite eines Textrahmens.

Ein Textrahmen hat die Eigenschaft geometricBounds.
Darin sind (in einem Array) die beiden Eckpunkte links oben und rechts unten definiert: [y1, x1, y2, x2],

Die Breite eines Textrahmens ist die Distanz zwischen x1 von x2.
Ausgegeben wird Dir in dem aktuell eingestellten Maßstab.

Zum Umrechnen von einem Maßsystem ins andere gehst Du am besten so vor:
1. altes Maßsystem sichern, damit es später wieder eingestellt werden kann;
2. neues Basismaßsystem setzen;
3. Berechnungen durchführen, ggf. Werte über Dreisatz in anderes Maßsystem konvertieren;
4. altes Maßsystem wieder herstellen.

Zum Sichern und Wiederherstellen der Maßeinheiten siehe die Beispielfunktion setupViewPrefs() von Dirk Becker.


als Antwort auf: [#459145]
(Dieser Beitrag wurde von Martin Fischer am 7. Dez 2010, 16:30 geändert)

Textlänge in mm oder pt?

sleepless
Beiträge gesamt: 152

7. Dez 2010, 16:33
Beitrag # 3 von 9
Beitrag ID: #459148
Bewertung:
(3689 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
Zitat wenn ich Dich richtig verstehe, dann willst Du nicht die Distanz eines bestimmt,en Textes vom Beginn des Buchstabens a bis zum Ende des Buchstabens b ermitteln, sondern die Breite eines Textrahmens.

Nein, leider nicht. Ich will tatsächlich die Breite des Textes im Rahmen bestimmen. Natürlich könnte ich den Rahmen mit frameToContent auf die Breite bringen und dann auslesen, aber dann müsste ich ihn auch wieder zurückstellen. Ich dachte, evtl. gibt es da ja eine andere Möglichkeit, da InDesign ja eigentlich weiß, wie breit der Text ist (sonst könnte es ja den Rahmen auch nicht anpassen)...

Gruß
stephan


als Antwort auf: [#459146]

Textlänge in mm oder pt?

Hans Haesler
  
Beiträge gesamt: 5822

7. Dez 2010, 16:58
Beitrag # 4 von 9
Beitrag ID: #459153
Bewertung:
(3671 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Stephan,

vielleicht hilft das:

Code
var txtFrame = app.documents[0].textFrames[0]; 
var pos1 = txtFrame.texts.item(0).insertionPoints[0].horizontalOffset;
var pos2 = txtFrame.texts.item(0).insertionPoints[-1].horizontalOffset;
alert (pos2-pos1);

Gruss, Hans


als Antwort auf: [#459148]

Textlänge in mm oder pt?

sleepless
Beiträge gesamt: 152

8. Dez 2010, 08:57
Beitrag # 5 von 9
Beitrag ID: #459192
Bewertung:
(3602 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

ja, das funktioniert wunderbar. Allerdings verstehe ich den Code nicht ganz. insertionPoints[] ist, glaube ich,
der Stand des Cursors und [0] wahrscheinlich die erste Position. Aber wieso [-1]?

Vielen Dank auch
stephan


als Antwort auf: [#459153]

Textlänge in mm oder pt?

Hans Haesler
  
Beiträge gesamt: 5822

8. Dez 2010, 10:07
Beitrag # 6 von 9
Beitrag ID: #459195
Bewertung:
(3586 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Stephan,

bitteschön.

Mit -1 kann in vielen Fällen das letzte Objekt angesprochen werden.

Im vorliegenden Beispiel ist das der letzte Einfügungspunkt der Textkette. Das -1 ist praktisch, weil man nicht immer weiss, wieviele Buchstaben die Zeile enthält.

Führe bitte Folgendes aus: Ein neues Dokument, Textrahmen aufziehen, das Wort test tippen. Dann dieses Script starten:

Code
var txtFrame = app.documents[0].textFrames[0]; 
var nPos = txtFrame.texts.item(0).insertionPoints.length;
alert (nPos);

Es wird 5 angezeigt: Anzahl Buchstaben plus eins. Weil zwischen jedem Buchstaben ein Einfügungspunkt ist und auch am Anfang und am Ende der Textkette.

Man könnte also die Anzahl Einfügepunkte feststellen, davon 1 abziehen (weil JavaScript bei Null zu zählen beginnt) und das Ergebnis anstelle des -1 einsetzen:

Code
var txtFrame = app.documents[0].textFrames[0]; 
var nPos = (txtFrame.texts.item(0).insertionPoints.length)-1;
var pos1 = txtFrame.texts.item(0).insertionPoints[0].horizontalOffset;
var pos2 = txtFrame.texts.item(0).insertionPoints[nPos].horizontalOffset;
alert (pos2-pos1);


Noch etwas: Vielleicht möchtest Du ein Ergebnis mit weniger Nachkommastellen:

Code
var txtFrame = app.documents[0].textFrames[0]; 
var pos1 = txtFrame.texts.item(0).insertionPoints[0].horizontalOffset;
var pos2 = txtFrame.texts.item(0).insertionPoints[-1].horizontalOffset;
var txtL = (Math.floor(((pos2-pos1)*10)+.5))/10;
alert (txtL);

Das +.5 rundet nach oben. Für zwei Nachkommastellen *100 und /100 einsetzen. Und für drei *1000 und /1000.

Gruss, Hans


als Antwort auf: [#459192]

Textlänge in mm oder pt?

sleepless
Beiträge gesamt: 152

8. Dez 2010, 10:47
Beitrag # 7 von 9
Beitrag ID: #459204
Bewertung:
(3568 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

wow, so ist das also. Ich muss zugeben, ich bin nicht gerade der große Skripter vor dem Herrn; aber ich finde langsam Gefallen daran, vor allem dann, wenn es funktioniert. *smile*
Ich habe mich auch schon nach Literatur umgesehen, bin aber noch nicht weit gekommen. Hast Du vielleicht einen Tipp für Anfänger? Irgendwie komme ich auch mit der Hilfe im ExtendScript Toolkit nicht zurecht; ich finde nie das, was ich brauche...

Na, dann mach ich jetzt mal weiter, vielen Dank nochmal
Stephan


als Antwort auf: [#459195]

Textlänge in mm oder pt?

Hans Haesler
  
Beiträge gesamt: 5822

8. Dez 2010, 11:36
Beitrag # 8 von 9
Beitrag ID: #459207
Bewertung:
(3553 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Stephan,

Literatur zu diesem Thema? Erste Wahl ist sicher die deutsche Übersetzung (durch Martin Fischer) von Peter Kahrels "Scripting InDesign with JavaScript". Als TecFeed herunterladen bei O’Reilly: InDesign mit JavaScript automatisieren

Das ESTK konsultiere ich nur ausnahmsweise. Viel praktischer ist der InDesign JavaScript Reference Guide von jongware.

Gruss, Hans


als Antwort auf: [#459204]

Textlänge in mm oder pt?

sleepless
Beiträge gesamt: 152

8. Dez 2010, 12:35
Beitrag # 9 von 9
Beitrag ID: #459215
Bewertung:
(3531 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

vielen Dank. Werde ich mir beides heute abend mal anschauen.

Schönen Tag noch
stephan


als Antwort auf: [#459207]
X