Start · Sprachen · PHP · Referenz · ps_symbol_width

ps_symbol_width

Funktion

Gibt die Breite eines benannten Glyphs (Symbols) in einer PostScript-Schrift zurück.

Kategorie: misc

Signatur

ps_symbol_width(resource $psdoc, string $name, int $size, int $encoding): float|false

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

Typ
float|false
Beschreibung
Gibt die Breite des Glyphs in Punkt als 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);
?>
Breite des Euro-Symbols: 6.672 Punkt

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);
?>
Text endet bei X=78.4 Symbol-Breite: 9.324 Punkt

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