Start · Sprachen · PHP · Referenz · ps_string_geometry

ps_string_geometry

Funktion

Gibt die geometrischen Abmessungen (Breite, links- und rechtsseitiger Leerraum) eines Strings im aktuellen PostScript-Dokument zurück.

Kategorie: misc

Signatur

ps_string_geometry(resource $psdoc, string $text, int $fontid, float $size): array|false

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

Typ
array|false
Beschreibung
Gibt ein assoziatives Array mit den Schlüsseln 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);
?>
Breite: 57.336 Punkte Ascender: 8.664 Punkte Descender: -2.664 Punkte

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);
?>
Text 'Kurztext' passt (62.44 pt) Text 'Ein etwas längerer Beispieltext' ist zu breit (218.75 pt) Text 'OK' passt (19.47 pt)

// 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.