Start · Sprachen · PHP · Referenz · ps_get_buffer

ps_get_buffer

Funktion

Gibt den vollständigen Inhalt des internen Puffers mit den bisher generierten PostScript-Daten als String zurück.

seit PHP pecl-ps 1.1.0 Kategorie: misc

Signatur

ps_get_buffer(resource $psdoc): string|false

Beschreibung

ps_get_buffer() liest den internen Puffer der PS-Erweiterung aus und liefert den bis dahin generierten PostScript-Code als Zeichenkette. Dies setzt voraus, dass das PS-Dokument so erstellt wurde, dass die Ausgabe in einen Puffer (anstatt direkt in eine Datei) geschrieben wird – d. h., beim Aufruf von ps_new() und ps_open_file() wurde kein Dateiname übergeben oder der Dateiname war leer.

Die Funktion ist besonders nützlich, wenn PostScript-Daten dynamisch erzeugt und anschließend z. B. als HTTP-Response an den Client gesendet, in einer Datenbank gespeichert oder weiterverarbeitet werden sollen, ohne zunächst in eine temporäre Datei geschrieben werden zu müssen.

Wichtig: ps_get_buffer() sollte erst nach ps_close() aufgerufen werden, da erst zu diesem Zeitpunkt das PS-Dokument korrekt abgeschlossen und der Puffer vollständig befüllt ist. Ein vorzeitiger Aufruf kann zu unvollständigem PostScript-Code führen.

Parameter

Name Typ Default Beschreibung
$psdoc Pflicht resource Die von ps_new() zurückgegebene Ressource, die das PostScript-Dokument repräsentiert.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den vollständigen PostScript-Pufferinhalt als string zurück. Im Fehlerfall (z. B. wenn die Ressource ungültig ist oder kein Puffermodus aktiv war) wird false zurückgegeben.

Beispiele

PS-Dokument in Puffer erzeugen und als HTTP-Response senden

<?php
// Neues PS-Dokument erstellen
$psdoc = ps_new();

// NULL als Dateiname → Ausgabe in internen Puffer
if (!ps_open_file($psdoc, "")) {
    die("Fehler beim Öffnen des PS-Puffers");
}

// Seitengröße festlegen und Seite beginnen
ps_set_info($psdoc, "BoundingBox", "0 0 596 842");
ps_begin_page($psdoc, 596, 842);

// Einfachen Text auf der Seite platzieren
$fontId = ps_findfont($psdoc, "Helvetica", "", 0);
ps_setfont($psdoc, $fontId, 12.0);
ps_show_xy($psdoc, "Hallo Welt!", 50, 750);

ps_end_page($psdoc);

// Dokument schließen – erst jetzt ist der Puffer vollständig
ps_close($psdoc);

// Pufferinhalt abrufen
$psData = ps_get_buffer($psdoc);

// Als Datei-Download ausliefern
header("Content-Type: application/postscript");
header("Content-Disposition: attachment; filename=\"dokument.ps\"");
header("Content-Length: " . strlen($psData));
echo $psData;

// Ressource freigeben
ps_delete($psdoc);
?>

PS-Daten in Datei speichern statt direkt ausgeben

<?php
$psdoc = ps_new();
ps_open_file($psdoc, "");

ps_set_info($psdoc, "BoundingBox", "0 0 596 842");
ps_begin_page($psdoc, 596, 842);

$font = ps_findfont($psdoc, "Times-Roman", "", 0);
ps_setfont($psdoc, $font, 14.0);
ps_show_xy($psdoc, "Dynamisch generiertes Dokument", 72, 700);

ps_end_page($psdoc);
ps_close($psdoc);

// Puffer auslesen
$psContent = ps_get_buffer($psdoc);

if ($psContent !== false) {
    // In eine Datei schreiben
    file_put_contents('/tmp/ausgabe.ps', $psContent);
    echo "PostScript-Datei wurde erfolgreich gespeichert (" . strlen($psContent) . " Bytes).";
} else {
    echo "Fehler: Puffer konnte nicht gelesen werden.";
}

ps_delete($psdoc);
?>
PostScript-Datei wurde erfolgreich gespeichert (... Bytes).

// Wichtig · Fallstricke

Reihenfolge beachten: ps_get_buffer() muss nach ps_close(), aber vor ps_delete() aufgerufen werden. Nach ps_delete() ist die Ressource ungültig und der Puffer nicht mehr zugänglich.

Nur im Puffermodus verfügbar: Wenn ps_open_file() mit einem echten Dateinamen aufgerufen wurde, schreibt die Erweiterung direkt in die Datei. In diesem Fall liefert ps_get_buffer() einen leeren String oder false.

PECL-Erweiterung: Die ps-Erweiterung ist nicht Bestandteil des PHP-Kerns und muss separat über PECL installiert werden. Sie ist auf manchen Systemen nicht verfügbar.