PDA

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