Archiv verlassen und diese Seite im Standarddesign anzeigen : Textläne in PX + php
Kinman
2005-08-10, 08:44:41
Hi, gibt es eine einfache Möglichkeit die Länge eines Textes in Pixel herauszufinden, wenn Schriftgröße / -Art usw. bekannt sind. Die einzige Möglichkeit die mir eingefallen ist, wäre die Anzahl der gleichen Buchstaben mit deren Länge zu zählen und dann zusammenrechnen. Das Problem dabei ist aber, das ich herausfindenmuss nach dem wievielten Zeichen ein String eine bestimmte länge in Pixel überschreitet.
Danke, mfg Kinman
Kinman
2005-08-10, 09:30:13
Habs mal für Arial 10pt geschrieben. Ist zwar nicht die beste Art, aber es funktioniert mir gut genug.
function strlenPX($str, $maxPX)
{
$ch["A"] = 9;
$ch["B"] = 7;
$ch["C"] = 7;
$ch["D"] = 7;
$ch["E"] = 7;
$ch["F"] = 6;
$ch["G"] = 8;
$ch["H"] = 7;
$ch["I"] = 1;
$ch["J"] = 5;
$ch["K"] = 8;
$ch["L"] = 6;
$ch["M"] = 9;
$ch["N"] = 7;
$ch["O"] = 8;
$ch["P"] = 7;
$ch["Q"] = 8;
$ch["R"] = 7;
$ch["S"] = 7;
$ch["T"] = 7;
$ch["U"] = 7;
$ch["V"] = 9;
$ch["W"] = 13;
$ch["X"] = 7;
$ch["Y"] = 7;
$ch["Z"] = 7;
$ch["a"] = 5;
$ch["b"] = 5;
$ch["c"] = 5;
$ch["d"] = 5;
$ch["e"] = 5;
$ch["f"] = 3;
$ch["g"] = 5;
$ch["h"] = 5;
$ch["i"] = 1;
$ch["j"] = 3;
$ch["k"] = 5;
$ch["l"] = 1;
$ch["m"] = 9;
$ch["n"] = 5;
$ch["o"] = 5;
$ch["p"] = 5;
$ch["q"] = 5;
$ch["r"] = 3;
$ch["s"] = 5;
$ch["t"] = 3;
$ch["u"] = 5;
$ch["v"] = 5;
$ch["w"] = 9;
$ch["x"] = 5;
$ch["y"] = 5;
$ch["z"] = 5;
$ch[" "] = 6;
$ch["0"] = 6;
$ch["1"] = 3;
$ch["2"] = 6;
$ch["3"] = 6;
$ch["4"] = 6;
$ch["5"] = 6;
$ch["6"] = 6;
$ch["7"] = 6;
$ch["8"] = 6;
$ch["9"] = 6;
$i = 0;
$sumLen = 0;
$wrapChar = 0;
do
{
$actChar = substr($str, $i, 1);
if (!isset($ch[$actChar]))
{
$actLen = 8;
}
else
{
$actLen = $ch[$actChar];
}
$sumLen = $sumLen + $actLen + 2;
if($sumLen >= $maxPX - 8)
{
$wrapChar = $i;
break;
}
$i++;
}
while($i < strlen($str));
return $wrapChar;
}
mfg Kinman
Kinman
2005-08-10, 09:42:42
und wenn man folgende Zeilen vor das return stellt, liefert die Funktion das letzte Wort, welches noch passt. Somit gibt es keine abgetrennten Wörter.
if ($wrapChar >= strlen($str))
{
$wrapChar = -1;
echo("\n\n<!-- WrapChar = -1 -->\n\n");
}
else
{
$wrapStr = substr($str, 0, $wrapChar);
$wrapChar = strlen($wrapStr) - strlen(strrchr($wrapStr," "));
}
mfg Kinman
ravage
2005-08-10, 09:50:19
Hrm ich hab sowas zwar noch nicht gebraucht, aber da ich eh grad im PHP Manual blätter, vielleicht hilft dir das weiter:
http://de2.php.net/manual/de/function.cpdf-stringwidth.php
Kinman
2005-08-12, 14:26:05
Danke, leider hilft das nicht weiter, da die Funktion für PDF erstellen (was auch noch kommen wird :( )
Allerdings ist meine Funktion genau genug. Vllt. werd ich sie mal auf mehrere Schriftarten / -größen ausdehnen ;)
mfg Kinman
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.