Start · Sprachen · PHP · Referenz · ps_new

ps_new

Funktion

Erstellt ein neues PostScript-Dokumentobjekt und gibt eine Ressource zurück, die als Handle für alle weiteren ps_*-Funktionen verwendet wird.

Kategorie: misc

Signatur

ps_new(): resource

Beschreibung

ps_new() ist der Einstiegspunkt der ps-Erweiterung (pslib) für PHP. Die Funktion initialisiert eine neue PostScript-Dokumentstruktur im Speicher und gibt ein Ressourcen-Handle zurück, über das alle weiteren PostScript-Funktionen angesprochen werden.

Das zurückgegebene Handle wird bei nahezu jeder anderen ps_*-Funktion als erstes Argument übergeben. Es enthält den gesamten Dokumentzustand wie Seiten, Grafikparameter, Schriften und den aktuellen Zeichenpfad. Ein typischer Workflow sieht wie folgt aus: ps_new()ps_open_file() (oder ps_open_mem()) → Seiten und Inhalte erzeugen → ps_close()ps_delete().

Nach der Arbeit mit dem Dokument sollte stets ps_delete() aufgerufen werden, um den intern allokierten Speicher wieder freizugeben. Ohne diesen Aufruf kann es in lang laufenden Prozessen zu Speicherlecks kommen.

Die ps-Erweiterung eignet sich für die serverseitige Erzeugung von PostScript- und PDF-Druckdokumenten, zum Beispiel für Rechnungen, Etiketten oder Berichte, die direkt an einen PostScript-fähigen Drucker gesendet werden sollen.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt bei Erfolg ein PostScript-Dokumenthandle (Ressource) zurück. Im Fehlerfall (z. B. wenn die pslib-Bibliothek nicht initialisiert werden konnte) wird false zurückgegeben.

Beispiele

Einfaches PostScript-Dokument erstellen

<?php
// Neues PS-Dokumentobjekt erzeugen
$ps = ps_new();

if (!$ps) {
    die('Konnte kein PostScript-Dokument erstellen.');
}

// Ausgabe in eine Datei schreiben
ps_open_file($ps, '/tmp/hallo.ps');

// Dokumentinfo setzen
ps_set_info($ps, 'Creator', 'Mein PHP-Skript');
ps_set_info($ps, 'Title', 'Hallo PostScript');

// Erste Seite beginnen (A4: 595 x 842 Punkte)
ps_begin_page($ps, 595, 842);

// Schrift laden und setzen
$font = ps_findfont($ps, 'Helvetica', '', 0);
ps_setfont($ps, $font, 24);

// Text ausgeben
ps_show_xy($ps, 'Hallo, PostScript!', 100, 700);

// Seite beenden
ps_end_page($ps);

// Dokument schließen und Ressource freigeben
ps_close($ps);
ps_delete($ps);

echo 'PostScript-Datei wurde erfolgreich erstellt.';
?>
PostScript-Datei wurde erfolgreich erstellt.

PostScript-Ausgabe direkt an den Browser senden

<?php
$ps = ps_new();

if (!$ps) {
    die('Initialisierung fehlgeschlagen.');
}

// Ausgabe in den Speicher (kein Dateiname → Buffer)
ps_open_file($ps, '');

ps_begin_page($ps, 595, 842);

$font = ps_findfont($ps, 'Times-Roman', '', 0);
ps_setfont($ps, $font, 16);
ps_show_xy($ps, 'Testdokument', 72, 750);

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

// Pufferinahlt auslesen und als Download ausgeben
$buffer = ps_get_buffer($ps);

header('Content-Type: application/postscript');
header('Content-Disposition: attachment; filename="dokument.ps"');
header('Content-Length: ' . strlen($buffer));

echo $buffer;

ps_delete($ps);
?>

// Wichtig · Fallstricke

Speicherverwaltung: Das von ps_new() erzeugte Handle belegt intern Speicher in der pslib-Bibliothek. Stellen Sie sicher, dass nach der Verwendung immer ps_delete() aufgerufen wird – auch im Fehlerfall –, um Speicherlecks zu vermeiden.

Erweiterungsverfügbarkeit: Die ps-Erweiterung ist nicht Teil des PHP-Standardlieferumfangs und muss separat über PECL (pecl install ps) installiert werden. Außerdem wird die externe Bibliothek pslib benötigt. Prüfen Sie mit extension_loaded('ps'), ob die Erweiterung verfügbar ist.

Deprecation: Die Erweiterung ist nicht sehr aktiv gepflegt. Für neue Projekte kann es sinnvoll sein, Alternativen wie FPDF, TCPDF oder die cairo-Erweiterung zu evaluieren.