Signatur
Beschreibung
ps_restore() ist Teil der PHP-PostScript-Erweiterung (ps) und stellt den zuletzt mit ps_save() gespeicherten Grafikzustand (Kontext) wieder her. In PostScript entspricht dies dem Operator grestore.
Zum gespeicherten Grafikzustand gehören Eigenschaften wie die aktuelle Transformationsmatrix, Strichstärke, Linienfarbe, Füllfarbe, Schriftart und viele weitere grafische Attribute. Durch das Speichern und Wiederherstellen kann man temporäre Änderungen am Grafikzustand vornehmen, ohne den ursprünglichen Zustand zu beeinflussen.
Das Paar ps_save() / ps_restore() ist besonders dann sinnvoll, wenn man für einen bestimmten Zeichenvorgang (z. B. eine gedrehte oder verschobene Grafik) den Koordinatenursprung oder andere Grafikeigenschaften temporär verändern möchte, danach aber wieder zum vorherigen Zustand zurückkehren will. Es können mehrere Zustände verschachtelt gespeichert werden.
Wichtig: Jeder Aufruf von ps_restore() muss einem vorangegangenen ps_save() entsprechen. Nicht gematchte Aufrufe können zu Fehlern im erzeugten PostScript-Dokument führen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $psdoc Pflicht | resource | Die Ressource des PostScript-Dokuments, wie sie von ps_new() zurückgegeben wurde. |
Rückgabewert
true bei Erfolg zurück, andernfalls false.Beispiele
Transformation temporär anwenden und zurücksetzen
<?php
$ps = ps_new();
ps_open_file($ps, 'dokument.ps');
ps_begin_page($ps, 595, 842);
// Aktuellen Zustand speichern
ps_save($ps);
// Koordinatensystem um 45 Grad rotieren und Farbe ändern
ps_rotate($ps, 45);
ps_setcolor($ps, 'fill', 'rgb', 1.0, 0.0, 0.0, 0.0);
ps_moveto($ps, 100, 100);
ps_show($ps, 'Gedrehter Text');
// Ursprünglichen Zustand (vor ps_save) wiederherstellen
ps_restore($ps);
// Ab hier gelten wieder die ursprünglichen Grafikeinstellungen
ps_setcolor($ps, 'fill', 'rgb', 0.0, 0.0, 0.0, 0.0);
ps_moveto($ps, 100, 700);
ps_show($ps, 'Normaler Text');
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
?>
Verschachtelte Grafikzustände
<?php
$ps = ps_new();
ps_open_file($ps, 'verschachtelt.ps');
ps_begin_page($ps, 595, 842);
// Ebene 1 speichern
ps_save($ps);
ps_setlinewidth($ps, 2.0);
// Ebene 2 speichern
ps_save($ps);
ps_setlinewidth($ps, 5.0);
// Zeichne mit Linienstärke 5.0
ps_moveto($ps, 50, 800);
ps_lineto($ps, 200, 800);
ps_stroke($ps);
// Ebene 2 wiederherstellen -> Linienstärke ist jetzt 2.0
ps_restore($ps);
// Zeichne mit Linienstärke 2.0
ps_moveto($ps, 50, 750);
ps_lineto($ps, 200, 750);
ps_stroke($ps);
// Ebene 1 wiederherstellen -> Linienstärke ist wieder Standard
ps_restore($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
?>
// Wichtig · Fallstricke
Verschachtelung: Die Anzahl der ps_restore()-Aufrufe muss exakt mit der Anzahl der vorangegangenen ps_save()-Aufrufe übereinstimmen. Zu viele oder zu wenige Aufrufe können das erzeugte PostScript-Dokument ungültig machen.
Erweiterung: Die ps-Erweiterung ist nicht standardmäßig in PHP enthalten und muss separat installiert werden (PECL). Sie ist für moderne Projekte weitgehend durch PDF-Bibliotheken wie libharu oder TCPDF ersetzt worden.