[SGML-HTML-DTD] [SGML-HTML-DTD] [About] [Copertina] [Hdparm] [Hdparm]

Articoli


Il Postscript

Che cosa è il Postscript? Perché viene menzionato così spesso nel mondo Unix/Linux?
La maggior parte degli utenti Linux pensa che il Postscript sia solo un passaggio obbligato per poter stampare (assieme o senza Ghostscript) e che se ci fosse un driver di stampa a livello di sistema operativo come in MacOS o Windows sarebbe lo stesso (o meglio).
Cerchiamo allora di spiegare perché viene usato il Postscript e che benefici comporta.
Il Postscript è un linguaggio di programmazione sviluppato per descrivere pagine di testo e grafica in modo indipendente dalla risoluzione e dal dispositivo di visualizzazione. Questo significa che una pagina di testo e grafica può essere distribuita e quindi visualizzata o stampata alla massima risoluzione consentita senza perdita di qualità.

Uno sguardo più approfondito

Questo paragrafo tratta alcuni aspetti tecnici di Postscript: se non siete curiosi o interessati potete tranquillamente saltarlo.
Il Postscript è un linguaggio di programmazione che viene interpretato (dalla stampante, oppure da Ghostscript): potete quindi dare una occhiata ad un qualsiasi file (programma) Postscript con il vostro editor preferito oppure potete dare i comandi di esempio direttamente a ghostscript lanciandolo in modo interattivo da un xterm (usare in questo modo ghostscript facilita la programmazione perché nel prompt dell'interprete viene visualizzato il numero di elementi sullo stack). Il meccanismo di interpretazione, infatti, è basato sul concetto di stack: a mano a mano che un token viene letto l'interprete decide se farne un push sullo stack (nel caso di una variabile il valore di questa viene messo sullo stack) oppure se interpretarlo come un operatore ed eseguire perciò la funzione associata.
Un concetto importante in Postscript è il dizionario, cioè una struttura dati che associa un nome ad un determinato valore (sequenza di comandi, numero oppure testo).
In pratica, dato il simbolo tok, se è interpretabile come un numero, il numero viene messo sullo stack, se è il nome di una variabile il valore di questa viene messo sullo stack, se è lo mnemonico di un operatore, questo viene eseguito. Il nome di una variabile preceduto da slash (/tok) viene messo sullo stack tale e quale, cosl come i comandi racchiusi tra parentesi graffe. Esempio:
/square {dup mul} def
In questo esempio il simbolo square viene messo sullo stack seguito dalla sequenza di comandi {dup mul}. A questo punto il token def viene riconosciuto come un operatore che inserisce nel dizionario la procedura square con la definizione {dup mul}.
La nuova procedura square può essere usata in questo modo:
5 square
La sequenza di operazioni eseguite è questa:
Per definire una variabile invece che una nuova funzione si immette sullo stack un numero:
/PI 3.1415 def
oppure del testo (che in postscript viene racchiuso tra parentesi tonde):
/mystring (Articolo per il PlutoJ!) def
Il linguaggio fornisce anche operatori per ruotare e scalare l'immagine. Grazie a questa flessibilità sono stati creati dei postprocessori, ovvero dei filtri che ricevono in input un programma postscript e lo modificano in modo da cambiare orientamento, posizione e dimensione delle pagine.
Esistono due sistemi di coordinate in postscript: lo spazio dell'utente e lo spazio del dispositivo. L'interprete usa una matrice di conversione tra i due sistemi di coordinate che può essere modificata utilizzando gli operatori scale, rotate e translate.
Le operazioni di disegno si eseguono definendo un percorso (path) e chiamando l'operatore stroke (che disegna una linea lungo il percorso) oppure l'operatore fill che riempie la zona racchiusa dal percorso con il colore selezionato. C'è anche una altro operatore che può essere applicato ad un path: l'operatore clip che limita l'output all'area descritta dal path. Un aspetto interessante è che può essere usato come path anche l'outline di un stringa di testo (con l'operatore charpath).
Ultima nota: l'interprete postscript mantiene anche uno stack di dizionari, e cerca di risolvere i simboli a partire dall'ultimo dizionario messo sullo stack: in questo modo è facile ridefinire il significato degli operatori standard (ad esempio l'operatore showpage che emette la pagina sul dispositivo grafico).
Ecco infine un esempio di codice che potete inserire direttamente al prompt di ghostscript o salvare in un file (in quest'ultimo caso la prima linea del file deve iniziare con %! ).
% ---cut cut---
/Times-Roman findfont 64 scalefont setfont
/mystring (Pluto Journal) def
newpath
100 100 moveto
mystring show
200 200 moveto
2 2 scale
90 rotate
mystring show
showpage
% ---cut cut---

E ora passiamo al sodo ...

Alcuni esempi di quanto sia utile postscript: quelli che hanno letto anche la precedente sezione sapranno perché tutto questo è possibile.

L'avvocato del diavolo

Naturalmente non è tutto oro quello che luccica: un file postscript non è facilmente editabile in modo visuale (tuttavia esistono dei programmi che trasformano postscript in un altro formato vettoriale o che consentono di editare direttamente il postscript con qualche limitazione come Tailor e Adobe Illustrator); le stampanti postscript costano di più (ma Ghostscript consente di stampare anche su stampanti non-PS); al postscript standard mancano istruzioni per la fusione di più immagini con vari livelli di opacità e ci sono altri limiti ancora legati alla natura di linguaggio di programmazione (ci sono anche gli operatori per cancellare e scrivere file, per cui è bene usare l'opzione -dSAFER di Ghostscript, per esempio).

Riferimenti

Ci sono diversi siti sul WWW che trattano aspetti introduttivi della programmazione in postscript, è sufficiente fare una ricerca con parole chiave come postscript, guide, document, first etc.
Il newsgroup dedicato a postscript è: comp.lang.postscript.

Paolo Molaro


[SGML-HTML-DTD] [SGML-HTML-DTD] [About] [Copertina] [Hdparm] [Hdparm]