Una Chiave per il DesktopPublishing
Corso di PostScript- Marco A. Calamari
Settima Puntata
Nella quinta parte di questo corso abbiamo descritto ilmeccanismo con cui una applicazione normalmente effettua lastampa di un documento su una stampante PostScript; riassumendo,viene inviato alla stampante un file ASCII diviso in due partiprincipali, prologo (costante) e script (variabilee contenente la descrizione del documento). Nella sesta parteabbiamo poi esaminato i principali comandi PostScript con cui èpossibile formattare il testo su una pagina.
È arrivato ora il momento di mettere tutto insieme; quindi,con molta fiducia in noi stessi, proveremo a scrivere unaelementare applicazione di impaginazione, che effettui laformattazione e la stampa di un file di testo, suddividendolo inrighe e pagine, e stampando queste ultime con intestazione e numerazionea piè di pagina.
Si tratta, in altre parole, di scrivere un programma, in unqualunque linguaggio, che legga il testo da formattare da un fileASCII, e produca un file di uscita contenente un programmaPostScript; quest'ultimo, downloadato ad una stampantePostScript, produrrà la stampa richiesta.
Il programma di impaginazione
Scrivere un programma che a sua volta scrive altri programmipuò sembrare un compito estremamente complesso, ma la potenzadel linguaggio PostScript, unita alla relativa semplicità del problematipografico da risolvere, ci permetteranno di cavarcela con unnumero di linee di codice abbastanza ridotto. Per consentirel'utilizzo di un qualunque computer, abbiamo scelto di scriverloin Basic, visto che è di gran lunga il linguaggio più diffuso,esistendo in forma interpretata o compilata su tutti i sistemi.Si è inoltre cercato di utilizzare solo le istruzioni principalidel Basic, evitando le estensioni di un particolare dialetto dellinguaggio, in modo da rendere il più possibile indolore l'eventualetrasporto nel vostro particolare ambiente di sviluppo PostScript.
Il programma è stato comunque provato con i principali tipidi compilatori ed interpreti degli ambienti Macintosh e Pc;l'elenco è riportato nei commenti iniziali del listato. Nel casosi presentasse la necessità di adattarsi a qualche dialettostretto del Basic, ad esempio l'arcinoto Applesoft Basic deisistemi Apple //, la linearità del programma semplificheràmolto il lavoro di conversione da effettuare.
Nel battere il programma, riportato nel Listato 1, siponga particolare attenzione all'uso delle maiuscole e delleminuscole; infatti, nel caso delle stringhe che vengono stampatedalle istruzioni PRINT per produrre i comandi PostScript, icaratteri maiuscoli e minuscoli non sono, come ben sappiamo,equivalenti. Per provare il programma potete battere il testoriportato nel Listato 2, che deve essere formato da solicaratteri ASCII (niente lettere accentate o caratteri strani - il programmanon è in grado di trattarli, e vedremo in futuro perché) ed hai ritorni carrello solo a fine paragrafo, e non a fine riga. Iltesto di prova è formato da due soli paragrafi; il primo diquattro parole, ed il secondo che comprende tutto il resto deltesto. Potrete comunque utilizzare qualunque altro file giàpronto, purché soddisfi ai due requisiti sopraelencati. Ilprogramma PostScript che verrà generato, riportato nel Listato3, produrrà una volta downloadato il risultato mostrato in Figura1.
Il funzionamento del programma Basic è molto semplice; unavolta lanciato esso richiede il nome del file da convertire (seutilizzate un Pc, il nome del file non deve avere estensione), eproduce poi un file con il nome ottenuto aggiungendo l'estensione.pos a quello di partenza. Considerando che questo esempio nonpretende di essere una applicazione reale ma solo un buon esempiodi programmazione, esso è stato semplificato in diversi punti;ad esempio il codice PostScript ha alcune limitazioni rimuovibilia prezzo di un aumento di complessità, alcuni parametri sono incorporatinel sorgente ed i controlli di errore sono ridotti al minimo.
I parametri di stampa del programma possono essere variatimodificando le variabili Basic che si trovano all'inizio dellistato, e che sono:
- TYPE$ - font per il testo
- SIZE - corpo del carattere per il testo
- HEIGHT - altezza pagina in pollici
- WIDTHH - larghezza pagina in pollici
- LEFT - margine sinistro in pollici
- RIGHT - margine destro in pollici
- UP - margine superiore in pollici
- BOT - margine inferiore in pollici
- SPACE - spaziatura verticale in multipli del corpo
- HEADER$ - riga da usare come intestazione
- HTYPE$ - font per intestazione
- HSIZE - corpo del carattere per l'intestazione
Il file PostScript ottenuto risponde ai requisiti minimi diconformità Adobe 2.0, ed è formato da una serie di commenti (header),un prologo (fino alla scritta %%EndProlog), lo scriptche contiene il testo, ed infine un trailer ridotto alminimo indispensabile (le ultime due righe del file).
Il prologo, che è costante, contiene solo due oggetti; ladefinizione del separatore delle parole (uno spazio bianco) equella della procedura spezzaInLinee, che è il cuore ditutto il programma. Questa procedura usa tre argomenti, chedevono esserle forniti, e che sono
- una serie di stringhe di lunghezza massima inferiore ai 255 caratteri, che contengono il paragrafo da stampare;
- un numero, che è la lunghezza della linea espressa in punti;
- una procedura di stampa linea, che si prende cura di stampare le righe formate da spezzaInLinee.
Lo script è formato da tre parti:
- una procedura di inizializzazione della stampa, contenuta nelle sei linee successive a %%EndProlog;
- una serie di gruppi dei tre argomenti sopraelencati;
- una procedura di chiusura stampa, contenuta nelle quattro linee che precedono %%Trailer.
Si noti che le procedure di stampa linea, di inizializzazionestampa e di chiusura stampa non sono costanti, ma dipendono daivalori dei parametri, come i margini ed i tipi di font, chevengono forniti al programma Basic.
Le due procedure di inizializzazione e di fine stampa sonoelementari; quella di stampa linea consiste in una istruzione if,che, a seconda della coordinata Y della linea da trattare(fornita dalla procedura spezzaInLinee) stampa solo quest'ultima, oppure stampa anche l'intestazione, il piè di pagina ed incrementail contatore delle pagine.
La procedura spezzaInLinee assegna a tre variabili itre argomenti passati, inizializza altre cinque variabili locali,entra nel ciclo principale (operatore loop, interrottoalla fine da exit), ed infine esegue alcune istruzioni dichiusura.
Come esercizio lasciamo, a coloro che vorranno cimentarsi, lostudio del funzionamento del loop principale di spezzaInLinee;i nomi delle variabili coinvolte sono autoesplicativi, ed èstata già fornita la definizione di tutti gli operatoriPostScript utilizzati.
Per cambiare: programmiamo l'hardware
Allo scopo di variare i contenuti di questa puntata, cioccuperemo adesso di un paio di esempi di argomento completamentediverso; il primo riguarda la possibilità di modificarepermanentemente via software il comportamento della stampantelaser che stiamo utilizzando.
Nella maggior parte delle stampanti PostScript, come in moltealtre periferiche intelligenti che l'industria dei computer hasfornato ultimamente, è incorporata una piccola area di memorianon volatile EEROM (cioè che non si cancella quando mancal'alimentazione), utilizzata per conservare in permanenza alcuneregolazioni della stampante. Per poter cambiare questi parametriè necessario eseguire quattro operazioni:
- fornire uno di tali parametri, detto password (che deve essere noto - è un numero intero), per poter essere autorizzati a modificare la memoria non volatile. Quando la stampante viene venduta la password è 0, e con ogni probabilità nessuno l'avrà modificata; se così non fosse avrete bisogno di chiedere alla persona responsabile della modifica il nuovo valore della password;
- uscire temporaneamente dalla normale condizione di funzionamento della stampante, detta loop di server (vedremo nella prossima puntata di cosa si tratta);
- porre sullo stack un particolare dizionario predefinito statusdict, che contiene tutti gli operatori che permettono di variare i parametri di sistema immagazzinati nella memoria non volatile;
- utilizzare l'adatto operatore per variare il parametro desiderato.
Il nostro scopo è quello di sopprimere la stampa della paginadi prova che la stampante esegue ogni volta che viene accesa oresettata; per far questo dovremo cambiare il valore delparametro dostartpage da true a false conl'utilizzo dell'operatore setdostartpage. Il programma cherealizza queste operazioni è riportato nel Listato 4; isuoi commenti riportano anche la modifica necessaria perripristinare eventualmente la stampa della pagina di prova.
Un effetto speciale
Il programma riportato nel Listato 5 produce ilrisultato mostrato in Figura 2, cioè la stampa di un testocon effetto di sfumatura. Il programma esegue il solitoincapsulamento, il tracciamento della cornice, definisce il fontcorrente e la variabile che contiene la parola da tracciare,sposta l'origine degli assi ed entra nel loop principale.Quest'ultimo, realizzato per mezzo dell'operatore for,stampa per diciannove volte la stringa scritta,utilizzando il contatore del loop come tono di grigio corrente (variada bianco a nero), e traslando successivamente l'origine di unapiccola quantità in alto a sinistra. All'uscita del loop lascritta viene stampata un'ultima volta in bianco.
To be continued .....
Come esercizio vi proponiamo di riscrivere il Programma 3, inmodo che il numero e lo spostamento delle stampe successive siafunzione del corpo prescelto, ottimizzando il tempo di esecuzionee mantenendo le proporzioni della scia, fornendo inoltrelunghezza rispetto al corpo e direzione di quest'ultima comeparametri.
Nella prossima puntata ci occuperemo di nuovo dei parametriche sono immagazzinati nella memoria non volatile, e dellediverse modalità di funzionamento della stampante. Ritorneremoanche ad occuparci di grafica, trattando della stampa di bitmaped introducendo l'utilizzo degli oggetti di tipo file.
- 1000 REM Corso PostScript - parte VII - programma 1
- 1010 REM APFCP: ASCII -> PostScript File Conversion Program
- 1020 REM
- 1030 REM Programma BASIC per la stampa di files di testo
- 1040 REM su stampante PostScript Laserwriter
- 1050 REM Convertire il file ASCII (nome senza estensione)
- 1060 REM con questo programma.
- 1070 REM Verrà generato un file PostScript avente lo stesso
- 1080 REM nome ed estensione ".pos", che dovrà poi essere
- 1090 REM scaricato su una stampante PostScript.
- 1100 REM Il programma è scritto con un subset del BASIC, al fine di
- 1110 REM garantirne una facile trasportabilità
- 1120 REM È stato comunque provato con:
- 1130 REM - Macintosh + interprete MS BASIC 3.0
- 1140 REM - Macintosh + compilatore MS BASIC 1.0
- 1150 REM - Macintosh + compilatore MS QUICKBASIC 1.0
- 1160 REM - PC + interprete MS GW-BASIC 3.2
- 1170 REM In questo programma i caratteri maiuscoli e minuscoli
- 1180 REM sono significativi; batteteli esattamente come sono.
- 1190 REM Attenzione anche al numero di spazi bianchi indicati dai commenti.
- 1200 REM
- 1210 REM ====== INIZIALIZZAZIONI
- 1220 R$ = CHR$ (13)
- 1230 TYPE$ = "Times-Roman": REM font per il testo
- 1240 SIZE = 12: REM altezza carattere per il testo
- 1250 HEIGHT = 11: REM altezza pagina
- 1260 WIDTHH = 8.5: REM larghezza pagina
- 1270 LEFT = 1: REM margine sinistro
- 1280 RIGHT = 1: REM margine destro
- 1290 UP = 1: REM margine superiore
- 1300 BOT = 1: REM margine inferiore
- 1310 SPACE = SIZE * 1: REM spaziatura (in questo caso singola)
- 1320 LL = 72 * (WIDTHH - LEFT - RIGHT): REM larghezza linea in punti
- 1330 HEADER$ = "*** File convertito con Apfcp e stampato su LaserWriter ***"
- 1340 REM scritta per intestazione
- 1350 HTYPE$ = "Times-Bold": REM font per intestazione
- 1360 HSIZE = 14: REM altezza carattere per l'intestazione
- 1370 REM
- 1380 REM ====== APERTURA DEI FILE
- 1390 INPUT "Nome del file di testo da stampare ";N$
- 1400 OPEN N$+".pos" FOR OUTPUT AS #2: CLOSE #2: KILL N$+".pos"
- 1410 OPEN N$ FOR INPUT AS #1
- 1420 OPEN N$+".pos" FOR OUTPUT AS #2
- 1430 REM
- 1440 REM ====== SCRITTURA PROLOGO
- 1450 ON ERROR GOTO 1640
- 1460 GOSUB 1800: GOSUB 2220
- 1470 A$ = "("
- 1480 GOSUB 1550
- 1490 IF RIGHT$ (A$,3) = " )" THEN 1510
- 1500 REM UNO SPAZIO PRIMA DELLA PARENTESI CHIUSA
- 1510 GOSUB 2310
- 1520 A$ = C$
- 1530 GOTO 1480
- 1540 REM
- 1550 REM ====== SUBROUTINE LETTURA E PREPARAZIONE STRINGHE POSTSCRIPT
- 1560 C$=INPUT$(1,#1)
- 1570 IF C$ = R$ AND A$ = "(" THEN A$ = A$ + " )":C$ = "(": RETURN
- 1580 REM UNO SPAZIO PRIMA DELLA PARENTESI CHIUSA
- 1590 IF C$ = R$ THEN A$ = A$ + " )":C$ = "(": RETURN
- 1600 REM DUE SPAZI PRIMA DELLA PARENTESI CHIUSA
- 1610 A$ = A$ + C$: IF LEN (A$) = 251 THEN C$ = "": RETURN
- 1620 GOTO 1560
- 1630 REM
- 1640 REM ====== SUBROUTINE DI TRATTAMENTO ERRORI
- 1650 IF ERR = 62 THEN GOTO 1710
- 1660 CLOSE #1
- 1670 CLOSE #2
- 1680 PRINT "Errore tipo ";ERR;" alla linea numero "; ERL
- 1690 END
- 1700 REM
- 1710 REM ====== TERMINE DELLA STAMPA
- 1720 A$ = A$ + " )": REM UNO SPAZIO PRIMA DELLA PARENTESI CHIUSA
- 1730 GOSUB 2310
- 1740 GOSUB 2370
- 1750 CLOSE #1
- 1760 CLOSE #2
- 1770 PRINT "Fine della conversione: il file PostScript si chiama ";N$+".pos"
- 1780 END
- 1790 REM
- 1800 REM ====== SUBROUTINE DI SCRITTURA DEL PROLOGO POSTSCRIPT
- 1810 PRINT#2, "%!PS-Adobe-2.0"
- 1820 PRINT#2, "%%Title: File",N$," (Postscript Downloading)"
- 1830 PRINT#2, "%%Creator: APFCP: ASCII -> PostScript File Conversion Program"
- 1840 PRINT#2, "%%For: Corso Postscript BIT"
- 1841 PRINT#2, "%%CreationDate: (4-10-1989) (15:56)"
- 1842 PRINT#2, "%%BoundingBox: 28 30 566 811"
- 1850 PRINT#2, "%%EndComments"
- 1860 PRINT#2, "/Separatore ( ) def": REM C'È UN SOLO SPAZIO FRA LE PARENTESI
- 1870 PRINT#2, "/spezzaInLinee"
- 1880 PRINT#2, "{/proceduraDiStampa exch def"
- 1890 PRINT#2, "/LunghezzaDellaLinea exch def"
- 1900 PRINT#2, "/StringaDiTesto exch def"
- 1910 PRINT#2, "/LunghezzaDelSeparatore Separatore stringwidth pop def"
- 1930 PRINT#2, "/LunghezzaCorrente 0 def"
- 1940 PRINT#2, "/UltimoSeparatore 0 def
- 1950 PRINT#2, "/CarattereDiPartenza 0 def"
- 1960 PRINT#2, "/TestoRimanente StringaDiTesto def"
- 1970 PRINT#2, "{TestoRimanente Separatore search"
- 1980 PRINT#2, "{/ProssimaParola exch def pop"
- 1990 PRINT#2, "/TestoRimanente exch def"
- 2000 PRINT#2, "/LunghezzaDellaParola ProssimaParola stringwidth pop def"
- 2010 PRINT#2, "LunghezzaCorrente LunghezzaDellaParola add LunghezzaDellaLinea lt
- 2020 PRINT#2, "{/LunghezzaCorrente LunghezzaCorrente LunghezzaDellaParola add"
- 2030 PRINT#2, "LunghezzaDelSeparatore add def}"
- 2040 PRINT#2, "{StringaDiTesto CarattereDiPartenza"
- 2050 PRINT#2, "UltimoSeparatore CarattereDiPartenza sub"
- 2060 PRINT#2, "getinterval proceduraDiStampa"
- 2070 PRINT#2, "/CarattereDiPartenza UltimoSeparatore def"
- 2080 PRINT#2, "/LunghezzaCorrente LunghezzaDellaParola LunghezzaDelSeparatore add def"
- 2090 PRINT#2, "}ifelse"
- 2100 PRINT#2, "/UltimoSeparatore UltimoSeparatore"
- 2110 PRINT#2, "ProssimaParola length add 1 add def"
- 2120 PRINT#2, "}"
- 2130 PRINT#2, "{pop exit}"
- 2140 PRINT#2, "ifelse"
- 2150 PRINT#2, "}loop"
- 2160 PRINT#2, "/UltimoCarattere StringaDiTesto length def"
- 2170 PRINT#2, "StringaDiTesto CarattereDiPartenza UltimoCarattere"
- 2180 PRINT#2, "CarattereDiPartenza sub getinterval proceduraDiStampa"
- 2190 PRINT#2, "}def"
- 2195 PRINT#2, "%%EndProlog"
- 2200 RETURN
- 2210 REM
- 2220 REM ====== SUBROUTINE POSTSCRIPT INIZIO STAMPA
- 2230 PRINT#2, "/";HTYPE$;" findfont ";HSIZE;" scalefont setfont"
- 2240 PRINT#2, LEFT * 72;" ";HEIGHT * 72 - 18;" moveto
- 2250 PRINT#2, "(";HEADER$;") show"
- 2260 PRINT#2, "/";TYPE$;" findfont ";SIZE;" scalefont setfont"
- 2270 PRINT#2, "/YLinea ";(HEIGHT * 72) - (72 * UP + SIZE);" def"
- 2280 PRINT#2, "/NumeroPagina 1 def"
- 2290 RETURN
- 2300 REM
- 2310 REM ====== SUBROUTINE DI STAMPA STRINGA
- 2320 PRINT#2, A$
- 2330 IF RIGHT$ (A$,1) = ")" THEN GOSUB 2430
- 2340 RETURN
- 2350 REM
- 2360 REM ====== SUBROUTINE POSTSCRIPT FINE STAMPA
- 2370 PRINT#2, "480 36 moveto"
- 2380 PRINT#2, "(Pagina ) show": REM UNO SPAZIO PRIMA DELLA PARENTESI CHIUSA
- 2390 PRINT#2, "NumeroPagina ( ) cvs show": REM DUE SPAZI FRA LE PARENTESI
- 2395 PRINT#2, "showpage"
- 2400 PRINT#2, "%%Trailer"
- 2405 PRINT#2, "%%EOF"
- 2410 RETURN
- 2420 REM
- 2430 REM ====== SUBROUTINE POSTSCRIPT DI ELABORAZIONE PARAGRAFO
- 2440 PRINT#2, LL
- 2450 PRINT#2, "{YLinea ";BOT * 72 + SPACE;" le"
- 2460 PRINT#2, "{";LEFT * 72;" YLinea moveto show"
- 2470 PRINT#2, "/YLinea YLinea ";SPACE;" sub def"
- 2480 PRINT#2, "480 36 moveto"
- 2490 PRINT#2, "(Pagina ) show": REM UNO SPAZIO PRIMA DELLA PARENTESI CHIUSA
- 2500 PRINT#2, "NumeroPagina ( ) cvs show": REM DUE SPAZI FRA LE PARENTESI
- 2510 PRINT#2, "showpage"
- 2520 PRINT#2, "/";HTYPE$;" findfont ";HSIZE;" scalefont setfont"
- 2530 PRINT#2, LEFT * 72;" ";HEIGHT * 72 - 18;" moveto
- 2540 PRINT#2, "(";HEADER$;") show"
- 2550 PRINT#2, "/";TYPE$;" findfont ";SIZE;" scalefont setfont"
- 2560 PRINT#2, "/NumeroPagina NumeroPagina 1 add def"
- 2570 PRINT#2, "/YLinea ";(HEIGHT * 72) - (72 * UP + SIZE);" def}"
- 2580 PRINT#2, "{";LEFT * 72;" YLinea moveto show"
- 2590 PRINT#2, "/YLinea YLinea ";SPACE;" sub def} ifelse}"
- 2600 PRINT#2, "spezzaInLinee"
- 2610 RETURN
- Definiamo qualche termine tipografico
- Probabilmente molti dei concetti che adesso definiremo sono noti alla maggior parte dei voi, dato che l'uso dei word-processor è ormai così diffuso, ma riteniamo vantaggioso per tutti partire da una base comune di terminologia, che ci sarà utile anche per precisare alcuni concetti di cui ci siamo già occupati. Gli esperti di composizione tipografica ci scuseranno se semplificheremo od approssimeremo alcuni concetti, al fine di non appesantire troppo l'esposizione. In parecchie situazioni definiremo un termine utilizzando la lingua italiana oppure quella inglese, a seconda della consuetudine prevalente; nel caso esse siano ambedue comunemente impiegate, ne utilizzeremo abitualmente solo una, ma forniremo almeno una volta la traduzione fra parentesi.
- %!PS-Adobe-2.0
- %%Title: File CP7-Listato2 (Postscript Downloading)
- %%Creator: APFCP: ASCII -> PostScript File Conversion Program
- %%For: Corso Postscript BIT
- %%CreationDate: (4-10-1989) (15:56)
- %%BoundingBox: 28 30 566 811
- %%EndComments
- /Separatore ( ) def
- /spezzaInLinee
- {/proceduraDiStampa exch def
- /LunghezzaDellaLinea exch def
- /StringaDiTesto exch def
- /LunghezzaDelSeparatore Separatore stringwidth pop def
- /LunghezzaCorrente 0 def
- /UltimoSeparatore 0 def
- /CarattereDiPartenza 0 def
- /TestoRimanente StringaDiTesto def
- {TestoRimanente Separatore search
- {/ProssimaParola exch def pop
- /TestoRimanente exch def
- /LunghezzaDellaParola ProssimaParola stringwidth pop def
- LunghezzaCorrente LunghezzaDellaParola add LunghezzaDellaLinea lt
- {/LunghezzaCorrente LunghezzaCorrente LunghezzaDellaParola add
- LunghezzaDelSeparatore add def}
- {StringaDiTesto CarattereDiPartenza
- UltimoSeparatore CarattereDiPartenza sub
- getinterval proceduraDiStampa
- /CarattereDiPartenza UltimoSeparatore def
- /LunghezzaCorrente LunghezzaDellaParola LunghezzaDelSeparatore add def
- }ifelse
- /UltimoSeparatore UltimoSeparatore
- ProssimaParola length add 1 add def
- }
- {pop exit}
- ifelse
- }loop
- /UltimoCarattere StringaDiTesto length def
- StringaDiTesto CarattereDiPartenza UltimoCarattere
- CarattereDiPartenza sub getinterval proceduraDiStampa
- }def
- %%EndProlog
- /Times-Bold findfont 14 scalefont setfont
- 72 774 moveto
- (*** File convertito con Apfcp e stampato su LaserWriter ***) show
- /Times-Roman findfont 12 scalefont setfont
- /YLinea 708 def
- /NumeroPagina 1 def
- (Definiamo qualche termine tipografico )
- 468
- {YLinea 84 le
- { 72 YLinea moveto show
- /YLinea YLinea 12 sub def
- 480 36 moveto
- (Pagina ) show
- NumeroPagina ( ) cvs show
- showpage
- /Times-Bold findfont 14 scalefont setfont
- 72 774 moveto
- (*** File convertito con Apfcp e stampato su LaserWriter ***) show
- /Times-Roman findfont 12 scalefont setfont
- /NumeroPagina NumeroPagina 1 add def
- /YLinea 708 def}
- { 72 YLinea moveto show
- /YLinea YLinea 12 sub def} ifelse}
- spezzaInLinee
- (Probabilmente molti dei concetti che adesso definiremo sono noti alla maggior parte dei voi, dato che l'uso dei word-processor è ormai così diffuso, ma riteniamo vantaggioso per tutti partire da una base comune di terminologia, che ci sarà utile a
- nche per precisare alcuni concetti di cui ci siamo già occupati. Gli esperti di composizione tipografica ci scuseranno se semplificheremo od approssimeremo alcuni concetti, al fine di non appesantire troppo l'esposizione. In parecchie situazioni defi
- niremo un termine utilizzando la lingua italiana oppure quella inglese, a seconda della consuetudine prevalente; nel caso esse siano ambedue comunemente impiegate, ne utilizzeremo abitualmente solo una, ma forniremo almeno una volta la traduzione fra
- parentesi. )
- 468
- {YLinea 84 le
- { 72 YLinea moveto show
- /YLinea YLinea 12 sub def
- 480 36 moveto
- (Pagina ) show
- NumeroPagina ( ) cvs show
- showpage
- /Times-Bold findfont 14 scalefont setfont
- 72 774 moveto
- (*** File convertito con Apfcp e stampato su LaserWriter ***) show
- /Times-Roman findfont 12 scalefont setfont
- /NumeroPagina NumeroPagina 1 add def
- /YLinea 708 def}
- { 72 YLinea moveto show
- /YLinea YLinea 12 sub def} ifelse}
- spezzaInLinee
- ( )
- 468
- {YLinea 84 le
- { 72 YLinea moveto show
- /YLinea YLinea 12 sub def
- 480 36 moveto
- (Pagina ) show
- NumeroPagina ( ) cvs show
- showpage
- /Times-Bold findfont 14 scalefont setfont
- 72 774 moveto
- (*** File convertito con Apfcp e stampato su LaserWriter ***) show
- /Times-Roman findfont 12 scalefont setfont
- /NumeroPagina NumeroPagina 1 add def
- /YLinea 708 def}
- { 72 YLinea moveto show
- /YLinea YLinea 12 sub def} ifelse}
- spezzaInLinee
- 480 36 moveto
- (Pagina ) show
- NumeroPagina ( ) cvs show
- showpage
- %%Trailer
- %%EOF
- %!PS-Adobe-2.0
- %%Title: Soppressione della pagina di prova
- %%Creator: Corso PostScript - parte VII - programma 2
- %%For: Corso PostScript BIT
- %%EndComments
- %%EndProlog
- %
- % Programma principale
- % (non trattandosi di un programma di stampa
- % non è necessario l'incapsulamento)
- %
- % Uscita dal loop di server
- % (se la password è stata cambiata dal
- % valore di default di zero, modificare
- % opportunamente il programma nella
- % riga seguente)
- serverdict begin 0 exitserver
- %
- % Fuori dal loop di server può ora
- % essere modificato statusdict; per
- % ripristinare la stampa della pagina
- % di prova modificare false in true.
- statusdict begin false setdostartpage end
- %
- %%Trailer
- %%EOF
- %!PS-Adobe-2.0
- %%Title: Esempio di stampa di una parola con effetto di sfumatura
- %%Creator: Corso PostScript - parte VII - programma 3
- %%For: Corso PostScript BIT
- %%EndComments
- %%EndProlog
- %
- % Procedura inch
- % Argomenti: XInches / XPoints
- % Converte misure da pollici
- % a punti tipografici.
- /inch { 72 mul } def
- %
- % Procedura tracciaCornice
- % Argomenti: - / -
- % Traccia una cornice su pagina
- % A4 a mezzo pollice dal margine.
- /tracciaCornice {
- gsave newpath
- 0.5 inch 0.5 inch moveto
- 7.3 inch 0 inch rlineto
- 0 inch 10.5 inch rlineto
- -7.3 inch 0 inch rlineto
- closepath
- .05 inch setlinewidth
- 0 setgray stroke
- grestore
- } def
- %
- %
- %
- % Programma principale
- %
- % Incapsulamento e disegno della cornice
- gsave
- tracciaCornice
- %
- % Definizione del carattere da utilizzare,
- % della parola da tracciare e dell'origine.
- /Times-Italic findfont 2 inch scalefont setfont
- /scritta (Fading) def
- 1.5 inch 5.5 inch translate
- %
- % Loop for per il tracciamento della scia
- 0.95 -0.05 0.0
- {setgray 0 0 moveto scritta show -1.5 0.7 translate}
- for
- %
- % Tracciamento della parola in bianco
- 1 setgray 0 0 moveto -1.5 0.7
- translate scritta show
- %
- % Rimozione incapsulamento e stampa pagina
- grestore
- showpage
- %
- %%Trailer
- %%EOF
Copyright © 1985: Marco A. Calamari