Start · Sprachen · PHP · Referenz · ps_stringwidth

ps_stringwidth

Funktion

Berechnet die Breite eines Strings in einer bestimmten Schriftart und -größe im PostScript-Dokument und gibt sie als Gleitkommazahl zurück.

Kategorie: misc

Signatur

ps_stringwidth(resource $psdoc, string $text, int $fontid, float $size): float

Beschreibung

ps_stringwidth() ermittelt die horizontale Breite eines Strings in der angegebenen PostScript-Schriftart und Schriftgröße. Der Rückgabewert wird in PostScript-Punkten (pt) ausgedrückt, wobei 1 Punkt 1/72 Zoll entspricht.

Diese Funktion ist besonders nützlich, wenn Text zentriert, rechtsbündig oder innerhalb eines definierten Bereichs positioniert werden soll. Indem man die Breite des Strings vorab kennt, kann man die genaue X-Koordinate für die Textausgabe berechnen, ohne den Text tatsächlich zu rendern.

Die Funktion berücksichtigt die Zeichenbreiten der gewählten Schrift sowie den eingestellten Zeichenabstand (Tracking), der zuvor mit ps_set_parameter() gesetzt werden kann. Sie funktioniert ausschließlich im Kontext eines gültigen PostScript-Dokument-Handles, das mit ps_new() erstellt wurde.

Hinweis: Die Funktion ist Teil der ps-Erweiterung (PSLib) und steht nur zur Verfügung, wenn PHP mit dieser Erweiterung kompiliert wurde.

Parameter

Name Typ Default Beschreibung
$psdoc Pflicht resource Das PostScript-Dokument-Handle, das mit ps_new() erstellt wurde.
$text Pflicht string Der String, dessen Breite berechnet werden soll.
$fontid Pflicht int Die Schriftart-ID, die zuvor mit ps_findfont() ermittelt wurde. Wird 0 übergeben, wird die aktuell eingestellte Schriftart des Dokuments verwendet.
$size Pflicht float Die Schriftgröße in PostScript-Punkten. Wird 0 übergeben, wird die aktuell eingestellte Schriftgröße des Dokuments verwendet.

Rückgabewert

Typ
float
Beschreibung
Gibt die Breite des Strings in PostScript-Punkten als float zurück. Im Fehlerfall (ungültiges Handle, nicht geladene Schrift) wird 0.0 oder false zurückgegeben.

Beispiele

Text horizontal zentrieren mit ps_stringwidth

<?php
// Neues PostScript-Dokument erstellen
$ps = ps_new();
if (!$ps) {
    die('Konnte PostScript-Ressource nicht erstellen.');
}

ps_open_file($ps, '/tmp/zentriert.ps');
ps_set_info($ps, 'Creator', 'Beispielskript');
ps_begin_page($ps, 595, 842); // A4-Seite

// Schriftart laden
$fontid = ps_findfont($ps, 'Helvetica', '', 0);
ps_setfont($ps, $fontid, 24);

$text = 'Hallo Welt';
$seitenbreite = 595;
$schriftgroesse = 24;

// Breite des Strings berechnen
$breite = ps_stringwidth($ps, $text, $fontid, $schriftgroesse);

// Zentrierte X-Position berechnen
$x = ($seitenbreite - $breite) / 2;
$y = 400;

// Text zentriert ausgeben
ps_show_xy($ps, $text, $x, $y);

ps_end_page($ps);
ps_close($ps);
ps_delete($ps);

echo "String-Breite: " . round($breite, 2) . " pt\n";
echo "X-Position: " . round($x, 2) . " pt\n";
String-Breite: 112.08 pt X-Position: 241.46 pt

Text rechtsbündig ausrichten

<?php
$ps = ps_new();
ps_open_file($ps, '/tmp/rechtsbuendig.ps');
ps_begin_page($ps, 595, 842);

$fontid = ps_findfont($ps, 'Times-Roman', '', 0);
ps_setfont($ps, $fontid, 14);

$zeilen = [
    'Erste Zeile mit Text',
    'Zweite, etwas längere Zeile',
    'Kurz',
];

$rechtsrand = 540; // 55 pt Rand von rechts
$y = 700;

foreach ($zeilen as $zeile) {
    // Breite berechnen und X-Position für Rechtsbündigkeit ermitteln
    $breite = ps_stringwidth($ps, $zeile, $fontid, 14);
    $x = $rechtsrand - $breite;
    ps_show_xy($ps, $zeile, $x, $y);
    $y -= 20; // Nächste Zeile
}

ps_end_page($ps);
ps_close($ps);
ps_delete($ps);

echo 'Dokument erfolgreich erstellt.';
Dokument erfolgreich erstellt.

// Wichtig · Fallstricke

Voraussetzung: Die ps-Erweiterung (PSLib) muss bei der PHP-Kompilierung eingebunden sein (--with-ps). Ohne diese Erweiterung ist ps_stringwidth() nicht verfügbar.

Die zurückgegebene Breite bezieht sich auf die Standard-Zeichenabstände der Schriftart. Wurde mit ps_set_parameter($ps, 'charspacing', ...) ein zusätzlicher Zeichenabstand definiert, wird dieser nicht automatisch in die Berechnung einbezogen — das muss bei der Positionsberechnung manuell berücksichtigt werden.

Die Funktion arbeitet mit PostScript-Punkten (1 pt = 1/72 Zoll). Für Umrechnungen in andere Einheiten gilt: 1 cm ≈ 28,35 pt, 1 mm ≈ 2,835 pt.