Signatur
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
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";
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.';
// 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.