post h1 Il Postscript; perché viene menzionato così spesso nel mondo Unix/Linux? ~ Ubuntulandiapost h1

settembre 26, 2010

Il Postscript; perché viene menzionato così spesso nel mondo Unix/Linux?

| No comment
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:
  • 5 viene messo sullo stack
  • square viene cercato nel dizionario e sostituito dalla sua definizione
  • dup viene riconosciuto come un operatore che duplica il primo elemento dello stack
  • mul viene riconosciuto come l'operatore di moltiplicazione che prende due valori dallo stack, li moltiplica e mette il risultato di nuovo sullo stack
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.
  • Descrizione indipendente dalla risoluzione
    Provate a vedere con ghostview il file tiger.ps che viene incluso con tutte le distribuzioni di ghostscript e ingrandite le ciglia dell'occhio della tigre: vedrete che, aumentando lo zoom (che è praticamente la stessa cosa che aumentare la risoluzione), i dettagli migliorano, sono più nitidi.
    Provate ora a fare la stessa cosa con una immagine bitmap, (un qualunque .gif oppure la stessa immagine della tigre trasformata in bitmap con il comando gs -sDEVICE=ppmraw -dNOPAUSE -SOutputFile=/tmp/t.ppm tiger.ps) e scoprite la differenza.
  • Ridimensionare ruotare e traslare
    Vi è mai venuta la voglia di stampare la documentazione di Linux ma vi siete scoraggiati pensando che richiede centinaia di pagine? Se avete le versioni postscript potete postprocessarle e riarrangiare le pagine in modo che ne vengano stampate due per pagine (o anche di più se avete una buona stampante e buona vista:-)).
    Naturalmente i programmi che fanno questo sporco lavoro sono gi` stati scritti (per esempio il pacchetto psutils della distribuzione Debian).
  • Distribuzione e qualità
    Un file postscript può essere distribuito (nessun problema di little o big-endian, dimensione di int e long etc:-)) e visualizzato al meglio delle possibilità del dispositivo finale: sia che si abbia una stampante a 9 aghi che una laser a 600 dpi la qualità della stampa dipende dalla stampante, non dal formato del file.

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

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.

fonte: Pluto


Se ti è piaciuto l'articolo , iscriviti al feed cliccando sull'immagine sottostante per tenerti sempre aggiornato sui nuovi contenuti del blog:


,

Nessun commento:

Posta un commento

Caricamento in corso...

Ultimi post pubblicati

Archivio

Ubuntulandia in Instagram

>center>

Post Più Popolari