Signatur
Beschreibung
ps_symbol_width() ist Teil der PHP-PostScript-Erweiterung (ps) und berechnet die Breite eines einzelnen Glyphs, das über seinen PostScript-Namen (z. B. "Euro", "copyright") identifiziert wird. Die zurückgegebene Breite ist in Punkt (pt) angegeben und hängt von der gewählten Schriftgröße sowie dem aktiven Encoding ab.
Die Funktion ist nützlich, wenn Sie Textelemente mit Sonderzeichen oder speziellen Symbolen in PostScript-Dokumenten exakt positionieren müssen. Im Gegensatz zu ps_stringwidth(), das eine ganze Zeichenkette vermisst, arbeitet ps_symbol_width() auf Ebene einzelner benannter Glyphen.
Typische Anwendungsgebiete sind das präzise Layout von Sonderzeichen, das Berechnen von Einrückungen oder das Ausrichten von Symbolen neben regulärem Text in dynamisch generierten PDF- oder PS-Dokumenten.
Beachten Sie, dass die ps-Erweiterung in modernen PHP-Versionen nicht standardmäßig aktiviert ist und separat als PECL-Paket installiert werden 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. |
|
| $name Pflicht | string | Der PostScript-Glyph-Name des Symbols, z. B. "Euro", "copyright" oder "registered". |
|
| $size Pflicht | int | Die Schriftgröße in Punkt, für die die Glyphbreite berechnet werden soll. | |
| $encoding Pflicht | int | Die Encoding-Kennung, die das verwendete Zeichenencoding der aktuellen Schrift beschreibt. Entspricht dem Encoding-Index, der bei ps_findfont() verwendet wurde. |
Rückgabewert
float zurück. Bei einem Fehler (z. B. ungültiger Glyph-Name oder fehlende Ressource) wird false zurückgegeben.Beispiele
Breite des Euro-Symbols bestimmen
<?php
// PostScript-Dokument erstellen
$ps = ps_new();
if (!ps_open_file($ps, 'output.ps')) {
die('Konnte Datei nicht öffnen');
}
ps_set_info($ps, 'Creator', 'PHP ps_symbol_width Beispiel');
ps_begin_page($ps, 595, 842);
// Schrift laden
$fontId = ps_findfont($ps, 'Helvetica', '', 0);
ps_setfont($ps, $fontId, 12);
// Breite des Euro-Glyphs bei Schriftgröße 12 ermitteln
$breite = ps_symbol_width($ps, 'Euro', 12, 0);
if ($breite !== false) {
echo 'Breite des Euro-Symbols: ' . $breite . ' Punkt' . PHP_EOL;
} else {
echo 'Glyph konnte nicht gefunden werden.' . PHP_EOL;
}
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
?>
Symbol neben Text ausrichten
<?php
$ps = ps_new();
ps_open_file($ps, 'layout.ps');
ps_begin_page($ps, 595, 842);
$fontId = ps_findfont($ps, 'Times-Roman', '', 0);
ps_setfont($ps, $fontId, 14);
$startX = 50;
$startY = 700;
$text = 'Preis: ';
// Breite des regulären Textes
$textBreite = ps_stringwidth($ps, $text, $fontId, 14);
// Breite des Copyright-Symbols
$symBreite = ps_symbol_width($ps, 'copyright', 14, 0);
// Text und Symbol positioniert ausgeben
ps_show_xy($ps, $text, $startX, $startY);
ps_symbol($ps, 'copyright', $startX + $textBreite, $startY, 14, 0);
echo 'Text endet bei X=' . ($startX + $textBreite) . PHP_EOL;
echo 'Symbol-Breite: ' . $symBreite . ' Punkt' . PHP_EOL;
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
?>
// Wichtig · Fallstricke
Erweiterung: Die ps-Erweiterung ist nicht im PHP-Kern enthalten. Sie muss als PECL-Paket (pecl install ps) installiert und in der php.ini aktiviert werden (extension=ps.so).
Glyph-Namen: Der Glyph-Name muss exakt dem PostScript-Standard entsprechen (Groß-/Kleinschreibung beachten). Falsche Namen führen zu false als Rückgabewert ohne weitere Fehlermeldung.
Ressourcen-Verwaltung: Stellen Sie sicher, dass ps_delete() nach Abschluss aller Operationen aufgerufen wird, um Speicherlecks zu vermeiden.