Es gibt viele Möglichkeiten, dies zu tun. Ich zeige hier, wie ein Ingenieur das Problem angehen würde. Der Punkt ist zu zeigen, dass der Ansatz in vielerlei Hinsicht analog zu vielen anderen Bereichen ist. Es laut aufzuzählen scheint langweilig und in einfachen Fällen wie diesem wird es lautlos im Kopf gemacht. Dies veranschaulicht nur die Methode.
Warnung lange Erklärung.
Stufe 1: Lösung definieren
- Holen Sie sich die Breite der Zeichenfolge.
- Verwenden einer bestimmten Schriftart.
- Vorzugsweise auf technisch nutzbare Weise also minimaler menschlicher Eingriff.
- Verwenden der Schriftkodierung: Unbekannte Fragenklärung wirkt sich auf die Lösung aus
- Zweck: Unbekannte Fragenklärung, wirkt sich auf die Lösung aus
- Wie oft wird das Tool benötigt: Unbekannte Fragenklärung, wirkt sich auf die Lösung aus, wenn dies häufig der Fall ist
- Stapelverarbeitung erforderlich: Unbekannte Fragenklärung, wirkt sich bei Bedarf auf die Lösung aus
- Benutzereingabe: Zeichenfolge plus Schriftart? Disambiguieren
- Ausgabe: für einen automatisierten Prozess oder für den manuellen Gebrauch?
- Nutzungsumgebung: Welches Betriebssystem? Unbekannte Fragenklärung, wirkt sich stark auf die Lösung aus
- Einheit: Pixel, pt, Zoll oder mm? Unbekannte Fragenklärung, wirkt sich auf die Lösung aus
Wie Sie sehen, gibt es viele Unbekannte, die beantwortet werden müssen. Vor allem, wenn man eine gute Lösung haben möchte, die an den Kunden geliefert werden kann. Bemühen Sie sich immer, das Problem zu verstehen.
Stufe 2: Suche nach Methoden in der Literatur (oder Brainstorming)
In der ersten Phase werden Anwendungen und Methoden aufgelistet, die Antworten liefern können:
Graphics applications (adobe has scripting api OK)
Page setters (TEX solution above)
Operating system (windows has methods for font metrics)
Manually parse fontfile (Infeasible, many formats in one need to implement a lot of routines)
postscript interpretters (solution known)
GUI toolkits (QT can do this)
Other Tookints (Graphing tools like Scipy have this info)
Die Liste reicht aus, um zu testen
Stufe 3: Prototyp (Skizze)
mit Postscript
Postscript ist eine bekannte Methode. Das Problem mit Postscript ist die Engine, mit der Sie dies tun, da sie leicht unterschiedliche Auswirkungen haben. Die Verwendung von gohostscript funktioniert wie folgt:
:: usage stringWidth string systemfont
set "ps=(%1) /%2 findfont 12 scalefont setfont 0 0 moveto true charpath pathbbox pop exch pop exch sub pstack"
gswin64c -dQUIET -dBATCH -r1200 -dNODISPLAY -sFONTPATH=%windir%\fonts -c %ps%
Funktioniert unter Windows, gibt die Punktbreite zurück und funktioniert wahrscheinlich auch unter Linux mit einigen Änderungen. Randbedingungen unbekannt. Bitte um Klarstellung. Probleme: Sie müssen die Zeichencodierung korrigieren oder die ps-Zwischendatei verwenden. Andernfalls funktioniert keine beabstandete Zeichenfolge. Böse Codierungsprobleme, die bei Verwendung westlicher Sprachen beherrschbar sind.
Verwenden von Illustrator und Javascipt
Manuelles Verwenden des Illustrators: Wenn Sie den Pfad skizzieren, können Sie die Breite des Texts im Feld Breite in der Benutzeroberfläche lesen. Sobald dies verstanden ist, kann es per Skript erstellt werden.
Dies kann in Javascript kodifiziert werden:
#target illustrator
var doc = app.documents.add();
var text = doc.textFrames.add();
text.contents = "test";
text.textRange.characterAttributes.size = 12;
text.textRange.characterAttributes.textFont = textFonts.getByName("Onyx");
var outline = text.createOutline();
var bounds = outline.geometricBounds
var width = bounds[1]-bounds[3]
alert(width+" pt")
Funktioniert, benötigt aber Illustrator kann ein Problem sein oder auch nicht. Das Ergebnis kann bei Bedarf unter Berücksichtigung einiger technischer Aspekte verfeinert werden. Das Gleiche kann in VB oder Applescript oder mit COM mit C, C ++, Python, Perl, Ruby usw. erfolgen. Kann bei Bedarf auch über die Befehlszeile verwendet werden.
Und nachdem einige der oben genannten getestet wurden, wählen Sie eine zur Verfeinerung.
PS: Könnte op klarstellen?