Größe eines Textes ermitteln
Rol
- perl
Hi,
ich habe folgendes Problem:
Eine HTML-Seite soll auf ein vorgefertigtes Formular (ich meine eines aus Papier, A4, nicht <form></form>) ausgedruckt werden.
Dabei soll der Inhalt einer Tabellenzelle (ein Text) genau in ein Feld des Formulars passen.
Insbesondere darf der Text die Zelle nicht "aufblähen", da sonst über den Rand des (Papier-) Formulars geschrieben wird.
Zwei Dinge machen die Sache nun zum Problem:
1. Der Text wird individuell von Kunden eingegeben und ist dementsprechend verschieden lang.
2. Aus gestalterischen Gründen ist beim bestem Willen keine Schriftart mit konstanten Zeichenbreiten zu verwenden, ich verwende z.Z. Comic Sans MS.
Z.Z. steuere ich die Schriftgröße in Abhängigkeit von der Anzahl der Zeichen im Text. Dies ist aber eine ziemlich unzulängliche Lösung, da bei o.g. Schriftart "große" Buchstaben (z.B. m, w) mehr Platz brachen als i's und l's.
Ich Suche nun eine Möglichkeit, vor dem generieren der HTML-Seite den zu erwartenden Platzbedarf auf dem Ausdruck zu ermitteln um ggf. die Schriftgröße zu verkleinern.
Das einzige, was mir bisher dazu eingefallen ist, ist in einer Tabelle die einzelnen Breiten aller Zeichen abzulegen und dann den Text Zeichen für Zeichen durchzugehen und den Platzbedarf sozusagen aufzusaldieren.
Dies scheint mir einerseits wenig "elegant", andererseits habe ich meine Zweifel, ob dies genau funktioniert. Außerdem müßte ich mir die Breite der Zeichen durch ausmessen von z.B. (100 Zeichen) / 100 ermitteln, was die Sache nicht gerade zuverlässiger machen wird.
Hat jemand eine Idee dazu?
Danke an alle, die es sich alles durchgelesen haben.
Gruß,
Rol
Hi,
Eine HTML-Seite soll auf ein vorgefertigtes Formular (ich meine eines aus Papier, A4, nicht <form></form>) ausgedruckt werden.
bei _Dir_ oder bei _jemandem_? In letzterem Fall kannst Du die Sache vergessen, da Du nicht mal weißt, ob der Mensch überhaupt einen Drucker hat, geschweige denn, wie der eingestellt ist, ob er die Schriftart versteht, wie groß er sie macht usw.
Z.Z. steuere ich die Schriftgröße in Abhängigkeit von der Anzahl der Zeichen im Text.
Ja, das ist suboptimal. Aber bricht der Text beim Ausdruck nicht automatisch um? Was für Software wird eigentlich verwendet, wie reagiert/arbeitet diese?
Das einzige, was mir bisher dazu eingefallen ist, ist in einer Tabelle die einzelnen Breiten aller Zeichen abzulegen und dann den Text Zeichen für Zeichen durchzugehen und den Platzbedarf sozusagen aufzusaldieren.
s/Tabelle/Hash/
Abgesehen davon, daß Du ggf. ziemlich viele Zeichen beachten mußt (und einen sinnvollen Default wählen), wäre dies auch das einzige, was mir einfällt. Vielleicht bietet Image::Magick (http://www.cpan.org/) eine Möglichkeit, Text in beliebiger Schriftart in eine Grafik umzuwandeln; in dem Fall könntest Du die Breite (für einen Spezialfall, der nichts mit dem Ausdruck zu tun haben muß!) testen. Nachteil: Zeitaufwand. Nutzen: zweifelhaft. Vorteil: Coolness-Faktor ;-)
Die Ermittlung durch ein Hash dürfte übrigens ein klassischer Einzeiler sein. Die Genauigkeit schätze ich nicht wesentlich geringer ein; wobei natürlich "Unterschneidungen" (sorry, Fachausdruck vergessen; ich meine, daß z.B. bei "Tier" das "i" quasi unter dem "T" steht) nicht beachtet werden.
Zweifel, ob dies genau funktioniert.
_Genau_ funktioniert nur, den Text mit dem System des Benutzers auszudrucken und _dort_ nachzumessen.
Außerdem müßte ich mir die Breite der Zeichen durch ausmessen von z.B. (100 Zeichen) / 100 ermitteln, was die Sache nicht gerade zuverlässiger machen wird.
Richtig, aber diesen Aufwand müßtest Du schon betreiben. Mit einem kurzen Perl-Script kannst Du immerhin den Ausdruck vereinfachen :-)
Danke an alle, die es sich alles durchgelesen haben.
Gern geschehen :-)
Cheatah
bei _Dir_ oder bei _jemandem_? In letzterem Fall kannst Du die Sache vergessen, da Du nicht mal weißt, ob der Mensch überhaupt einen Drucker hat, geschweige denn, wie der eingestellt ist, ob er die Schriftart versteht, wie groß er sie macht usw.
Sorry, hatte ich vergessen zu erwähnen: Die Sache soll nur auf meinem eigenen System (IE5.5) funktionieren.
Abgesehen davon, daß Du ggf. ziemlich viele Zeichen beachten mußt (und einen sinnvollen Default wählen), wäre dies auch das einzige, was mir einfällt.
Der Text ist max. 300 Zeichen lang, meist viel kürzer.
Vielleicht bietet Image::Magick (http://www.cpan.org/) eine Möglichkeit, Text in beliebiger Schriftart in eine Grafik umzuwandeln;
Hab' auch schon dran gedacht. Aber Text in einem .gif kommt beim Ausdruck sehr "gerastert".
daß z.B. bei "Tier" das "i" quasi unter dem "T" steht nicht beachtet werden.
Daran hab' ich noch garnicht gedacht *stöhn*,
irgendwie muß es der Browser beim rendern ja auch machen...
Trotzdem danke.
Gruß
Rol
Hi,
Sorry, hatte ich vergessen zu erwähnen: Die Sache soll nur auf meinem eigenen System (IE5.5) funktionieren.
dann reicht die Hash-Geschichte aus. Du willst ja keine Schönheitspreise gewinnen, oder? :-)
Vielleicht bietet Image::Magick (http://www.cpan.org/) eine Möglichkeit, Text in beliebiger Schriftart in eine Grafik umzuwandeln;
Hab' auch schon dran gedacht. Aber Text in einem .gif kommt beim Ausdruck sehr "gerastert".
Nutze die Grafik nur, um ihre Größe zu ermitteln, und laß "normalen" Text ausdrucken.
Cheatah
Nutze die Grafik nur, um ihre Größe zu ermitteln, und laß "normalen" Text ausdrucken.
Gute Idee, Danke.
Rol