Signatur
Beschreibung
ps_string_geometry berechnet die geometrischen Eigenschaften eines Textes in einem PostScript-Dokument. Die Funktion gibt ein assoziatives Array mit den Maßen des übergebenen Strings zurück, basierend auf der angegebenen Schriftart und Schriftgröße.
Die zurückgegebenen Werte umfassen die Gesamtbreite des Textes (width), den linken Leerraum (descender) und den rechten Leerraum (ascender), die für das präzise Positionieren von Text auf einer PostScript-Seite benötigt werden. Dies ist besonders hilfreich, wenn Text zentriert, rechtsbündig oder innerhalb begrenzter Bereiche platziert werden soll.
Die Funktion gehört zur ps-Erweiterung (pslib) und erfordert, dass eine gültige PostScript-Ressource vorhanden ist sowie eine Schriftart zuvor über ps_findfont geladen wurde. Sie ähnelt ps_stringwidth, liefert jedoch umfangreichere geometrische Informationen.
Typische Einsatzgebiete sind die dynamische Textlayouterstellung, zum Beispiel für Berichte, Etiketten oder Präsentationen, bei denen die exakte Textbreite vor dem Zeichnen bekannt sein muss.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $psdoc Pflicht | resource | Die PostScript-Ressource, die zuvor mit ps_new() erstellt und mit ps_open_file() geöffnet wurde. |
|
| $text Pflicht | string | Der Text, dessen geometrische Abmessungen berechnet werden sollen. | |
| $fontid Pflicht | int | Die ID der Schriftart, wie sie von ps_findfont() zurückgegeben wurde. Bestimmt, welche Schrift für die Berechnung verwendet wird. |
|
| $size Pflicht | float | Die Schriftgröße in Punkten, für die die Geometrie berechnet werden soll. |
Rückgabewert
width (Gesamtbreite des Strings), descender (Abstand unterhalb der Basislinie) und ascender (Abstand oberhalb der Basislinie) zurück. Im Fehlerfall wird false zurückgegeben.Beispiele
Textbreite vor dem Zeichnen ermitteln
<?php
$ps = ps_new();
ps_open_file($ps, 'dokument.ps');
ps_begin_page($ps, 596, 842);
$font = ps_findfont($ps, 'Helvetica', '', 0);
ps_setfont($ps, $font, 12.0);
$text = 'Hallo Welt';
$geo = ps_string_geometry($ps, $text, $font, 12.0);
if ($geo !== false) {
echo 'Breite: ' . $geo['width'] . ' Punkte' . PHP_EOL;
echo 'Ascender: ' . $geo['ascender'] . ' Punkte' . PHP_EOL;
echo 'Descender: ' . $geo['descender'] . ' Punkte' . PHP_EOL;
// Text horizontal zentriert auf einer 596pt breiten Seite ausgeben
$x = (596 - $geo['width']) / 2;
ps_show_xy($ps, $text, $x, 400);
}
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
?>
Mehrere Texte auf Überlauf prüfen
<?php
$ps = ps_new();
ps_open_file($ps, 'ausgabe.ps');
ps_begin_page($ps, 596, 842);
$font = ps_findfont($ps, 'Times-Roman', '', 0);
$maxBreite = 200.0;
$fontSize = 14.0;
$texte = ['Kurztext', 'Ein etwas längerer Beispieltext', 'OK'];
foreach ($texte as $t) {
$geo = ps_string_geometry($ps, $t, $font, $fontSize);
if ($geo !== false && $geo['width'] > $maxBreite) {
echo "Text '" . $t . "' ist zu breit (" . round($geo['width'], 2) . " pt)\n";
} else {
echo "Text '" . $t . "' passt (" . round($geo['width'], 2) . " pt)\n";
}
}
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
?>
// Wichtig · Fallstricke
Erweiterung erforderlich: Diese Funktion ist Teil der ps-Erweiterung, die auf der Bibliothek pslib basiert. Diese ist standardmäßig nicht in PHP enthalten und muss separat installiert und aktiviert werden.
Die zurückgegebenen Maße beziehen sich auf die PostScript-Einheit Punkt (pt) und können je nach Schriftart und Encoding leicht variieren. Stellen Sie sicher, dass die Schriftart korrekt geladen wurde, bevor Sie die Funktion aufrufen, da sonst unerwartete Ergebnisse oder false zurückgegeben werden kann.
Verwechseln Sie diese Funktion nicht mit ps_stringwidth, die ausschließlich die Breite ohne weitere geometrische Daten zurückgibt.