[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 206.   Uniformità del sistema di stampa: da testo a PostScript

Un sistema di filtri di stampa ben organizzato deve passare per la generazione di un formato intermedio (prima di quello finale adatto alla stampante) per poter gestire l'impostazione della stampa in modo completamente trasparente. La figura 206.1 mostra questa idea.

Figura 206.1. Stampa attraverso un formato intermedio uniforme.

stampa attraverso un formato intermedio uniforme

L'esistenza di Ghostscript, descritto meglio nel capitolo 207, giustifica la scelta del formato PostScript come standard per il formato intermedio di stampa, benché questo formato sia proprietario. L'utilità di questo passaggio obbligato sta anche nel fatto che prima della conversione finale, il formato PostScript può essere rimaneggiato, per adattarlo a esigenze particolari, compresa la riduzione o l'ingrandimento. Tuttavia, in questa situazione, anche i file di testo vanno rielaborati in modo da generare prima un file PostScript. A questo scopo sono stati realizzati programmi come A2ps.

206.1   A2ps

A2ps (1) è un programma per generare file PostScript a partire, prevalentemente, da file di testo. Gli obiettivi di chi sviluppa A2ps vanno oltre tale livello; tuttavia, questa è la sua funzionalità più importante.

A2ps è controllato da un file di configurazione generale, /etc/a2ps.cfg, al quale può essere affiancato un file personale, ~/.a2ps/a2psrc, e anche uno locale (nella directory corrente), .a2psrc. Pur senza approfondire la configurazione di A2ps, vale la pena di descrivere brevemente come si compongono questi file. Il simbolo # rappresenta l'inizio di un commento che termina alla fine della riga; le righe bianche e quelle vuote vengono ignorate; le altre righe sono direttive nella forma:

tipo_dichiarazione: dichiarazione

Il file di configurazione generale che di solito viene fornito assieme al programma (/etc/a2ps.cfg) dovrebbe essere adatto alla maggior parte delle situazioni e in generale non serve altro per utilizzare A2ps. In ogni caso, questo file è commentato molto bene e la documentazione che fornisce A2ps è molto dettagliata (info a2ps).

A2ps si utilizza in pratica attraverso l'eseguibile a2ps, il cui scopo è quello di ricevere uno o più file in modo da poter generare una trasformazione adeguata in formato PostScript:

a2ps [opzioni] [file...]

I file possono essere indicati attraverso la riga di comando e in mancanza della loro indicazione viene usato lo standard input. Lo scopo di A2ps è quello di generare un file PostScript, secondo quanto definito nella configurazione, oppure dalle opzioni della riga di comando. In generale, il risultato viene inviato alla stampa attraverso il comando lpr, come si può vedere dalla direttiva seguente, che appare generalmente nel file di configurazione globale, con la quale si dichiara l'invio dello standard output verso tale comando di stampa:

# First, the default printer (option -d, no argument)
DefaultPrinter: | lpr

Di solito non c'è ragione di cambiare questo comportamento di A2ps, ma è importante sapere che non è sempre necessariamente così.

Il fatto che A2ps sia configurato in questo modo, lo rende simile a un comando di stampa alternativo a quello normale, per cui, il comando

lpr pippo[Invio]

viene sostituito direttamente dal comando

a2ps pippo[Invio]

che in più si occupa di impaginare meglio il testo.

Ovviamente, tutto questo presuppone che la coda di stampa predefinita, ovvero quella che viene utilizzata quando si usa il comando lpr senza specificare altro, sia in grado di gestire file PostScript.

A2ps offre molte possibilità nel modo di impaginare il testo e non si limita semplicemente a consentire la stampa ridotta di più pagine virtuali su una facciata singola. È molto importante anche la sua capacità di evidenziare il testo in funzione del suo contenuto, cosa che diventa molto utile per la lettura dei sorgenti di un programma. La tabella 206.4 riepiloga brevemente alcune opzioni più importanti che possono essere usate nella riga di comando dell'eseguibile a2ps, opzioni che possono essere anche incluse nella configurazione attraverso direttive nella forma:

Options: opzione_della_riga_di_comando

Per esempio, per selezionare il formato di carta A4 si può utilizzare l'opzione --medium=A4 nella riga di comando, oppure la direttiva seguente nel file di configurazione:

Options: --medium=A4

Tabella 206.4. Alcune opzioni di A2ps.

Opzione Alternativa Descrizione
-M carta
--medium=carta
Dimensione della carta.
-r
--landscape
Orientamento orizzontale.
-R
--portrait
Orientamento verticale.
-n
n pagine virtuali per ogni pagina reale.
-j
--borders={yes|no}
Bordi attorno alle pagine virtuali.
-A
--compact={yes|no}
Unione di più file in un solo foglio.
-f n
--font-size=n
n punti per la dimensione dei caratteri.
-l n
--chars-per-line=n
n caratteri per riga.
-L n
--lines-per-page=n
n righe per pagina virtuale.
-m
--catman
Pagina di manuale; come -L66.
-T n
--tabsize=n
Dimensione degli stop di tabulazione.
-B
--no-header
Nessuna intestazione.
-a m[-n]
--pages=m[-n]
Seleziona un intervallo di pagine.
-o file
--output=file
Crea un file e non invia alla stampa.
-P coda
--printer=coda
Coda di stampa a cui inviare il risultato.
-d
Invia il risultato alla coda di stampa predefinita.
-Etipo
--pretty-print=tipo
Definizione dello stile di evidenziamento del testo (tabella 206.5).
-X codifica
--encoding=codifica
Definizione della codifica in cui è scritto il testo (tabella 206.6).

La tabella 206.5 riporta invece l'elenco di alcuni nomi di stili di evidenziamento della stampa, in funzione del contenuto del file di testo che si intende stampare. Questi nomi si usano con l'opzione -E.

Tabella 206.5. Alcuni nomi che definiscono uno stile nel modo di evidenziare il testo.

Tipo Descrizione
sh
Script di una shell Bourne.
html
Sorgente HTML.
mail
Messaggio di posta elettronica.
udiff
File di differenze in formato unificato.
make
File-make.
ada
Sorgente in linguaggio ADA.
c
Sorgente in linguaggio C.
cpp
Sorgente in linguaggio C++.
gnuc
Sorgente in linguaggio GNU C.
clisp
Sorgente in linguaggio Common Lisp.
eiffel
Sorgente in linguaggio Eiffel.
elisp
Sorgente in linguaggio Emacs Lisp.
fortran
Sorgente in linguaggio Fortran.
java
Sorgente in linguaggio Java.
pascal
Sorgente in linguaggio Pascal.
python
Sorgente in linguaggio Python.
scheme
Sorgente in linguaggio Scheme.
sql92
Sorgente in linguaggio SQL92.

La tabella 206.6 riporta l'elenco delle sigle che si possono utilizzare con l'opzione -X per definire la codifica con cui è scritto il testo da convertire. Si osservi che è probabile non sia disponibile una codifica UTF-8.

Tabella 206.6. Alcuni nomi che identificano la codifica del testo.

Nome Descrizione
ASCII
ASCII normale.
IBM-CP437
IBM CP437.
IBM-CP850
IBM CP850.
ISO-8859-1
ISO 8859-1 (Latin 1).
ISO-8859-2
ISO 8859-2 (Latin 2).
ISO-8859-10
ISO 8859-10.
ISO-8859-15
ISO 8859-15 (Latin 9).
ISO-8859-3
ISO 8859-3.
ISO-8859-4
ISO 8859-4.
ISO-8859-5
ISO 8859-5.
ISO-8859-7
ISO 8859-7.
ISO-8859-9
ISO 8859-9.
MS-CP1250
Microsoft CP1250.

Prima di passare all'elenco di esempi comuni, vale la pena di proporre il comando che potrebbe essere usato in un filtro di stampa per gestire i file di testo, senza lasciare che questi vengano inviati direttamente alla stampante:

a2ps -1 -M A4 -f 11 --borders=no -B -o -

In questo modo si specifica che: si vuole ottenere una pagina virtuale per ogni pagina reale; il formato della carta è A4; il testo deve utilizzare un carattere da 11 punti (è la dimensione ottimale per stampare 80 colonne); non si vogliono bordi attorno alla pagina virtuale; non si vuole alcuna intestazione; il risultato in PostScript deve essere emesso attraverso lo standard output.

Volendo intervenire nella configurazione di Magicfilter, si potrebbe sostituire la solita direttiva:

default                 cat

La nuova direttiva potrebbe essere come quella seguente:

default   pipe   /usr/bin/a2ps -1 -M A4 -f 11 --borders=no -B -o - 2> /dev/null

Segue la descrizione di alcuni esempi. Questi esempi fanno riferimento alla configurazione tipica di A2ps.

206.2   Enscript

Enscript(2) è un programma per generare file PostScript e altri formati, a partire da file di testo.

Enscript prevede una serie di file di configurazione, ~/.enscriptrc, /etc/enscriptsite.cfg e /etc/enscript.cfg, dove il primo è quello personale di ogni utente, il secondo è un primo file di configurazione generale, mentre il terzo è un file di configurazione di sistema. L'ordine in cui sono indicati questi file, rappresenta anche l'ordine di precedenza che hanno le direttive al loro interno.

Senza approfondire la configurazione di Enscript, vale la pena di descrivere brevemente come si compongono questi file. Il simbolo # rappresenta l'inizio di un commento che termina alla fine della riga; le righe bianche e quelle vuote vengono ignorate; le altre righe sono direttive nella forma:

tipo_dichiarazione: dichiarazione

Il file di configurazione generale che di solito viene fornito assieme al programma (/etc/enscript.cfg) dovrebbe essere adatto alla maggior parte delle situazioni. In ogni caso, questo file è commentato molto bene e la documentazione disponibile è molto dettagliata (enscript(1)).

Enscript si utilizza in pratica attraverso l'eseguibile enscript, il cui scopo normale è quello di comporre in formato PostScript uno o più file indicati come argomento:

enscript [opzioni] [file...]

I file possono essere indicati attraverso la riga di comando, ma in mancanza di questa indicazione viene usato lo standard input. Lo scopo di Enscript è quello di generare un file PostScript, o un altro tipo di formato finale, ma il modo in cui questo file viene restituito dipende dalla configurazione, oppure dalle opzioni della riga di comando. In generale, il risultato viene inviato alla stampa attraverso il comando lpr, in base alla direttiva seguente:

# Where output goes as a default: `printer' or `stdout'
DefaultOutputMethod: printer

Di solito non c'è motivo di cambiare questo comportamento di Enscript, ma è importante sapere che non è sempre necessariamente così. In tal modo, Enscript può essere usato come se fosse un comando di stampa, dove uno qualunque dei due comandi seguenti, si traduce direttamente nella stampa del file pippo:

enscript pippo[Invio]

cat pippo | enscript[Invio]

La configurazione di Enscript prevede anche l'indicazione esplicita del comando di stampa e della coda di stampa a cui inviare il file generato dalla composizione. Generalmente non è necessario preoccuparsi di questo fatto, dal momento che un sistema di stampa configurato correttamente è in grado di gestire tutto attraverso la coda predefinita. Tuttavia è bene tenere in considerazione le direttive necessarie a tale definizione:

# Printer name to spool to.  As a default we want to use system's
# default printer.
# Printer: ps

# The spooler command switch to select the printer queue.  This option
# can also be used to pass other flags to the spooler command but they
# must be given before the queue switch.
QueueParam: -P

# Printer spooler command name.
Spooler: lpr

Enscript offre molte possibilità nel modo di impaginare il testo, senza limitarsi a consentire la stampa ridotta di più pagine virtuali su una facciata singola. È molto importante anche la sua capacità di evidenziare il testo in funzione del suo contenuto, per facilitare la lettura dei sorgenti di un programma. La tabella 206.16 riepiloga brevemente alcune opzioni più importanti che possono essere usate nella riga di comando dell'eseguibile enscript, opzioni che possono essere anche incluse automaticamente attraverso la variabile di ambiente ENSCRIPT, nello stesso modo in cui apparirebbero nella riga di comando.

Tabella 206.16. Alcune opzioni di Enscript.

Opzione Alternativa Descrizione
-M carta
--media=carta
Dimensione della carta.
--list-media
Elenca i formati disponibili della carta.
-r
--landscape
Orientamento orizzontale.
-R
--portrait
Orientamento verticale.
-n
--columns=n
Testo su n colonne.
-U n
--nup=n
n pagine virtuali.
-j
--borders
Bordi attorno alle pagine virtuali.
-f nome@n
--font=nome@n
Nome e dimensione del carattere da stampa.
-f nome@m/n
--font=nome@m/n
Nome, larghezza e altezza del carattere.
--margins=sx:dx:sopra:sotto
Margini in punti.
-l
--lineprinter
66 righe per pagina senza intestazione.
-L n
--lines-per-page=n
n righe per pagina virtuale.
-T n
--tabsize=n
Dimensione degli stop di tabulazione.
-B
--no-header
Nessuna intestazione.
-a m[-n]
--pages=m[-n]
Seleziona un intervallo di pagine.
-a odd|even
--pages=odd|even
Seleziona pagine dispari o pagine pari.
-o file
-p file,
--output=file
Crea un file e non invia alla stampa.
-P coda
-d coda
--printer=coda
Coda di stampa a cui inviare il risultato.
-q
--quiet
--silent
Funzionamento silenzioso.
-Etipo
--pretty-print=tipo
Stile di evidenziamento del testo (tabella 206.17).
--help-pretty-print
Elenca gli stili disponibili.
-W PostScript
--language=PostScript
Composizione in PostScript.
-W html
--language=html
Composizione in HTML.
-W overstrike
--language=overstrike
Testo con comandi di sovrascrittura.
-W rtf
--language=rtf
Composizione in RTF.
-X codifica
--encoding=codifica
Codifica in cui è scritto il testo (tabella 206.18).
-Z
--pass-through
Non modifica i file PostScript e PCL.

La tabella 206.17 riporta invece l'elenco di alcuni nomi di stili di evidenziamento della stampa, in funzione del contenuto del file di testo che si intende stampare. Questi nomi si usano con l'opzione -E e possono essere elencati completamente con l'opzione --help-pretty-print.

Tabella 206.17. Alcuni nomi che definiscono uno stile nel modo di evidenziare il testo.

Tipo Descrizione
sh
Script di una shell Bourne.
html
Sorgente HTML.
mail
Messaggio di posta elettronica.
diff
File di differenze standard.
diffu
File di differenze in formato unificato.
makefile
File-make.
ada
Sorgente in linguaggio ADA.
c
Sorgente in linguaggio C.
cpp
Sorgente in linguaggio C++.
elisp
Sorgente in linguaggio Emacs Lisp.
fortran
Sorgente in linguaggio Fortran.
java
Sorgente in linguaggio Java.
pascal
Sorgente in linguaggio Pascal.
perl
Sorgente in linguaggio Perl.
python
Sorgente in linguaggio Python.
scheme
Sorgente in linguaggio Scheme.
sql
Sorgente in linguaggio SQL.

La tabella 206.18 riporta l'elenco delle sigle che si possono utilizzare con l'opzione -X per definire la codifica con cui è scritto il testo da convertire. Si osservi che potrebbe non essere disponibile la codifica UTF-8.

Tabella 206.18. Alcuni nomi che identificano la codifica del testo.

Nome Descrizione
88591
latin1
ISO 8859-1
88592
latin2
ISO 8859-2
88593
latin3
ISO 8859-3
88594
latin4
ISO 8859-4
88595
cyrillic
ISO 8859-5
88597
greek
ISO 8859-7
88599
latin5
ISO 8859-9
885910
latin6
ISO 8859-10
ascii
ASCII normale
asciifise
asciifi
asciise
ASCII finlandese e svedese
asciidkno
asciidk
asciino
ASCII danese e norvegese
ibmpc
pc
dos
IBM CP437.
mac
Mac
vms
VMS
hp8
HP
koi8
ps
PS
PostScript
pslatin1
ISOLatin1Encoding
PostScript ISOLatin1Encoding

Prima di passare all'elenco di esempi comuni, vale la pena di proporre il comando che potrebbe essere usato in un filtro di stampa per gestire i file di testo, senza lasciare che questi vengano inviati direttamente alla stampante:

enscript -1 -M a4 -f Courier@9.1/9.5 -B --margin=72:72:72:72 -o -

In questo modo si specifica che: si vuole ottenere una pagina virtuale per foglio; il formato della carta è A4 (si osservi l'uso del minuscolo); il testo deve utilizzare un carattere largo 9,1 punti e alto 9,5 punti (è la dimensione ottimale per stampare 80 colonne e 66 righe nello spazio disponibile, all'interno dei margini indicati); non si vogliono bordi attorno alla pagina virtuale, ma si lascia un margine di 72 punti; non si vuole alcuna intestazione; il risultato in PostScript deve essere emesso attraverso lo standard output.

Volendo intervenire nella configurazione di Magicfilter, si potrebbe sostituire la solita direttiva:

default                 cat

La nuova direttiva potrebbe essere come quella seguente:

default   pipe   /usr/bin/enscript -1 -M a4 -f Courier@9.1/9.5 -B \
  \--margin=72:72:72:72 -o - 2> /dev/null

Gli esempi che vengono mostrati fanno riferimento alla configurazione tipica di Enscript.

206.3   Mpage

pericolo: software non libero software non libero: non ammette la modifica

Mpage (3) è un programma per generare file PostScript a partire da file di testo o da altri file PostScript. In generale, Mpage è utile per la prima di queste funzionalità, dal momento che la raccolta PSUtils è molto più adatta per la rielaborazione di file PostScript.

Sotto questo punto di vista, Mpage svolge un compito simile a quello di A2ps, in generale anche meno preciso; tuttavia Mpage offre una semplicità che alle volte manca all'altro. Per cominciare, Mpage non prevede alcuna configurazione e tutte le indicazioni gli devono essere fornite attraverso la riga di comando; è previsto che il testo in ingresso utilizzi la codifica ISO 8859-1; inoltre, il risultato dell'elaborazione di Mpage è diretto verso lo standard output e non alla coda di stampa predefinita.

mpage [opzioni] [file...]

L'eseguibile mpage è tutto ciò che compone questo programma e, come si vede, i file da elaborare possono essere indicati sulla riga di comando, altrimenti viene utilizzato lo standard input. La tabella 206.27 elenca alcune delle opzioni disponibili.

Tabella 206.27. Alcune opzioni di Mpage.

Opzione Descrizione
-1
Genera una pagina virtuale per foglio.
-2
Genera due pagine virtuali per foglio.
-4
Genera quattro pagine virtuali per foglio.
-8
Genera otto pagine virtuali per foglio.
-bcarta
Definisce il formato della carta.
-c
Abilita il concatenamento di più file sullo stesso foglio.
-l
Orientamento orizzontale.
-Ln
Richiede n righe per pagina virtuale.
-mn[l][r][t][b]
Richiede n punti di margine nel foglio.
-Mn[l][r][t][b]
Richiede n punti di margine nella pagina virtuale.
-o
Toglie i bordi attorno alle pagine virtuali.
-Pcoda
Invia il risultato alla coda di stampa indicata.
-sn
Specifica la lunghezza di uno stop di tabulazione.
-Wn
Richiede n caratteri per riga.

Nella tabella, la sintassi delle opzioni -m e -M è stata indicata in modo approssimativo. Si riferiscono a dei margini per il foglio, oppure per la pagina virtuale: le lettere «l», «r», «t», e «b», si riferiscono rispettivamente al margine sinistro, destro, superiore e inferiore. Se si indica un gruppo di lettere, si intende che il margine indicato si deve riferire alle posizioni corrispondenti; se non si indicano lettere, il margine vale per tutti i lati del foglio. Per esempio, -m20 indica un margine di 20 punti per tutti i lati, mentre -m20lr assieme a -m10tb richiede un margine di 20 punti per i margini sinistro e destro, mentre richiede solo 10 punti per i margini superiore e inferiore.

Prima di passare all'elenco di esempi comuni, vale la pena di proporre il comando che potrebbe essere usato in un filtro di stampa per gestire i file di testo, senza lasciare che questi vengano inviati direttamente alla stampante:

mpage -1 -bA4 -m72 -L 66 -W 80 -o 2> /dev/null

In questo modo si specifica che: si vuole ottenere una pagina virtuale per foglio; il formato della carta è A4; devono essere lasciati 72 punti per i margini del foglio (sono tutti uguali); il testo deve essere organizzato in modo tale che si possano stampare 80 colonne per 66 righe (il formato tradizionale per i file di testo e anche per la composizione delle pagine di manuale); non si vogliono bordi attorno alla pagina virtuale.

Volendo intervenire nella configurazione di Magicfilter, si potrebbe sostituire la solita direttiva:

default                 cat

La nuova direttiva potrebbe essere come quella seguente:

default   pipe  /usr/bin/mpage -1 -bA4 -m72 -L 66 -W 80 -o 2> /dev/null

Segue la descrizione di alcuni esempi.

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


1) A2ps   GNU GPL

2) Enscript   GNU GPL

3) Mpage   software non libero: non ammette la modifica


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome uniformita_del_sistema_di_stampa_da_testo_a_postscript.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!