Capitolo 26.   Formati per la stampa

dvi2fax 26.3.5.5 dviconcat 26.3.5.4 dvicopy 26.3.5.1 dvidvi 26.3.5.3 dvipng 26.3.5.6 dvired 26.3.5.7 dviselect 26.3.5.2 eps2eps 26.1.6 gs 26.1.2 pdffonts 26.4.1.4 pdfimages 26.4.1.3 pdfinfo 26.4.1.5 pdftops 26.4.1.1 26.4.1.2 ps2ps 26.1.6 psbook 26.2.2.4 psnup 26.2.2.3 psresize 26.2.2.1 psselect 26.2.2.2 pstops 26.2.2.5 xpdf 26.4.1

Prima di poter affrontare le problematiche relative alla gestione della stampa in un sistema Unix, è necessario conoscere i formati più comuni, usati per rappresentare le stampe. Nei sistemi Unix il formato di riferimento è PostScript, rappresentato da un file di testo contenente uno script, con cui si descrive il contenuto esatto di una pagina. Pertanto, la stampante PostScript è quella che è in grado di ricevere un file di tale formato e di renderlo correttamente su carta.

Con il tempo si sono resi disponibili degli strumenti software, attraverso i quali è possibile convertire un file da un formato PostScript ad altri formati, compatibili con stampanti che non sono in grado di interpretare quel linguaggio, ma prima di quel momento si è affermato anche il formato DVI. Inoltre, il linguaggio PostScript si è evoluto nel PDF (Portable document format), acquisendo funzionalità che ne favoriscono la consultazione elettronica.

26.1   PostScript

Il sistema PostScript ha segnato una rivoluzione nel modo di stampare definendo uno standard generale di rappresentazione della pagina. Tuttavia, a causa del prezzo, le stampanti PostScript si sono introdotte particolarmente nel settore tipografico e raramente nei piccoli uffici o in casa.

PostScript è una sorta di linguaggio di programmazione per la stampa, o in altri termini, si può definire anche come linguaggio di stampa. I dati inviati a una stampante PostScript sono in forma di file di testo contenente un programma di stampa.

Il formato PostScript è proprietario. Nonostante questo fatto, sulla base di tale formato sono stati sviluppati diversi applicativi nell'ambito del software libero.

26.1.1   File PostScript

Un file PostScript è ciò che viene inviato a una stampante PostScript per ottenere un documento finale. Questo file contiene tutte le informazioni per definire l'aspetto finale del documento, senza conoscere le caratteristiche particolari della stampante, la quale da sola deve arrangiarsi a interpretarlo. Il file PostScript è un file di testo normale, come se fosse un sorgente di un linguaggio di programmazione, con la differenza che le istruzioni non sono così intelligibili.

%!PS-Adobe-3.0
...

La prima parte di questo file inizia generalmente con la dichiarazione del tipo di file (%!PS-Adobe-versione), quindi il testo prosegue con la definizione di una serie di caratteristiche che riguardano l'intero documento.

Successivamente inizia la definizione dettagliata di altre caratteristiche, principalmente i tipi di carattere tipografico. La descrizione di questi si rende necessaria quando il documento utilizza dei tipi che non appartengono allo standard minimo di PostScript. In pratica, il linguaggio PostScript prevede che alcuni tipi di carattere siano predefiniti all'interno della stampante, per cui, quando vengono utilizzati questi tipi, non occorre specificarne le caratteristiche; in tutti gli altri casi, occorre fornire alla stampante tutte le informazioni necessarie a disegnarli nel modo corretto.

Questo particolare deve essere tenuto da conto quando si vogliono ottenere file PostScript di dimensioni ridotte, per esempio quando si tratta di documenti brevi.

...
%%Page: 1 1
1 0 bop 300 1350 3600 42 v 300 1984 a FP(Appunti)138
b(Linux)p 300 2184 V 2142 2403 a FO(Daniele)21
b(Giacomini)114 b(daniele)21 b(@)i(pluto.linux.it)2865 2973
y FN(1999.09.21)p
eop
%%Page: 2 2
2 1 bop -72 -90 a FM(D)o(aniele)17 b(G)o(iacomini)h
FL(\350)i(un)g (autodidatta)e(che)j(ha)f(tro)n(vato)e
(in)i(GNU/Linux)h(la)f(possibilit\340)e(di)h(studiar)o(e)
g(e)h(approfondir)o(e)-72 2 y(un)c(sistema)f(oper)o(ativo)
h(completo)m(.)h(P)o(r)q(ima)e(di)g
...

A un certo punto, finalmente, inizia il contenuto delle varie pagine. L'estratto di esempio si riferisce alla prima e all'inizio della seconda pagina di questo documento (in una sua edizione molto vecchia). Con qualche difficoltà si riesce anche a intravedere il testo che si ottiene con la stampa. Al termine dell'ultima pagina c'è una conclusione, come nell'estratto seguente:

...
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF

Questa struttura ordinata di un file PostScript, lascia intuire la possibilità di scomporre un file di questo tipo e di ricomporlo come si desidera. Quello che conta è che ciò che si ottiene contenga il preambolo iniziale, quanto precede le descrizioni delle pagine e la conclusione finale. Per esempio, potrebbe essere conveniente estrarre da un file PostScript alcune pagine e ricomporle in un file indipendente.

Se la struttura è relativamente semplice, questo tipo di scomposizione può essere fatta manualmente, con l'aiuto di un programma per la modifica di file di testo, oppure per mezzo di strumenti appositi.

26.1.2   Ghostscript

In mancanza di una stampante PostScript si può utilizzare un programma in grado di trasformare un file PostScript in uno adatto alla stampante che si possiede. In passato sono apparsi diversi programmi proprietari di emulazione, ma attualmente si è imposto Ghostscript del quale esistono versioni sia per i sistemi Unix, sia per altri sistemi operativi.(1)

Ghostscript(2) è un programma che si occupa di trasformare un file PostScript, EPS o PDF, in un altro adatto alla stampante che si utilizza. Permette di utilizzare una serie di opzioni fornite come argomenti della riga di comando, ma al termine costringe a uscire dal programma inserendo la parola quit, oppure il codice di EOF (che di solito si ottiene con la combinazione di tasti [Ctrl d]), attraverso lo standard input (attraverso la tastiera o una ridirezione dell'input). Anche con la combinazione di tasti [Ctrl c] si ottiene la conclusione del funzionamento del programma.

gs [opzioni] [file...]

Ghostscript utilizza un elenco molto lungo di argomenti nella riga di comando. Questi sono importanti per automatizzare l'utilizzo del programma attraverso degli script.

Tabella 26.4. Alcune opzioni.

Opzione Descrizione
-sDEVICE=stampante
Permette di definire per quale tipo si stampante o altra unità deve essere generato il risultato della trasformazione del file PostScript. Possono essere utilizzati i nomi indicati nelle tabelle 26.5, 26.6 e 26.7.
-q
-dQUIET
Permette di sopprimere il messaggio di avvio del programma. È utile quando si ridirige l'output e di conseguenza non si vogliono avere dati estranei nel file che si ottiene.
-dNOPAUSE
Disabilita l'invito e la pausa alla fine di ogni pagina.
-dSAFER
-dPARANOIDSAFER
Esclude la possibilità di usare comandi distruttivi del linguaggio PostScript. Ciò consente di evitare che possa essere eseguito del codice distruttivo, inserito dolosamente in un documento, durante la conversione (per la stampa o la visualizzazione). Intuitivamente si può intendere che la seconda versione di questa opzione sia più sicura.
-dWRITESYSTEMDICT
Consente la modifica dei file che compongono la gestione del cosiddetto systemdict. In alcune circostanze, l'uso di questa opzione è necessaria per consentire l'elaborazione dei file.
-sPAPERSIZE=formato
Permette di definire il formato della pagina. Possono essere utilizzati i formati elencati nella tabella 26.8.
-sOutputFile=file
Permette di definire il nome del file che si vuole generare con questa trasformazione. Se al posto del nome si mette un trattino (-), questo file viene emesso attraverso lo standard output.
-
Se al posto del nome del file PostScript da convertire si indica un trattino (-) isolato, viene utilizzato quanto proveniente dallo standard input.

Tabella 26.5. Alcuni dei formati per stampanti utilizzabili con Ghostscript.

Nome Descrizione
appledmp
Apple Dot Matrix Printer
iwhi
Apple Imagewriter, alta risoluzione
iwlo
Apple Imagewriter, bassa risoluzione
iwlq
Apple Imagewriter LQ, 320×216 dpi
hl7x0
Brother HL 720 e HL 730
bj10e
Canon BubbleJet BJ10e
bj200
Canon BubbleJet BJ200
bjc600
Canon BubbleJet BJC-600 e BJC-400 colore
bjc800
Canon BubbleJet BJC-800 colore
lbp8
Canon LBP-8II (laser)
lips3
Canon LIPS III (laser)
coslw2p
CoStar LabelWriter II e II/Plus
coslwxl
CoStar LabelWriter XL
declj250
DEC LJ250
la50
DEC LA50
la70
DEC LA70
la75
DEC LA75
la75plus
DEC LA75plus
lj250
DEC LJ250 (colore)
ap3250
Epson AP3250
epson
Epson-compatibile (9 o 24 aghi)
eps9mid
Epson-compatibile (9 aghi a media risoluzione)
eps9high
Epson-compatibile (9 aghi ad alta risoluzione)
epsonc
Epson LQ-2550 e Fujitsu 3400/2400/1200 a colori
lq850
Epson LQ-850
lp8000
Epson LP-8000 (laser)
stcolor
Epson Stylus colore
photex
Epson Stylus Color Photo, Photo EX, Photo 700
st800
Epson Stylus 800
uniprint
Epson ESC/P-, ESC/P2-, HP-RTL/PCL
dnj650c
HP Designjet 650C
deskjet
HP Deskjet e HP Deskjet Plus
djet500
HP Deskjet 500
djet500c
HP Deskjet 500C
cdeskjet
HP Deskjet 500C (1 bit/pixel colore)
cdjcolor
HP Deskjet 500C (24 bit/pixel colore)
cdjmono
HP Deskjet 500C (solo nero)
cdjcolor
HP Deskjet 500C
cdj500
HP Deskjet 500C
djet500c
HP Deskjet 500C
cdj550
HP Deskjet 550C/560C
cljet5
HP Laserjet 5/5M a colori
cljet5c
HP Laserjet 5/5M a colori
laserjet
HP Laserjet
ljetplus
HP Laserjet Plus
ljet2p
HP Laserjet IId/IIp/III* (con compressione TIFF)
ljet3
HP Laserjet III* (con compressione Delta Row)
ljet3d
HP Laserjet IIID (duplex)
ljet4
HP Laserjet 4 (600 dpi)
lj4dith
HP Laserjet 4 (Floyd-Steinberg dithering)
pj
HP Paintjet XL
pjetxl
HP Paintjet XL
pjxl
HP Paintjet XL (colore)
paintjet
HP Paintjet XL (colore)
pjxl300
HP Paintjet XL300 (colore) e HP Deskjet 1200C
lp2563
HP 2563B
ibmpro
IBM Proprinter (9 aghi)
jetp3852
IBM Jetprinter (a getto, colore, modello #3852)
imagen
Imagen ImPress
lxm5700m
Lexmark 5700
m8510
C.Itoh M8510
cp50
Mitsubishi CP50 (colori)
necp6
NEC P6/P6+/P60 (360×360 dpi)
oki182
Okidata Microline 182
okiibm
Okidata Microline stampanti compatibili IBM
r4081
Ricoh 4081 (laser)
nwp533
Sony NWP533 (laser)
spark
Spark SPARKprinter
sj48
StarJet 48 inkjet
t4693d2
Tektronix 4693d (colore, 2 bit)
t4693d4
Tektronix 4693d (colore, 4 bit)
t4693d8
Tektronix 4693d (colore, 8 bit)
tek4696
Tektronix 4695/4696 (plotter a getto d'inchiostro)
xes
Xerox XES 2700, 3700, 4045 e altri modelli

Tabella 26.6. Alcuni dei formati grafici utilizzabili con Ghostscript.

Nome Descrizione
dfaxhigh
DigiBoard DigiFAX (alta risoluzione)
dfaxlow
DigiBoard DigiFAX (bassa risoluzione)
faxg3
Fax gruppo 3, con EOL, senza intestazione e EOD
faxg32d
Fax gruppo 3 2-D, con EOL, senza intestazione e EOD
faxg4
Fax gruppo 4, con EOL, senza intestazione e EOD
pcxmono
PCX monocromatico
pcxgray
PCX 8 bit in scala di grigi
pcx16
PCX 4 bit a colori
pcx256
PCX 8 bit a colori
pcx24b
PCX 24 bit a colori
bit
Binario semplice (raw), monocromatico
bitrgb
Binario semplice (raw), RGB
bitcmyk
Binario semplice (raw), CMYK
pbm
PBM (Portable bitmap), formato ASCII
pbmraw
PBM (Portable bitmap), formato raw
pgm
PGM (Portable graymap), formato ASCII
pgmraw
PGM (Portable graymap), formato raw
pngmono
PNG (Portable network graphics), monocromatico
pnggray
PNG (Portable network graphics), 8 bit grigi
png16
PNG (Portable network graphics), 4 bit colori
png256
PNG (Portable network graphics), 8 bit colori
png16m
PNG (Portable network graphics), 24 bit colori
ppm
PBM (Portable pixmap), formato ASCII
ppmraw
PBM (Portable pixmap), formato raw
tiffcrle
TIFF b/n, CCITT RLE 1-dim (fax gruppo 3 senza EOL)
tiffg3
TIFF b/n, fax gruppo 3 (con EOL)
tiffg32d
TIFF b/n, fax gruppo 3 2-D
tiffg4
TIFF b/n, fax gruppo 4
tifflzw
TIFF b/n, LZW
tiffpack
TIFF b/n, PackBits
tiff12nc
TIFF 12 bit RGB colori (senza compressione)
tiff24nc
TIFF 24 bit RGB colori (senza compressione)

Tabella 26.7. Alcuni dei formati alternativi di conversione utilizzabili con Ghostscript.

Nome Descrizione
psmono
PostScript 1, monocromatico, bitmap
pswrite
PostScript
epswrite
EPS (PostScript incapsulato)
pdfwrite
PDF (Portable document format)

Tabella 26.8. Formati di stampa di Ghostscript. I dati di questa tabella sono tratti dalla pagina di manuale gs(1).

formato larghezza altezza larghezza altezza larghezza altezza
1/72 pollici 1/72 pollici pollici pollici cm cm
note 540 720 7,50 10,00 19,05 25,4
letter 612 792 8,50 11,00 21,59 27,94
legal 612 1 008 8,50 14,00 21,59 35,56
a0 2 380 3 368 33,055 6 46,777 8 83,961 1 118,816
a1 1 684 2 380 23,388 9 33,055 6 59,407 8 83,961 1
a2 1 190 1 684 16,527 8 23,388 9 41,980 6 59,407 8
a3 842 1 190 11,694 4 16,527 8 29,703 9 41,980 6
a4 595 842 8,263 89 11,694 4 20,990 3 29,703 9
a5 421 595 5,847 22 8,263 89 14,851 9 20,990 3
a6 297 421 4,125 5,847 22 10,477 5 14,851 9
a7 210 297 2,916 67 4,125 7,408 33 10,477 5
a8 148 210 2,055 56 2,916 67 5,221 11 7,408 33
a9 105 148 1,458 33 2,055 56 3,704 17 5,221 11
a10 74 105 1,027 78 1,458 33 2,610 56 3,704 17
b0 2 836 4 008 39,388 9 55,666 7 100,048 141,393
b1 2 004 2 836 27,833 3 39,388 9 70,696 7 100,048
b2 1 418 2 004 19,694 4 27,833 3 50,023 9 70,696 7
b3 1 002 1 418 13,916 7 19,694 4 35,348 3 50,023 9
b4 709 1 002 9,847 22 13,916 7 25,011 9 35,348 3
b5 501 709 6,958 33 9,847 22 17,674 2 25,011 9
archE 2 592 3 456 36,00 48,00 91,44 121,92
archD 1 728 2 592 24,00 36,00 60,96 91,44
archC 1 296 1 728 18,00 24,00 45,72 60,96
archB 864 1 296 12,00 18,00 30,48 45,72
archA 648 864 9,00 12,00 22,86 30,48
flsa 612 936 8,50 13,00 21,59 33,02
flse 612 936 8,50 13,00 21,59 33,02
halfletter 396 612 5,50 8,50 13,97 21,59
11x17 792 1 224 11,00 17,00 27,94 43,18
ledger 1 224 792 17,00 11,00 43,18 27,94

Segue la descrizione di alcuni esempi.

26.1.3   Ghostscript e HPIJS

Ghostscript da solo non è in grado di gestire tutte le stampanti esistenti, pertanto a questo si può affiancare un altro programma specifico per un certo gruppo di stampanti, con il quale comunica utilizzando il protocollo IJS. Il programma più importante che si può affiancare a Ghostscript è HPIJS,(3) sviluppato originariamente da Hewlett-Packard per le proprie stampanti, ma rilasciato poi con una licenza libera e sviluppato attualmente anche per altre stampanti.

HPIJS è costituito sostanzialmente dal file eseguibile hpijs, avviato e controllato da Ghostscript. Per esempio, per produrre un file adatto a una stampante HP Laserjet (per la precisione si produce il file test.laserjet), si potrebbe usare Ghostscript nel modo seguente:

gs -q -dNOPAUSE -sDEVICE=ijs -sIjsServer=hpijs \
  \   -dIjsUseOutputFD \
  \   -sDeviceManufacturer="HEWLETT-PACKARD" \
  \   -sDeviceModel="HP LaserJet" -sOutputFile=test.laserjet \
  \   esempio.ps < /dev/null
[Invio]

Come si può osservare, servono delle opzioni speciali, che vengono descritte nelle tabelle successive; a ogni modo, l'esempio è realizzato con le opzioni indispensabili, mentre ne possono essere usate altre per specificare meglio le caratteristiche della stampa che si vuole produrre.

Tabella 26.9. Opzioni indispensabili per l'uso di Ghostscript con HPIJS.

Opzione Descrizione
-sDEVICE=ijs
Stabilisce l'uso del protocollo IJS per comunicare con un programma parallelo, il quale si prende poi la responsabilità di produrre effettivamente il formato per la stampante o di comunicare direttamente con la stampante stessa.
-sIjsServer=hpijs
Indica il programma da avviare, con il quale Ghostscript deve poi interagire con il protocollo IJS. In tal caso il programma è hpijs.
-dIjsUseOutputFD
Letteralmente significa use output file descriptor ed è un'opzione praticamente necessaria.
-sDeviceManufacturer="nome"
Indica nome della casa produttrice del modello di stampante che si va a indicare.
-sDeviceModel="nome"
Indica il nome della stampante, riferita alla casa produttrice specificata con l'opzione -sDeviceManufacturer.

Tabella 26.10. Alcuni tipi di stampanti, da specificare con l'opzione -sDeviceModel, quando la casa produttrice è definita con l'opzione -sDeviceManufacturer="HEWLETT-PACKARD". I nomi sono tratti dai file del sorgente di HPIJS, e l'incoerenza nell'uso di lettere maiuscole e minuscole viene rispettata. L'elenco è in ordine alfabetico.

cp1160, DESKJET 1120, DESKJET 1125, DESKJET 1220, deskjet 3320, deskjet 3420, DESKJET 350, deskjet 3600, DESKJET 3810, DESKJET 3816, DESKJET 3820, DESKJET 3822, DESKJET 540, deskjet 5550, deskjet 5551, deskjet 5600, DESKJET 600, DESKJET 610, DESKJET 612, deskjet 6122, deskjet 6127, DESKJET 630, DESKJET 632, DESKJET 640, DESKJET 648, DESKJET 656, DESKJET 660, DESKJET 670, DESKJET 672, DESKJET 680, DESKJET 682, DESKJET 690, DESKJET 692, DESKJET 693, DESKJET 694, DESKJET 695, DESKJET 697, DESKJET 810, DESKJET 812, DESKJET 815, DESKJET 816, DESKJET 825, DESKJET 830, DESKJET 832, DESKJET 840, DESKJET 842, DESKJET 845, DESKJET 850, DESKJET 855, DESKJET 870, DESKJET 880, DESKJET 882, DESKJET 890, DESKJET 895, DESKJET 920, DESKJET 930, DESKJET 932, DESKJET 933, DESKJET 934, DESKJET 935, DESKJET 940, DESKJET 948, DESKJET 950, DESKJET 952, DESKJET 955, DESKJET 960, DESKJET 970, DESKJET 980, DESKJET 990, DESKJET 995, Deskjet D4100, dj450, e-printer e20, HP BUSINESS INKJET 2200, HP BUSINESS INKJET 2230, HP BUSINESS INKJET 2250, HP BUSINESS INKJET 2280, hp color LaserJet, hp color LaserJet 3500, hp color LaserJet 3550, HP LaserJet, hp LaserJet 1010, hp LaserJet 1012, Officejet Pro K550, Officejet Pro K850, PHOTOSMART 100, PHOTOSMART 1115, PHOTOSMART 1215, PHOTOSMART 1218, PHOTOSMART 130, PHOTOSMART 1315, PHOTOSMART 230, Photosmart 470, PHOTOSMART P1000, PHOTOSMART P1100

26.1.4   Ghostscript per ingrandire le immagini EPS

Il formato EPS è una variante di PostScript, in cui, invece di fare riferimento a una pagina, si indica in modo preciso un lo spazio di un rettangolo. In pratica, il formato EPS si presta alla realizzazione di immagini.

Quando il contenuto di un'immagine EPS è fatta di linee e di testo, è ragionevole aspettarsi che un ingrandimento e una riduzione avvengano senza perdita di qualità (per quanto possibile tecnicamente), ma quando si converte un'immagine EPS in un formato non vettoriale, spesso ciò non avviene.

A titolo di esempio, si osservi il comando seguente, dove si fa riferimento all'uso di convert che appartiene al pacchetto ImageMagick (è descritto nella sezione 30.4.5). Lo scopo del comando è quello di leggere il file prova.eps e generare il file prova.png (PNG), ottenendo un ingrandimento di quattro volte:

convert -geometry 400% prova.eps prova.png[Invio]

Se si confrontano i file, il file PNG che si ottiene non risulta nitido come invece dovrebbe.

Per ovviare a questo inconveniente, occorre utilizzare Ghostscript direttamente, con l'ausilio di opzioni particolari.

Tabella 26.11. Alcune opzioni particolari di Ghostscript.

Opzione Descrizione
-dBATCH
Fa in modo che vengano eseguite le elaborazioni richieste terminando il funzionamento di Ghostscript al termine.
-sDEVICE=bbox
Invece di trasformare il file emette le informazioni sulle coordinate del rettangolo che contiene l'immagine o la pagina. La sigla sta per Bounding box.
-gmxn
-dDEVICEWIDTH=m \
  \-dDEVICEEIGHT=n
Individua l'ampiezza (m) e l'altezza (n) della figura o della pagina da convertire. I valori sono espressi attraverso un numero intero che rappresenta punti, pari a 1/72 di pollice.
-rn
-rmxn
-dDEVICEXRESOLUTION=m \
  \-dDEVICEYRESOLUTION=n
Dichiara la risoluzione del formato di destinazione. Con l'opzione -r, se si indica un solo valore, la risoluzione è uguale, sia in orizzontale, sia in verticale; se si indicano due valori, il primo è la risoluzione orizzontale, il secondo è la risoluzione verticale. la risoluzione viene indicata con un numero intero, che rappresenta punti per pollice; pertanto, una risoluzione normale è pari a 72.

Per poter ingrandire un'immagine durante una conversione, conviene realizzare uno script, perché occorre conoscere preventivamente l'ampiezza orizzontale e dell'altezza del file originale. Per ottenere le coordinate del rettangolo della pagina o dell'immagine che si vuole elaborare si può usare il comando seguente:

gs -q -dSAFER -dBATCH -dNOPAUSE -sDEVICE=bbox \
  \   prova.eps 2>&1
[Invio]

Ovviamente, l'esempio si riferisce al file prova.eps. Ecco cosa si potrebbe ottenere:

%%BoundingBox: 0 0 12 49
%%HiResBoundingBox: 0.954000 0.936000 11.952000 48.527999

Dovendo lavorare con numeri interi, è sufficiente sapere che l'ampiezza è di 12 punti e l'altezza è di 49 punti. Supponendo di voler ingrandire di 10 volte l'immagine, per generare il file prova.png, si dovrebbe usare il comando seguente:

gs -q -dSAFER -dBATCH -dNOPAUSE -sDEVICE=png16m -g120x490 \
  \   -r720x720 -sOutputFile=prova.png prova.eps
[Invio]

Come si vede, oltre che intervenire con l'opzione -g, occorre moltiplicare il valore di 72 usato nell'opzione -r.

Uno script con il quale si vuole ingrandire di 10 volte un file (PostScript, EPS o PDF), convertendolo in PNG, potrebbe essere fatto come nell'esempio seguente:

#!/bin/sh
#
INPUT_FILE=$1
OUTPUT_FILE=$2
#
BOUNDING_BOX=`gs -dSAFER -q -dBATCH -dNOPAUSE \
  \-sDEVICE=bbox $INPUT_FILE 2>&1` # NORMAL_BOUNDING_BOX=`echo $BOUNDING_BOX \
  \| sed "s/^%%BoundingBox:\
  \ *\([0-9.]*\) *\([0-9.]*\) *\([0-9.]*\) \
  \ *\([0-9.]*\) *.*$/\1 \2 \3 \4/"` # BOXX=`echo $NORMAL_BOUNDING_BOX \
  \| sed "s/^[0-9.]* *[0-9.]* \
  \ *\([0-9.]*\) *.*$/\1/"` BOXY=`echo $NORMAL_BOUNDING_BOX \
  \| sed "s/^[0-9.]* *[0-9.]* \
  \ *[0-9.]* *\([0-9.]*\) *.*$/\1/"` # gs -dSAFER -q -dBATCH -dNOPAUSE -sDEVICE=png16m \
  \-g${BOXX}0x${BOXY}0 -r720x720 \
  \-sOutputFile=$OUTPUT_FILE $INPUT_FILE

26.1.5   Anteprima di stampa

Nello stesso modo in cui Ghostscript viene utilizzato per convertire file PostScript in formati adatti alle stampanti normali, così è possibile ottenere una conversione in un formato che possa essere mostrato attraverso lo schermo, solitamente all'interno del sistema grafico X.

Alcuni strumenti grafici specifici, si occupano di guidare l'utente all'utilizzo di Ghostscript in modo da ottenere un'anteprima di stampa su schermo. In mancanza di questi si può usare manualmente Ghostscript stesso:

gs -dSAFER -q -sDEVICE=x11 prova.ps[Invio]

Il comando di questo esempio consente di visualizzare il file prova.ps, attraverso il sistema grafico X (ovviamente va usato il comando da una finestra di terminale). Si osservi che al posto della parola chiave x11 se ne possono provare altre (dovrebbero essere disponibili: x11alpha, x11cmyk, x11cmyk2, x11cmyk4, x11cmyk8, x11gray2, x11gray4, x11mono). Una volta dato il comando di visualizzazione, appare una finestra con il contenuto della prima pagina e, dove è stato dato il comando, si può interagire con Ghostscript:

>>showpage, press <return> to continue<<

È sufficiente premere [Invio] per passare alla pagina successiva, fino alla fine del documento:

[Invio]

>>showpage, press <return> to continue<<

[Invio]

>>showpage, press <return> to continue<<

Al termine si presenta un invito:

GS>

Per concludere il funzionamento di Ghostscript si usa il comando quit:

GS>quit[Invio]

A titolo di esempio, nelle figure successive si vedono tre programmi che facilitano l'uso di Ghostscript per la visualizzazione del contenuto di un file PostScript.

ghostview [opzioni] [file]
gv [file] [opzioni]
okular  [opzioni] [file]

Figura 26.17. Ghostview.(4)

ghostview

Figura 26.18. GV.(5)

gv

Figura 26.19. Okular.(6)

Okular

26.1.6   Distillazione

Le versioni recenti di Ghostscript forniscono degli script utili per «distillare» un file PostScript, EPS o PDF, in modo da semplificarlo o adattarlo in qualche modo.

  1. ps2ps [opzioni] file_originale file_da_generare_ps
    
  2. eps2eps [opzioni] file_originale file_da_generare_eps
    
  3. ps2epsi [opzioni] file_originale file_da_generare_epsi
    
  4. ps2ascii [opzioni] file_originale file_da_generare_ascii
    
  5. pdf2ps [opzioni] file_originale file_da_generare_ps
    
  6. ps2pdf [opzioni] file_originale file_da_generare_pdf
    

I primi due script (ps2ps e eps2eps) si riferiscono precisamente a file PostScript, oppure a file EPS, con lo scopo di adattarli semplificandoli. Si traducono sinteticamente nel codice seguente:

gs -q -sDEVICE=pswrite -sOutputFile=file_da_generare \
  \-dNOPAUSE -dBATCH [opzioni] file_originale
gs -q -sDEVICE=epswrite -sOutputFile=file_da_generare \
  \-dNOPAUSE -dBATCH [opzioni] file_originale

Da questo si comprende che le opzioni sono semplicemente quelle che in questo contesto potrebbero essere date all'interprete Ghostscript. Di solito, può essere conveniente l'uso dell'opzione -dLanguageLevel=1, con cui si ottiene un file contenente soltanto istruzioni relative al livello uno del linguaggio PostScript.

Il terzo script (ps2epsi) serve a trasformare un file PostScript in un formato EPSI (ovvero un formato EPS che incorpora anche un'anteprima dell'immagine, in un formato a mappa di bit).

Il quarto script (ps2ascii) serve a trasformare un file PostScript, EPS o PDF, in un file di testo puro e semplice.

Il quinto e il sesto script (pdf2ps ps2pdf) servono a trasformare un file PDF in PostScript, o viceversa. Si osservi però che il file PDF che si ottiene dalla distillazione è privo di alcune caratteristiche comuni nei file PDF.

26.1.7   Estrazione di disegni

Il formato PostScript consente la rappresentazione di disegni in forma vettoriale. In certe situazioni, può essere necessario estrarre le informazioni di un disegno vettoriale da una pagina PostScript per consentirne la rielaborazione con un programma adatto.

26.1.7.1   Pstoedit

Pstoedit(7) è un programma molto semplice, in grado di estrarre le informazioni vettoriali da un file PostScript o da un file PDF.(8) Il programma eseguibile che svolge questo compito è pstoedit, che si utilizza secondo lo schema sintattico seguente:

pstoedit [opzioni_varie] -f formato_finale[:opzioni_del_formato] \
  \[file_originale [file_da_ottenere]]

In condizioni normali, è sufficiente indicare l'opzione -f, a cui segue una parola chiave che identifica il formato finale in cui si vuole convertire il file PostScript (o PDF). Se il formato di conversione prevede delle opzioni, queste vanno indicate dopo il nome della conversione, separate da due punti verticali (come si vede dal modello sintattico). Alla fine della riga di comando si indicano i file da utilizzare, ma in loro mancanza si trae il file in ingresso dallo standard input e si emette il risultato della conversione attraverso lo standard output.

I formati per la conversione sono numerosi e si può ottenere l'elenco completo di quelli incorporati nel programma con l'opzione -help. Per approfondire i dettagli sulle opzioni di alcuni formati conviene leggere la pagina di manuale pstoedit(1). Qui viene proposto un elenco ridotto di opzioni:

Opzione Descrizione
-help
Emette attraverso lo standard error una guida rapida sul suo utilizzo, completa di un elenco di formati disponibili.
-page n
Converte la pagina n-esima.
-merge
Consente la ricostruzione di poligoni riempiti.
-v
Mostra qualche informazione in più durante la conversione.
-f gnuplot
Converte in formato Gnuplot.
-f fig
-f xfig
Converte in formato FIG (per XFig).
-f pic
Converte in formato PIC (per Groff).
-f latex2e
Converte in un formato adatto a LaTeX.
-f java1
-f java2
Converte in formato sorgente Java, 1 o 2.

Viene proposto un esempio molto semplice, in cui si vuole convertire il file figura.ps (PostScript contenente una sola pagina) nel file figura.fig (adatto a XFig):

pstoedit -f fig figura.ps figura.fig[Invio]

26.2   Rielaborazione PostScript

Nella sezione 26.1 si accenna alla struttura di un file PostScript, e al fatto che il suo contenuto possa essere riadattato. Per queste rielaborazioni vengono in aiuto diversi programmi, in particolare la raccolta denominata PSUtils (PostScript utilities).

Attraverso la rielaborazione di un file PostScript, si potrebbe ottenere:

Purtroppo, questi programmi di servizio non sono perfetti e funzionano generalmente solo con file che rispettano alcune convenzioni, allo scopo di facilitare l'individuazione delle pagine del documento.

26.2.1   Sequenza di stampa

Quando si vuole organizzare la stampa di un documento voluminoso, il primo problema è stabilire la gestione della stampa fronte-retro. Dal momento che si dispone normalmente di stampanti che stampano una sola faccia per volta, dopo la prima passata, occorre stabilire come deve essere girata la carta e se deve essere invertita la sequenza dei fogli.

Figura 26.21. Movimento della carta in una stampante laser tipica.

movimento della carta in una stampante

Il programma GV permette di stampare in maniera distinta le pagine dispari da quelle pari, ma per la gestione di sequenze più complesse, occorre fare affidamento sui programmi che sono descritti in queste sezioni.

Il problema più comune è quello di stampare su un solo foglio, fronte e retro, quattro facciate ridotte alla metà della dimensione normale. Si osservi la figura 26.22; rappresenta la sequenza necessaria per la stampa corretta di quattro facciate su un solo foglio, quando si dispone di una stampante normale che stampa su una sola facciata alla volta, tenendo conto quindi che il foglio deve essere reimmesso nella stampante.

Figura 26.22. Sequenza per la stampa di quattro facciate su un foglio normale utilizzando stampanti normali.

sequenza stampa quattro facciate su foglio normale

Se la stampante funziona come mostrato nei primi due modelli che appaiono nella figura 26.21, si può comprendere il meccanismo osservando la sequenza di operazioni mostrata dalla figura 26.23. In pratica, dopo la stampa della prima facciata, occorre prendere il foglio senza ruotarlo e reimmetterlo in ingresso per la stampa.

Figura 26.23. Sequenza pratica per la stampa di quattro facciate su un foglio normale, utilizzando stampanti normali.

sequenza stampa quattro facciate su foglio normale bis

Se la stampa supera le quattro facciate ridotte, ovvero se richiede più di un foglio, occorre suddividere la stampa in modo da stampare prima il fronte e poi il retro. Nel momento in cui si passa a stampare il retro, occorre verificare se si deve invertire la sequenza dei fogli, oppure se si invia la stampa del gruppo di pagine in senso inverso.

Volendo, il problema si può complicare ancora di più, se i fogli che si ottengono devono essere rilegati a gruppetti (segnature), attraverso una cucitura centrale. In pratica, la prima facciata del primo foglio contiene la prima e l'ultima pagina, mentre la seconda facciata contiene la seconda e la penultima pagina, continuando così con i fogli successivi.

Un altro problema da considerare quando si utilizzano stampanti laser, è la temperatura. La stampa richiede il riscaldamento e la fusione dell'inchiostro in polvere, così facendo, sia la stampante che la carta si riscaldano notevolmente durante il funzionamento. Quando si deve reimmettere la carta che è già stata stampata da un lato, è probabile che alcuni fogli tendano ad appiccicarsi, rovinando la sequenza di stampa. In queste situazioni è consigliabile stampare a piccoli blocchi, per dare il tempo alla stampante e alla carta di raffreddarsi un po'.

Le stampanti duplex possono stampare simultaneamente fronte-retro. Per arrivare a questo risultato, l'immagine che viene stampata nel retro del foglio è rovesciata tenendo conto dell'orientamento normale di questo: verticale. Quando si vogliono stampare quattro facciate su un foglio unico, le cose si complicano; in pratica, le due facciate ridotte che vanno collocate nel retro del foglio, devono essere rovesciate. Forse, la figura 26.24 aiuta a comprendere la cosa.

Figura 26.24. Sequenza per la stampa di quattro facciate su un foglio normale utilizzando stampanti duplex.

sequenza stampa quattro facciate su foglio normale duplex

Una sequenza di stampa di questo tipo può essere simulata anche con una stampante normale, nella quale i fogli debbano essere reimmessi per la stampa della parte retrostante. la figura 26.25 mostra in che modo debbano essere reimmessi i fogli in questo caso.

Figura 26.25. Sequenza pratica per la stampa di quattro facciate su un foglio normale simulando una stampante duplex.

sequenza stampa quattro facciate su foglio normale duplex bis

26.2.1.1   Piega doppia

Si possono stampare su un solo figlio, fronte e retro, otto facciate ridotte; successivamente si può piegare e tagliare il foglio in modo da ottenere un libretto molto piccolo, in proporzione alla dimensione di partenza. In pratica, supponendo di partire da un foglio A4, si vuole arrivare a una dimensione simile al A6, che si ha proprio quando si piega due volte un foglio A4.

Figura 26.26. Un foglio piegato in quattro per rappresentare otto pagine ridotte.

foglio piegato in quattro

La figura 26.26 dovrebbe chiarire in che modo vada piegato il foglio e si intravede la sequenza delle pagine. La figura 26.27 mostra meglio la sequenza delle pagine ridotte, mostrando anche quando queste devono risultare capovolte.

Figura 26.27. Schema per stampare quando si intende piegare il foglio due volte.

schema di un foglio piegato in quattro

Naturalmente, volendo piegare assieme più fogli, la sequenza si complica ulteriormente, pur rimanendo questo il principio di funzionamento.

Le pagine piegate in questo modo, vanno tagliate nella parte alta, dopo la piega. Un libro stampato in questo modo, potrebbe essere rilegato ignorando il problema della pagine attaccate sul lato superiore, lasciando poi al lettore il compito di separarle con un tagliacarte.

26.2.2   PSUtils

La raccolta di programmi più importante per la rielaborazione dei file PostScript è PSUtils. (9) Nelle sezioni seguenti viene descritto il funzionamento dei suoi componenti più importanti.

Molti di questi programmi hanno in comune le opzioni che vengono elencate brevemente nella tabella 26.28.

Tabella 26.28. Opzioni comuni dei programmi di PSUtils.

Opzione Descrizione
-wlarghezza
Definisce l'ampiezza orizzontale della carta del formato finale. Se il valore viene espresso senza l'indicazione dell'unità di misura, si intende trattarsi di punti tipografici.
-haltezza
Definisce l'ampiezza verticale della carta del formato finale. Se il valore viene espresso senza l'indicazione dell'unità di misura, si intende trattarsi di punti tipografici.
-pformato
In alternativa all'indicazione delle dimensioni del formato finale, si può usare questa opzione per indicare direttamente il nome standard del formato finale. Se le dimensioni non vengono definite, si sottintende trattarsi di a4.
-Wlarghezza
Definisce l'ampiezza orizzontale della carta del formato di origine. Se il valore viene espresso senza l'indicazione dell'unità di misura, si intende trattarsi di punti tipografici.
-Haltezza
Definisce l'ampiezza verticale della carta del formato di origine. Se il valore viene espresso senza l'indicazione dell'unità di misura, si intende trattarsi di punti tipografici.
-Pformato
In alternativa all'indicazione delle dimensioni del formato di origine, si può usare questa opzione per indicare direttamente il nome standard del formato di origine. Se le dimensioni non vengono definite, si sottintende trattarsi di a4.
-q
Durante l'elaborazione, viene emesso attraverso lo standard error l'elenco dei numeri di pagina che vengono elaborati. Se si utilizza questa opzione, se ne sopprime la segnalazione.

È il caso di sottolineare che le dimensioni della carta, quando devono essere fornite, possono essere espresse senza l'indicazione di un'unità di misura, facendo riferimento implicitamente a punti tipografici da 1/72 di pollice, altrimenti si possono indicare le sigle cm o in che si riferiscono rispettivamente a centimetri e pollici. Il formato della carta può essere espresso anche attraverso il suo nome standard; precisamente vengono accettate le parole chiave: a3, a4, a5, b5, letter, legal, tabloid, statement, executive, folio, quarto e 10x14.

26.2.2.1   Utilizzo di «psresize»

Il programma psresize elabora un file PostScript adattandone le dimensioni, in base a quanto specificato con le opzioni, generando un nuovo file. Se il secondo file non viene indicato attraverso la riga di comando, il risultato viene emesso attraverso lo standard output; se non viene indicato nemmeno il primo, il file da elaborare viene tratto dallo standard input.

psresize [opzioni] [file_originale [file_elaborato]]

Sono disponibili le opzioni comuni elencate nella tabella 26.28.

26.2.2.2   Utilizzo di «psselect»

Il programma psselect elabora un file PostScript estraendone alcune pagine e generando un nuovo file con queste. Se il secondo file non viene indicato attraverso la riga di comando, il risultato viene emesso attraverso lo standard output; se non viene indicato nemmeno il primo, il file da elaborare viene tratto dallo standard input.

psselect [opzioni] [file_originale [file_elaborato]]

Le pagine vengono selezionate attraverso l'opzione -p che può essere usata congiuntamente a -e (pagine pari) oppure -o (pagine dispari).

I numeri di pagina a cui si fa riferimento, sono relativi alla disposizione effettiva, contando a partire dal numero uno. Infatti, un file PostScript può essere il risultato di un assemblaggio di pagine numerate in vario modo, dove questa numerazione può non corrispondere alla disposizione effettiva delle pagine all'interno del file.

Tabella 26.29. Alcune opzioni.

Opzione Descrizione
-e
Seleziona solo le pagine pari (even).
-o
Seleziona solo le pagine dispari (odd).
-ppagine
Permette di specificare un gruppo di pagine, attraverso un elenco separato da virgole. All'interno dell'elenco si possono specificare anche degli intervalli, separando il numero iniziale da quello finale con un trattino singolo (-). Se un numero di pagina è prefissato dal trattino basso (_), questo si intende riferito alla fine del documento, contando all'indietro.
-r
Con questa opzione, le pagine estratte vengono organizzate in ordine inverso rispetto a quello di origine (reverse).
-q
Durante l'elaborazione, viene emesso attraverso lo standard error l'elenco dei numeri di pagina che vengono elaborati. Se si utilizza questa opzione, se ne sopprime la segnalazione (quiet).

Segue la descrizione di alcuni esempi.

26.2.2.3   Utilizzo di «psnup»

Il programma psnup elabora un file PostScript generando un file in cui diverse pagine di origine sono assemblate in un'unica pagina finale. In pratica permette di ottenere due o più pagine in un'unica facciata.

psnup [opzioni] [file_originale [file_elaborato]]

Se il secondo file non viene indicato attraverso la riga di comando, il risultato viene emesso attraverso lo standard output; se non viene indicato nemmeno il primo, il file da elaborare viene tratto dallo standard input.

Le pagine riunite assieme da psnup sono inserite in sequenza, così come si trovano nel file originale. Per cambiare l'ordine di stampa in modo da poter ottenere un fronte-retro, occorre preelaborare il file di origine attraverso psbook.

Sono disponibili le opzioni comuni elencate nella tabella 26.28; inoltre:

Opzione Descrizione
-n
Un trattino seguito da un numero indica la quantità di pagine che si vogliono unire in un'unica pagina finale. Per esempio, -2 fa in modo che su una pagina finale siano unite assieme due pagine di quelle originali, ridotte opportunamente.

Segue la descrizione di alcuni esempi.

26.2.2.4   Utilizzo di «psbook»

Il programma psbook elabora un file PostScript generando un altro file in cui la sequenza delle pagine risulta alterata in modo da poter stampare un libretto. Per esempio, nel caso della stampa di gruppi di quattro pagine, la sequenza generata è 4-1-2-3, in modo da poter stampare un foglio in cui sul fronte (recto) appaiano le pagine 4-1 e sul retro (tergo) le pagine 2-3. Questo permette di piegare il foglio e di leggerlo a modo di libretto. In tal caso si hanno legature (segnature) di un solo foglio.

psbook [opzioni] [file_originale [file_elaborato]]

I gruppi di pagine possono essere di dimensioni maggiori, precisamente si tratta di multipli di quattro; se non viene specificato diversamente con le opzioni, si intende un gruppo di dimensioni sufficienti a contenere tutte le pagine contenute nel file originale.

Se il secondo file non viene indicato attraverso la riga di comando, il risultato viene emesso attraverso lo standard output; se non viene indicato nemmeno il primo, il file da elaborare viene tratto dallo standard input.

Tabella 26.31. Alcune opzioni.

Opzione Descrizione
-q
Durante l'elaborazione, viene emesso attraverso lo standard error l'elenco dei numeri di pagina che vengono elaborati. Se si utilizza questa opzione, se ne sopprime la segnalazione.
-sn
L'opzione -s permette di definire la dimensione del raggruppamento. Se non viene specificato, si intende un gruppo unico per tutte le pagine del file originale. Il valore minimo è quattro e può assumere solo un valore multiplo a quattro.

Segue la descrizione di alcuni esempi.

26.2.2.5   Utilizzo di «pstops»

Il programma pstops elabora un file PostScript generando un altro file in cui le pagine possono figurare ridotte, ingrandite, ruotate e sovrapposte. Lo scopo di pstops è anche quello di riorganizzare la sequenza di queste pagine, in modo più libero rispetto a psbook.

pstops [opzioni] definizione_pagine [file_originale [file_elaborato]]

Se il secondo file non viene indicato attraverso la riga di comando, il risultato viene emesso attraverso lo standard output; se non viene indicato nemmeno il primo, il file da elaborare viene tratto dallo standard input.

L'argomento più delicato di pstops è quello che serve a definire le pagine: si tratta di un argomento singolo che definisce come sono raggruppate e per ogni raggruppamento definisce le nuove pagine che vengono generate. Per comprendere il senso di ciò occorre scomporre questo argomento in fasi successive. Per prima cosa viene definito come sono fatti i gruppi:

[modulo:]definizione_pagine_del_gruppo

Il modulo è un numero che esprime la quantità di pagine da prendere in considerazione di volta in volta. Il valore minimo è di una sola pagina e si tratta anche di quello predefinito nel caso non sia indicato espressamente. In base a questo raggruppamento, vengono definite delle pagine relative numerate a partire da zero, fino al valore del modulo meno uno. Ogni pagina relativa viene definita con la sintassi seguente:

[-]n_relativo_pagina[L][R][U][@scala][(scostamento_orizzontale,scostamento_verticale)]

In pratica, il numero relativo della pagina serve a specificare a quale pagina del modulo si fa riferimento. Questo numero potrebbe essere fatto precedere dal segno -, ma in tal caso si intende fare riferimento a raggruppamenti che partono dalle pagine finali del documento e scorrono verso quelle iniziali.

Le lettere L, R e U, servono rispettivamente a ottenere una rotazione a destra (di 90 gradi in senso orario), a sinistra (di 90 gradi in senso antiorario) e a rovesciare dall'alto in basso (rispetto al suo orientamento originale). Queste lettere possono essere usate in modo cumulativo e di solito si combinano la L con la U, o la R con la U (combinare la L con la R non serve a nulla). Dopo queste lettere può essere indicata una scala (preceduta dal simbolo @). Il valore che regola la scala è tale per cui il numero uno corrisponde al 100 %, di conseguenza, per indicare delle riduzioni si devono usare valori inferiori all'unità (utilizzando il punto come separatore decimale).

L'ultima parte della definizione della pagina serve a stabilire uno spostamento di questa sulla superficie del foglio finale che si vuole ottenere. I due numeri indicano uno spostamento orizzontale e verticale. L'unità di misura predefinita è il punto tipografico, ma può essere specificata un'unità di misura più conveniente: cm per i centimetri e in per i pollici. I valori sono sempre positivi, ma per sapere l'effetto che questi hanno (per determinare se lo spostamento è verso destra o sinistra, oppure in alto o in basso) occorre provare necessariamente, perché tutto dipende dal tipo di rotazione che si stabilisce. In ogni caso, se si ruotano le pagine è indispensabile spostarle, altrimenti queste risultano collocate fuori dalla superficie finale.

Per mettere assieme più pagine su uno stesso foglio, si usa il simbolo + per unirne le specifiche; per indicare le pagine da collocare su facciate finali successive, si usa una virgola (,) per unire assieme tali indicazioni.

A titolo di esempio, si osservi la definizione seguente con la quale si vogliono stampare due pagine A4, riducendole, su un'unica facciata A4.

2:0L@0.7(21cm,0)+1L@0.7(21cm,14.85cm)

Il numero due iniziale è il modulo di due pagine. Segue la definizione della prima pagina di questo raggruppamento, con il numero zero, che viene ruotata di 90 gradi in senso antiorario (verso sinistra), viene ridotta al 70 % e viene anche spostata in orizzontale di 21 cm. La seconda pagina relativa (con il numero uno) viene collocata nella stessa facciata finale, perché è unita attraverso il simbolo +. La seconda pagina viene ruotata anch'essa di 90 gradi in senso antiorario, è ridotta nello stesso modo e viene spostata orizzontalmente come la prima, ma anche verticalmente di 14,85 cm. Il risultato che si ottiene è una pagina A4 che deve essere rovesciata in senso orario per poter leggere le due pagine ridotte.

4:3L@0.7(21cm,0)+0L@0.7(21cm,14.85cm),1R@0.7(0,29.75cm)+2R@0.7(0,14.85cm)

Questo nuovo esempio, simile al precedente, mostra la generazione di due facciate finali, in pratica un fronte-retro, dove nella prima si inseriscono le riduzioni della prima e della quarta pagina di un raggruppamento di quattro (4-1), mentre nella seconda facciata finale si inseriscono le riduzioni della seconda e della terza pagina del raggruppamento (2-3). Nella prima facciata, le pagine ridotte sono orientate verso sinistra, nella seconda sono orientate verso destra. In pratica, si ottiene una sequenza 4-1+2-3, orientata in modo da essere stampata correttamente con una stampante duplex.

Sono disponibili le opzioni -w, -h, -p e -q, come descritto nella tabella 26.28, a cui si aggiunge in particolare l'opzione -d:

Opzione Descrizione
-d[spessore]
Con questa opzione si ottiene una cornice attorno alle pagine, con lo spessore indicato dall'argomento (in mancanza dell'unità di misura, si intendono punti tipografici). Se lo spessore non viene specificato, si ottiene una linea di un punto.

26.2.2.6   Esempi particolari

I programmi del pacchetto PSUtils sono potentissimi, ma anche complicati da usare. Alcuni esempi per comprendere come combinarli assieme dovrebbe essere di aiuto.

Molti degli esempi mostrati sono realizzati con comandi piuttosto lunghi. Qui vengono mostrati spezzati su più righe.

Gli esempi successivi sono fatti per ottenere file PostScript adatti alla stampa su una sola facciata alla volta.

Gli esempi che seguono sono fatti per ottenere file PostScript adatti alle stampanti duplex, che però possono essere utilizzati anche con stampanti normali, ruotando opportunamente i fogli prima di reimmetterli nella stampante. Si veda la figura 26.25.

26.2.3   Problemi di allineamento della stampa

Quando si gestisce un sistema di stampa basato sui filtri, partendo da un formato uniforme PostScript, che poi viene convertito nel modo più adatto alla propria stampante, manca la possibilità di intervenire nella regolazione fine di questa, al contrario di ciò che si può fare di solito con alcuni sistemi operativi proprietari. Il problema più grosso sta nella correzione degli errori di allineamento che potrebbero essere introdotti dalla stampante, spesso a causa dall'incapacità di stampare al di fuori di un certo margine minimo. Il testo seguente è un file PostScript, in formato A4, che serve a stampare quattro linee (una verticale, una orizzontale e due oblique), assieme alle informazioni sulla distanza dai bordi, che permettono di vedere dove si trova il centro della pagina (una copia di questo file dovrebbe essere disponibile anche qui: allegati/test-allineamento-carta.ps).

%!PS-Adobe-2.0
%%DocumentPaperSizes: a4
%%EndComments
%%EndProlog

%%Page: 1 1

% Verifica dell'allineamento della stampante per la carta
% A4.

% Definizione dell'unità «cm».
/cm { 28.34645 mul } bind def

% Definizione dell'utilizzo dell'unità «cm».
1 cm dup scale

% Spessore delle linee (1/50 di cm, pari a 0,2 mm).
1 50 div setlinewidth

% Traccia una linea obliqua ascendente.
0      0    moveto      21    29.7  lineto stroke

% Traccia una linea obliqua discendente.
0     29.7  moveto      21     0    lineto stroke

% Traccia una linea verticale al centro.
10.5  29.7  moveto      10.5   0    lineto stroke

% Traccia una linea orizzontale al centro.
0     14.85 moveto      21    14.85 lineto stroke

% Misurazione del bordo superiore.
10.25  29.60  moveto  10.75  29.60  lineto stroke
10.25  29.50  moveto  10.75  29.50  lineto stroke
10.25  29.40  moveto  10.75  29.40  lineto stroke
10.25  29.30  moveto  10.75  29.30  lineto stroke
10.00  29.20  moveto  11.00  29.20  lineto stroke
10.25  29.10  moveto  10.75  29.10  lineto stroke
10.25  29.00  moveto  10.75  29.00  lineto stroke
10.25  28.90  moveto  10.75  28.90  lineto stroke
10.25  28.80  moveto  10.75  28.80  lineto stroke
10.00  28.70  moveto  11.00  28.70  lineto stroke
10.25  28.60  moveto  10.75  28.60  lineto stroke
10.25  28.50  moveto  10.75  28.50  lineto stroke
10.25  28.40  moveto  10.75  28.40  lineto stroke
10.25  28.30  moveto  10.75  28.30  lineto stroke
10.00  28.20  moveto  11.00  28.20  lineto stroke

/Helvetica findfont 00.30 scalefont setfont
11.20  29.10  moveto (0,5 cm) show
11.20  28.60  moveto (1,0 cm) show
11.20  28.10  moveto (1,5 cm) show

% Misurazione del bordo inferiore.
10.25  00.10  moveto  10.75  00.10  lineto stroke
10.25  00.20  moveto  10.75  00.20  lineto stroke
10.25  00.30  moveto  10.75  00.30  lineto stroke
10.25  00.40  moveto  10.75  00.40  lineto stroke
10.00  00.50  moveto  11.00  00.50  lineto stroke
10.25  00.60  moveto  10.75  00.60  lineto stroke
10.25  00.70  moveto  10.75  00.70  lineto stroke
10.25  00.80  moveto  10.75  00.80  lineto stroke
10.25  00.90  moveto  10.75  00.90  lineto stroke
10.00  01.00  moveto  11.00  01.00  lineto stroke
10.25  01.10  moveto  10.75  01.10  lineto stroke
10.25  01.20  moveto  10.75  01.20  lineto stroke
10.25  01.30  moveto  10.75  01.30  lineto stroke
10.25  01.40  moveto  10.75  01.40  lineto stroke
10.00  01.50  moveto  11.00  01.50  lineto stroke

/Helvetica findfont 00.30 scalefont setfont
11.20  00.30  moveto (0,5 cm) show
11.20  00.80  moveto (1,0 cm) show
11.20  01.30  moveto (1,5 cm) show

% Misurazione del bordo sinistro.
00.10  14.60  moveto  00.10  15.10  lineto stroke
00.20  14.60  moveto  00.20  15.10  lineto stroke
00.30  14.60  moveto  00.30  15.10  lineto stroke
00.40  14.60  moveto  00.40  15.10  lineto stroke
00.50  14.35  moveto  00.50  15.35  lineto stroke
00.60  14.60  moveto  00.60  15.10  lineto stroke
00.70  14.60  moveto  00.70  15.10  lineto stroke
00.80  14.60  moveto  00.80  15.10  lineto stroke
00.90  14.60  moveto  00.90  15.10  lineto stroke
01.00  14.35  moveto  01.00  15.35  lineto stroke
01.10  14.60  moveto  01.10  15.10  lineto stroke
01.20  14.60  moveto  01.20  15.10  lineto stroke
01.30  14.60  moveto  01.30  15.10  lineto stroke
01.40  14.60  moveto  01.40  15.10  lineto stroke
01.50  14.35  moveto  01.50  15.35  lineto stroke

/Helvetica findfont 00.30 scalefont setfont
01.30  15.50  moveto (1,5 cm) show

% Misurazione del bordo destro.
20.90  14.60  moveto  20.90  15.10  lineto stroke
20.80  14.60  moveto  20.80  15.10  lineto stroke
20.70  14.60  moveto  20.70  15.10  lineto stroke
20.60  14.60  moveto  20.60  15.10  lineto stroke
20.50  14.35  moveto  20.50  15.35  lineto stroke
20.40  14.60  moveto  20.40  15.10  lineto stroke
20.30  14.60  moveto  20.30  15.10  lineto stroke
20.20  14.60  moveto  20.20  15.10  lineto stroke
20.10  14.60  moveto  20.10  15.10  lineto stroke
20.00  14.35  moveto  20.00  15.35  lineto stroke
19.90  14.60  moveto  19.90  15.10  lineto stroke
19.80  14.60  moveto  19.80  15.10  lineto stroke
19.70  14.60  moveto  19.70  15.10  lineto stroke
19.60  14.60  moveto  19.60  15.10  lineto stroke
19.50  14.35  moveto  19.50  15.35  lineto stroke

/Helvetica findfont 00.30 scalefont setfont
19.30  15.50  moveto (1,5 cm) show

showpage
%%Trailer
%%EOF

Teoricamente, ciò che si dovrebbe ottenere è quanto appare nella figura 26.36; in pratica, inviando questo file al sistema di stampa, che si presume sia predisposto con un filtro basato su Ghostscript, si potrebbe osservare un risultato simile a quello mostrato nella figura 26.36, in cui si ipotizza uno sfasamento verso destra di 1 cm e in basso di 0,8 cm.

Figura 26.36. Risultato ipotetico della stampa per la verifica dell'allineamento: la stampa risulta più bassa di 0,8 cm e più a destra di 1 cm.

stampa allineamento test

Per misurare lo scostamento della stampa rispetto alla carta, sono disponibili dei riferimenti su ogni bordo; in alternativa si piega il foglio in quattro e si vede dove sta il centro. Nel caso dell'esempio, il centro è più a destra e più in basso, delle misure che sono state indicate. Per risolvere il problema, si può inserire un'elaborazione ulteriore nei filtri di stampa, attraverso l'aiuto di pstops.

Il file per la verifica dell'allineamento, così come è stato proposto, può essere riallineato dai programmi di PSUtils, verificando così il risultato degli spostamenti che vengono introdotti. Se questo non è desiderabile, per evitare che l'immagine sia riallineabile, occorre eliminare i commenti iniziali:

%%DocumentPaperSizes: a4
%%EndComments
%%EndProlog

%%Page: 1 1

In tal caso può essere eliminato anche il commento finale:

%%Trailer

Seguendo i valori dell'esempio, si può utilizzare pstops nel modo seguente, tenendo conto che il file deve essere fornito attraverso lo standard input, mentre il risultato si ottiene dallo standard output:

/usr/bin/pstops -q "1:0@1.0(-0.5cm,1cm)"

Per pstops: uno spostamento a destra è positivo; uno spostamento a sinistra è negativo; uno spostamento in basso è negativo; uno spostamento in alto è positivo. Questo serve a chiarire gli argomenti indicati nell'esempio

Per fare un esempio più realistico, nel caso si utilizzi Magicfilter, considerato che di solito le direttive per i file PostScript sono simili a quella che si vede qui,

0       %!              filter  \
    /usr/bin/gs  -q -dSAFER -dNOPAUSE -r300 \
                 -sDEVICE=ljet4 -sOutputFile=- -

è sufficiente aggiungere pstops alla catena:

0       %!              filter                          \
    /usr/bin/pstops -q "1:0@1.0(-0.5cm,1cm)"            \
    | /usr/bin/gs  -q -dSAFER -dNOPAUSE -r300           \
                   -sDEVICE=ljet4 -sOutputFile=- -

In alternativa al file PostScript che genera il risultato che si vede nella figura 26.36, potrebbe essere utile un modello quadrettato, che si può ottenere con il codice contenuto in questo file: allegati/test-carta-quadrettata.ps.

I quadretti che si vogliono ottenere sono esattamente di 5 mm di lato e il risultato che si può avere con una stampante perfetta è praticamente quello che si vede in piccolo nella figura successiva.

Figura 26.42. Foglio quadrettato su carta A4.

foglio quadrettato

26.3   DVI

A fianco del formato PostScript per i documenti finali, pronti per la stampa, ne esiste un altro: DVI, il cui nome sta per Device indipendent. Il file DVI, come nel caso di quello PostScript, contiene tutte le informazioni necessarie a descrivere il risultato finale stampato, anche se non esistono stampanti DVI. Si tratta quindi di un formato intermedio che, per essere stampato, richiede un'elaborazione successiva. I file DVI derivano principalmente da elaborazioni con il sistema di composizione TeX, con il quale sono distribuiti generalmente anche gli strumenti adatti a gestire tale formato.

Di solito, l'uso degli strumenti riferiti al formato DVI si limita a Dvips che converte file DVI in PostScript. Tuttavia sono disponibili anche altri strumenti che permettono di arrivare a un risultato stampato senza passare per il PostScript; si tratta in particolare di Dvilj per la generazione di un formato HP PCL (HP printer control language), adatto alle stampanti compatibili HP Laserjet.(10)

In pratica, la gestione dei file DVI è basata, di fatto, sulla conversione in PostScript attraverso Dvips e sulla rielaborazione successiva dei file PostScript attraverso altri strumenti.

26.3.1   Dvips

Dvips(11) è un programma fondamentale per chi utilizza il sistema di composizione TeX (capitolo 49), proprio per la sua abilità nel convertire file DVI in PostScript. Anche se il suo funzionamento è apparentemente molto semplice, si tratta di un programma complesso, pieno di dettagli che in circostanze particolari possono diventare molto utili. Qui si cerca di puntare l'attenzione sulle funzionalità usate più di frequente.

Dvips utilizza la libreria Kpathsea, attraverso la quale è in grado di rigenerare rapidamente i caratteri necessari che non dovessero essere già stati preparati in precedenza (naturalmente devono essere presenti le informazioni per generare tali caratteri).

Considerato che il formato PostScript è diventato lo standard di fatto per le code di stampa, Dvips tende anche a essere visto come un comando di stampa speciale per il formato DVI. Infatti, come viene mostrato meglio dalla descrizione della sua configurazione, se si utilizza nel modo più naturale, come nell'esempio seguente, si ottiene la trasformazione del file DVI indicato nella riga di comando in formato PostScript e l'invio di questa trasformazione direttamente alla coda di stampa predefinita:

dvips pippo.dvi[Invio]

La documentazione di Dvips è molto buona, ma usa delle convenzioni particolari, per cui il lettore casuale potrebbe fraintendere o restare confuso. In particolare, nella descrizione delle opzioni della riga di comando e delle direttive di configurazione, si usa l'asterisco per indicare la possibilità di aggiungere un argomento booleano, che però in generale non serve e di conseguenza non si usa.

26.3.1.1   Configurazione di Dvips

I file di configurazione di Dvips si trovano generalmente nella directory texmf/dvips/config/, cosa che potrebbe tradursi in pratica in /usr/share/texmf/dvips/config/ o altra collocazione simile. In pratica, se la gerarchia del file system è quella standard, questo potrebbe essere un collegamento simbolico alla directory reale /etc/texmf/dvips/.

Il file di configurazione generale è denominato config.ps, mentre è possibile affiancare a questo altri file simili che vengono presi in considerazione sono per l'invio a code di stampa particolari, attraverso l'opzione -P. Questi file aggiuntivi si distinguono in base all'estensione: config.coda_di_stampa. Il senso di questi file di configurazione aggiuntivi si dovrebbe chiarire con la descrizione della direttiva o del file di configurazione.

Se si osserva la directory di configurazione di Dvips si possono notare altri file, dei quali si può anche intuire lo scopo. Tuttavia, in condizioni normali non è il caso di intervenire sulla loro configurazione.

Naturalmente, oltre ai file di configurazione che riguardano il sistema, ogni utente può aggiungere un proprio file personale: ~/.dvipsrc.

I file di configurazione di Dvips sono file di testo normali, in cui, tutto ciò che inizia con il simbolo di percentuale (%) viene ignorato, assieme alle righe bianche e a quelle vuote. Tutte le altre righe sono da considerarsi direttive di configurazione.

Le direttive hanno un aspetto molto simile alle opzioni della riga di comando dell'eseguibile dvips, alle quali viene tolto il trattino iniziale. Tuttavia non bisogna generalizzare, perché non tutto è perfettamente identico.

Tabella 26.43. Alcune direttive.

Direttiva Descrizione
o file
o |comando

Questa direttiva (una lettera «o» minuscola) consente di definire il file predefinito o il condotto predefinito a cui inviare il risultato della conversione. Generalmente il file di configurazione complessivo contiene la direttiva seguente:

o |lpr

In questo senso, un file di configurazione specifico per la coda di stampa pippo potrebbe contenere invece la direttiva seguente:

o |lpr -Ppippo

Si osservi che questo modo di definire il flusso di uscita dell'elaborazione di Dvips è una consuetudine, non una necessità. Tuttavia è bene mantenere tali queste particolarità, perché sono quelle che tutti si aspettano.

O scostamento_orizzontale,\
  \scostamento_verticale
Questa direttiva (lettera «O» maiuscola), consente di riallineare le pagine attraverso la definizione di uno scostamento orizzontale e verticale. Si tratta di indicare due numeri seguiti dall'unità di misura. Dei valori positivi indicano rispettivamente uno spostamento a destra e in basso, mentre dei valori negativi indicano uno spostamento opposto.
Nel file di configurazione generale è bene annotare una direttiva neutra, del tipo O 0cm,0cm, mentre nei file di configurazione specifici per una particolare coda di stampa, si potrebbero specificare dei valori adeguati (a meno che la coda di stampa non sia già organizzata per correggere i difetti di allineamento eventuali della stampante, come descritto nella sezione 26.2.3).
K
Questa direttiva rappresenta l'attivazione di un'opzione, attraverso la quale si ottiene l'eliminazione dei commenti dal risultato PostScript, cosa che si può rendere necessaria quando i programmi di rielaborazione di tale formato hanno delle difficoltà che alle volte sembrano inspiegabili.
q|Q
Questa direttiva rappresenta l'attivazione di un'opzione, attraverso la quale si ottiene l'eliminazione dell'emissione delle informazioni che non rappresentano errori di qualche tipo.
r
Questa direttiva rappresenta l'attivazione di un'opzione, attraverso la quale si ottiene l'inversione dell'ordine delle pagine.
D n
X n
Y n
Il numero posto alla destra rappresenta la risoluzione. Nel caso della direttiva D si tratta simultaneamente di quella orizzontale e di quella verticale, mentre nel caso di X si tratta solo di quella orizzontale e nel caso di Y si tratta solo di quella verticale. Il valore è espresso in millesimi (n / 1 000). Si deve indicare un valore che va da un minimo di 10 a un massimo di 10 000. Non deve essere necessariamente un numero intero.
t formato
Questa direttiva permette di definire il formato finale del documento PostScript. Se non viene specificato, si intende il formato predefinito che generalmente corrisponde a letter. Generalmente possono essere utilizzati i nomi di formato seguenti: letter, legal, ledger, a4, a3.
m memoria_disponibile

La stampante PostScript, oppure il programma di conversione che elabora questo formato, potrebbe avere una limitazione nella memoria. Questo potrebbe impedire alla stampante o al programma di gestire correttamente un file troppo complesso. Questa direttiva consente di specificare l'ammontare massimo della memoria, in modo da prendere provvedimenti adeguati al riguardo. Per conosce il valore di questa memoria, basta realizzare un file PostScript fittizio contenente il codice seguente:

%!
/Times-Roman findfont 30 scalefont setfont \
  \144 432 moveto
vmstatus exch sub 40 string cvs \
  \show pop showpage

È probabile che il valore che appare sia abbastanza inferiore a quanto indicato in modo predefinito nel file di configurazione standard. In questo senso, dovrebbe essere opportuno aggiornare tale indicazione.

Viene mostrato brevemente un file di configurazione tipico.

% Ammontare della memoria disponibile.
m 1048576

% Il risultato della conversione in PostScript viene inviato alla stampa.
o |lpr

% Risoluzioni predefinite per la stampante.
D 600
X 600
Y 600

% Correzione dell'allineamento della stampa.
O 0pt,0pt

Naturalmente, il file di configurazione predefinito potrebbe contenere anche molte altre direttive, che in generale non conviene modificare se non si comprende il loro significato.

26.3.1.2   Riga di comando di Dvips

Il programma dvips elabora il file DVI fornito come argomento e ne genera un altro in PostScript. Se non viene indicato qualcosa di diverso attraverso le opzioni, il risultato viene inviato come previsto nel file di configurazione e solitamente si tratta della coda di stampa predefinita. Il nome del file DVI può essere indicato completo o sprovvisto dell'estensione: .dvi.

dvips [opzioni] [file_dvi]

Tabella 26.45. Alcune opzioni.

Opzione Descrizione
-D n
-X n
-Y n
Queste opzioni permettono di indicare esplicitamente la risoluzione, sostituendosi alle direttive equivalenti del file di configurazione: D, X e Y.
Questa indicazione ha rilevanza nella scelta dei tipi di carattere da usare per la composizione del file PostScript e per la loro spaziatura. Il numero può avere un valore minimo di 10 e massimo di 10 000, riferendosi all'unità di misura dpi (Dot per inch). Generalmente questa opzione non viene indicata e si utilizza la configurazione che frequentemente richiede 600 dpi.
-q
Utilizzando questa opzione, si fa in modo che l'elaborazione non generi segnalazioni, tranne gli errori, come già fa la direttiva q nel file di configurazione.
-o file_ps
Permette di specificare un file di destinazione del risultato della trasformazione, oppure un comando che deve ricevere il risultato attraverso lo standard input. Dal momento che la configurazione normale convoglia il risultato nella coda di stampa, diventa necessario l'uso di questa opzione per generare un file separato. Un comando viene riconosciuto come tale se inizia con il simbolo |, ma si può anche realizzare un condotto vero e proprio indicando il trattino (-) al posto del nome del file.
-t formato
Questa opzione permette di definire il formato finale del documento PostScript. Se non viene specificato, si intende automaticamente il formato predefinito o quello fissato nella configurazione. Spesso il formato predefinito è letter, per cui, negli script è importante ricordarsi di utilizzare questa opzione per non avere poi brutte sorprese. Si utilizzano gli stessi nomi di formato relativi alla direttiva t del file di configurazione.
Questa stessa opzione può essere usata per specificare un formato orizzontale, landscape, eventualmente anche utilizzandola due volte (la prima per indicare il formato della carta, la seconda per aggiungere che deve essere intesa come orizzontale).
-K
Questa opzione, come la stessa direttiva K, serve a ottenere l'eliminazione dei commenti dal risultato PostScript, cosa che si può rendere necessaria quando i programmi di rielaborazione di tale formato hanno delle difficoltà che alle volte sembrano inspiegabili.
-V
-V0
Attiva o disattiva l'inserimento delle informazioni sui caratteri tipografici che potrebbero non essere disponibili nel momento in cui si va a visualizzare il documento. In pratica, l'utilizzo di questa opzione (-V), dovrebbe facilitare la riproducibilità del contenuto del file.

Segue la descrizione di alcuni esempi.

26.3.2   Dvipdfm

Dvipdfm(12) è un programma funzionalmente analogo a Dvips, con la differenza che genera file PDF a partire dal formato DVI. In condizioni normali, è sufficiente un utilizzo elementare, simile all'esempio seguente:

dvipdfm prova.dvi[Invio]

In questo caso, si ottiene il file prova.pdf, senza nemmeno la necessità di specificarlo. In pratica, a differenza di Dvips, il risultato viene salvato in un file, in modo predefinito.

Come si comprende dall'esempio, Dvipdfm è costituito in pratica dall'eseguibile dvipdfm, che si usa sinteticamente secondo la sintassi seguente:

dvipdfm [opzioni] file_dvi

In pratica, il nome del file PDF viene determinato in modo predefinito, aggiungendo l'estensione .pdf, o sostituendola all'estensione .dvi del file di partenza. In alternativa, si può specificare un nome differente con l'uso di un'opzione apposita. La tabella 26.46 riepiloga le opzioni di uso più comune.

Tabella 26.46. Alcune opzioni di dvipdfm.

Opzione Descrizione
-c
Non prende in considerazione i colori nella conversione.
-m n
Definisce un rapporto di ingrandimento del documento, pari a n.
-o file_pdf
Definisce il nome del file PDF da creare.
-p {letter|legal\
  \  |ledger\
  \  |tabloid|a4|a3}
Definisce il formato finale del file PDF che si vuole ottenere.
-l
Nel caso sia stata specificata l'opzione -p, consente di indicare un orientamento orizzontale.
-s pag_iniziale-pag_finale\
  \[,pag_iniziale-pag_finale]...
Consente di selezionare uno o più intervalli di pagine.
-x scostamento_orizzontale
-y scostamento_verticale
Consentono di definire lo scostamento orizzontale e verticale. Il valore predefinito corrisponde a 1.0in, ovvero un pollice.
-z n
Consentono di definire il livello di compressione, con un numero da uno a nove. Il valore predefinito è nove, corrispondente alla compressione massima.
-v
Mostra più informazioni durante la conversione.
-vv
Mostra molte informazioni in più durante la conversione.

26.3.3   Anteprima di stampa

Anche per il formato DVI esistono strumenti per la visualizzazione in anteprima; ma in generale, tali programmi hanno tutti qualche pecca, per un verso o per l'altro, a cominciare dalle immagini PostScript incluse che non vengono visualizzate nell'anteprima. Nelle figure successive si mostrano solo due esempi di tali programmi.

xdvi [opzioni] [file_dvi]
tkdvi [opzioni] file

Figura 26.47. Xdvi.(13)

xdvi

Figura 26.48. TkDVI.(14)

tkdvi

26.3.4   Dvilj

Dvilj(15) è un pacchetto di programmi in grado di convertire un file DVI direttamente in formato PCL, quello usato dalle stampanti HP Laserjet.

I programmi in questione sono differenti dal momento che esistono diverse varianti nel linguaggio in base alle caratteristiche delle stampanti stesse. Per la precisione, si distingue tra:

La sintassi per l'utilizzo di questi programmi è la stessa, a parte il nome:

dvilj [opzioni] file_dvi
dvilj2p [opzioni] file_dvi
dvilj4 [opzioni] file_dvi
dvilj4l [opzioni] file_dvi

Si può osservare che non si prevede l'indicazione del file generato dall'elaborazione come argomento finale. Infatti, in condizioni normali, questo file viene creato in modo predefinito, utilizzando lo stesso nome di quello corrispondente del file DVI, dove al posto dell'ultima estensione si utilizza .lj; in alternativa può essere indicato attraverso un'opzione apposita.

Per esempio, il comando seguente dovrebbe generare il file pippo.lj:

dvilj4l pippo.dvi[Invio]

I programmi di Dvilj non sono in grado di gestire i «caratteri virtuali», cosa che richiede generalmente una pre-elaborazione del file DVI attraverso il programma dvicopy, praticamente nel modo seguente:

dvicopy pippo.dvi pippo.2.dvi[Invio]

dvilj4l pippo.2.dvi[Invio]

La tabella 26.49 riassume le opzioni di questi programmi che compongono il blocco di Dvilj.

Tabella 26.49. Opzioni della riga di comando dei programmi di Dvilj.

Opzione Descrizione
-cn
Stampa ogni pagina n volte.
-D1
Stampa solo le pagine dispari (destre).
-D2
Stampa solo le pagine pari (sinistre).
-efile
Crea il file indicato invece di quello predefinito.
-e-
Emette il risultato attraverso lo standard output.
-fn
Stampa a partire dalla pagina n.
-tn
Stampa fino alla pagina n.
-pn
Stampa solo n pagine.
-m#n
Ridimensiona in rapporto di n / 1 000.
-m0
Ridimensiona a 1 000 / 1 000.
-mh
Ridimensiona a 1 095 / 1 000.
-m1
Ridimensiona a 1 200 / 1 000.
-mq
Ridimensiona a 1 250 / 1 000.
-m2
Ridimensiona a 1 440 / 1 000.
-m3
Ridimensiona a 1 728 / 1 000.
-m4
Ridimensiona a 2 074 / 1 000.
-m5
Ridimensiona a 2 488 / 1 000.
-r
Inverte l'ordine delle pagine.
-s1
Carta in formato «executive» (7,25 in × 10,5 in).
-s2
Carta in formato «lettera» (8,5 in × 11 in).
-s3
Carta in formato «legale» (8,5 in × 14 in).
-s26
Carta in formato A4.
-s80
Busta «monarch» (3,875 in × 7,5 in).
-s81
Busta «commercial-10» (4,125 in × 9,5 in).
-s90
Busta «DL» (110 mm × 220 mm).
-s91
Busta «C5» (162 mm × 229 mm).
-v
Mostra informazioni più dettagliate.
-VK
Compatibilità con stampanti Kyocera.
-VB
Compatibilità con stampanti Brother.
-V6
Compatibilità con stampanti HP Laserjet 6L.

I programmi di Dvilj possono funzionare anche come filtro. Per questo, se al posto del file in ingresso si indica un trattino (-), si intende indicare per questo lo standard input.

26.3.5   Programmi di servizio vari sul formato DVI

Il formato DVI non offre molti strumenti per la sua rielaborazione. Vale la pena di conoscere quel poco che c'è, tenendo conto però che a volte si tratta di script che compiono il loro lavoro attraverso una rielaborazione in PostScript.

Tra tutti questi programmi di servizio merita attenzione dvicopy, il quale si occupa di generare un nuovo file DVI nel quale siano contenuti solo riferimenti a caratteri standard. In pratica, vengono trasformati i riferimenti ai «caratteri virtuali» che possono creare problemi ad alcuni programmi che utilizzano il formato DVI.

26.3.5.1   Utilizzo di «dvicopy»

Il programma dvicopy (16) trasforma un file DVI in un altro che non contenga più riferimenti a caratteri virtuali:

dvicopy [opzioni] [file_dvi_ingresso [file_dvi_uscita]]

Come si può intuire dallo schema sintattico, quando non si indica il file DVI in uscita, il risultato dell'elaborazione viene emesso attraverso lo standard output; quando manca anche l'indicazione del file in ingresso, questo viene atteso dallo standard input.

Il programma dvicopy prevede l'uso eventuale di opzioni, che però non sono determinanti per il suo scopo fondamentale, per cui non vengono mostrate.

dvicopy pippo.dvi pippo.2.dvi[Invio]

L'esempio che si vede, serve semplicemente a generare il file pippo.2.dvi, a partire da pippo.dvi.

26.3.5.2   Utilizzo di «dviselect»

Il programma dviselect(17) permette di selezionare un gruppo di pagine da un file DVI, generando un altro file DVI contenente tale raccolta.

dviselect [opzioni] intervallo_pagine[,intervallo_pagine]... \
  \        [file_dvi_ingresso [file_dvi_uscita]]

Come avviene con dvicopy, quando non si indica il file DVI in uscita, il risultato dell'elaborazione viene emesso attraverso lo standard output; quando manca anche l'indicazione del file in ingresso, questo viene atteso dallo standard input. Tuttavia, in aggiunta, si possono usare delle opzioni particolari per indicare espressamente quale file è in ingresso e quale è in uscita.

Dal momento che le opzioni non sono determinanti per il funzionamento di dviselect, queste non vengono mostrate; piuttosto, è necessario descrivere come si indicano gli intervalli di pagine:

dviselect 20:30,60:70 pippo.dvi pippo.2.dvi[Invio]

L'esempio mostra la creazione del file pippo.2.dvi a partire da pippo.dvi, selezionando solo le pagine da 20 a 30 e da 60 a 70.

26.3.5.3   Utilizzo di «dvidvi»

Il programma dvidvi(18) permette di selezionare un gruppo di pagine da un file DVI, generando un altro file DVI contenente tale raccolta.

dvidvi [opzioni] file_dvi_ingresso file_dvi_uscita

dvidvi consente anche di raggruppare assieme più pagine logiche in una sola pagina fisica, attraverso l'opzione speciale -m, come possono fare le PSUtils con i file PostScript. Tuttavia, tale funzionalità è incompleta, perché manca la possibilità di ridurre le dimensioni e di ruotare le pagine.

Tabella 26.50. Alcune opzioni.

Opzione Descrizione
-f n
Seleziona le pagine a partire dal numero indicato.
-l n
Seleziona le pagine fino al numero indicato.
-n n
Seleziona un numero massimo di n pagine.
-i {m..n|n}[,{m..n|n}]...
Questa opzione, consente di indicare una serie di intervalli di pagine da includere. Gli intervalli sono indicati separando le due estremità con due punti in orizzontale (..). Indicando un numero isolato, si fa riferimento esclusivamente alla pagina relativa.
-x {m..n|n}[,{m..n|n}]...
Questa opzione, consente di indicare una serie di intervalli di pagine da escludere da quanto già incluso. Funziona come l'opzione -i.
-r
Inverte l'ordine delle pagine.

Segue la descrizione di alcuni esempi.

26.3.5.4   Utilizzo di «dviconcat»

Il programma dviconcat(19) permette di unire assieme un gruppo di file DVI, generando un file DVI unico, contenente tale raccolta.

dviconcat [opzioni] file...

L'opzione più importante è -o file, che permette di indicare il nome del file che si vuole generare, a partire dall'unione di tutti i file indicati come argomento nella parte finale della riga di comando. In mancanza di tale opzione, il risultato viene emesso attraverso lo standard output.

dviconcat -o risultato.dvi primo.dvi secondo.dvi[Invio]

L'esempio mostra la creazione del file risultato.dvi a partire da primo.dvi e secondo.dvi.

26.3.5.5   Utilizzo di «dvi2fax»

In alcuni sistemi esiste il programma dvi2fax, (20) che in realtà è uno script che utilizza Dvips e Ghostscript per generare un file in formato FAX a partire da uno in DVI.

dvi2fax {-hi|-lo} file_dvi opzioni_per_dvips

Come si vede dalla sintassi, non viene indicato il nome del file finale, che in generale è lo stesso di quello di origine, con la variante dell'estensione che diventa .fax.

Per arrivare a questo risultato, lo script dvi2fax si avvale di Dvips con due configurazioni speciali a seconda della risoluzione del fax: config.dfaxlo e config.dfaxhigh. Dvips viene usato per generare un file PostScript con la risoluzione necessaria, mentre Ghostscript svolge il passaggio finale per trasformare il file PostScript in fax.

dvi2fax -hi pippo.dvi[Invio]

L'esempio mostra il caso tipico, in cui si vuole ottenere il file pippo.fax a partire dal file pippo.dvi. Come si può intuire, l'opzione -hi genera un file FAX ad alta risoluzione, mentre l'opzione opposta, -lo genererebbe un file a bassa risoluzione.

26.3.5.6   Utilizzo di «dvipng»

Il programma dvipng (21) permette di generare una serie di file in formato PNG, dalle pagine di un file DVI:

dvipng [opzioni] file_dvi[.dvi]

Se tra le opzioni della riga di comando non si specifica il nome o il modello del nome dei file da generare, si ottiene qualcosa che riprende la radice del nome del file DVI, seguita da un numero e dall'estensione (.png).

Tabella 26.51. Alcune opzioni.

Opzione Descrizione
-D n
Specifica la risoluzione (orizzontale e verticale) in punti per pollice.
-p [=]n
-l [=]n
Queste due opzioni consentono di selezionare l'intervallo di pagine desiderato. L'opzione -p indica la pagina iniziale, l'opzione -l (last) serve per indicare la pagina finale. Se si usa il segno = davanti al numero, si intende fare riferimento a numeri assoluti di pagina.
-pp m-n
Questa opzione consente di specificare un intervallo di pagine da generare e può essere usata anche più volte.
-o modello
Questa opzione (output) consente di specificare il modello da usare per i nomi dei file da creare. Nel modello, la sigla %d, oppure %03d, viene rimpiazzata con il numero della pagina (nel secondo caso è sempre di tre cifre).
-x n
Specifica il livello di ingrandimento o di riduzione, dove n rappresenta un valore in millesimi.

Segue la descrizione di alcuni esempi.

26.3.5.7   Utilizzo di «dvired»

Lo script dvired, (22) attraverso Dvips e PSUtils, genera una trasformazione in PostScript che poi viene trasformata in modo da ridurre il formato, ottenendo due pagine logiche in una singola pagina fisica.

dvired [-o file_ps_uscita | -P coda_di_stampa | -f] \
  \       [altre_opzioni_per_dvips] file

Come si può vedere dallo schema sintattico, attraverso le opzioni indicate è possibile decidere se il risultato finale, in PostScript, debba essere inviato a una coda di stampa, a un file, o debba essere emesso attraverso lo standard output. Se si indicano altre opzioni, queste vengono passate tali e quali a Dvips.

dvired pippo.dvi[Invio]

L'esempio mostra il caso più semplice, ma anche più logico, dal momento per situazioni più complesse conviene gestire direttamente Dvips e i programmi delle PSUtils. In pratica, se Dvips è configurato in modo standard, si ottiene la stampa del file pippo.dvi, dopo che questo è stato ridotto in modo da stampare due pagine logiche per una sola pagina reale.

26.4   PDF

Il formato PDF (Portable document format) è una derivazione del PostScript, con meno pretese del suo predecessore, ma con caratteristiche interessanti, quali la possibilità di inserire riferimenti ipertestuali e le anteprime delle pagine. Anche se il formato PDF perde alcune potenzialità di PostScript, le sue caratteristiche lo rendono più adatto alla pubblicazione di documenti, pronti per la stampa, attraverso Internet.

26.4.1   Xpdf

Teoricamente, lo stesso Ghostscript dovrebbe essere in grado di elaborare i file PDF, sia per convertire questi in PostScript, sia per fare l'operazione opposta (si veda la sezione 26.1.6); eventualmente, in caso di difficoltà, si può fare affidamento sui programmi del pacchetto Xpdf, composti essenzialmente da un visualizzatore in anteprima, accompagnato da un paio di programmi di conversione.

Il programma xpdf(23) si usa con l'ambiente grafico X ed è in grado di visualizzare il contenuto dei file in formato PDF. Può essere avviato semplicemente, senza indicare argomenti; in tal caso è possibile caricare un file PDF attraverso il menù che si ottiene premendo il terzo tasto del mouse. Se si indica un file nella riga di comando, questo viene aperto immediatamente; eventualmente può anche essere aggiunto un numero di pagina che rappresenta il punto da cui si vuole iniziare la visualizzazione.

xpdf [opzioni] [file_pdf [n_pagina|+destinazione]]

Figura 26.52. Il programma xpdf durante il funzionamento.

xpdf

La figura 26.52 mostra l'indice aperto sulla sinistra. Si osservi che non tutti i file PDF hanno un indice di questo tipo; a ogni modo, per aprire tale finestra, occorre «afferrare» il pulsantino quadrato che appare nella parte inferiore della linea di separazione e trascinarlo verso destra.

La stampa del file PDF può essere ottenuta selezionando il tasto che rappresenta la stampante. Il programma propone la scelta del programma di stampa o del file PostScript nel quale salvare le pagine desiderate.

Figura 26.53. La mascherina per il controllo della stampa.

xpdf stampa

Tabella 26.54. Alcune opzioni.

Opzione Descrizione
-rv
Inverte i colori delle pagine, escluse le immagini (non funziona con tutti i file PDF).
-fullscreen
Funziona a schermo intero.

Segue la descrizione di alcuni esempi.

Il funzionamento interattivo può essere controllato attraverso il mouse, oppure attraverso la tastiera, come descritto nella tabella successiva. La conoscenza dei comandi da tastiera è indispensabile per poter utilizzare il programma a schermo intero, perché in tal caso mancano i pulsanti grafici di controllo.

Tabella 26.55. Alcuni comandi per l'uso di xpdf.

Comando Alternativa Descrizione
[h] pulsante grafico con il punto interrogativo Visualizza una finestra contenente una guida rapida all'uso del programma (help).
[o] con il tasto destro del mouse si può selezionare la voce da un menù a scomparsa Apre un file (open).
[r] con il tasto destro del mouse si può selezionare la voce da un menù a scomparsa Riapre un file già aperto (reopen).
[f], [Ctrl f] pulsante grafico con il binocolo Cerca una stringa nel documento (find).
[Ctrl g] Cerca la corrispondenza successiva (go).
[Ctrl p] pulsante grafico con la stampante Stampa (print).
[Ctrl n] pulsante grafico con il simbolo > Passa alla pagina successiva (next).
[Ctrl p] pulsante grafico con il simbolo < Passa alla pagina precedente (previous).
[pagina-giù], [barra-spaziatrice] Scorre in avanti.
[pagina-su], [Backspace], [Canc] Scorre all'indietro.
tasti freccia Scorre lentamente nella direzione della freccia.
[Home] Scorre all'inizio della pagina attuale.
[End] Scorre alla fine della pagina attuale.
[v] pulsante grafico con il simbolo -> Scorre in avanti nello storico delle pagine già visitate.
[b] pulsante grafico con il simbolo -> Scorre all'indietro nello storico delle pagine già visitate.
[0], [+], [-] pulsante grafico del menù di controllo dell'ingrandimento Controlla l'ingrandimento: [0] riporta alla dimensione normale; i tasti [+] e [-] ingrandiscono e riducono rispettivamente.
[z], [w] pulsante grafico del menù di controllo dell'ingrandimento: fit page e fit width I due comandi servono rispettivamente per adattare l'ingrandimento in modo tale che si veda tutta la pagina, oppure che si veda tutta l'ampiezza della pagina.
[Ctrl-l] Ridisegna l'immagine.
[q] Conclude il funzionamento (quit).

Quando il puntatore grafico del mouse si trova nell'area che mostra la pagina, i tasti del mouse hanno funzioni speciali:

sinistro, trascinamento Il tasto sinistro consente di evidenziare una zona, attraverso il trascinamento, che può essere incollata in un altro programma (funziona solo per il testo).
sinistro, clic Un clic con il tasto sinistro consente di seguire un riferimento ipertestuale.
centrale, trascinamento Il tasto centrale, tenendolo premuto, consente di spostare la pagina nello spazio di visualizzazione della sua finestra.
destro, clic Un clic con il tasto destro mostra un menù a scomparsa, da cui è possibile accedere facilmente alle funzioni più importanti.

26.4.1.1   Utilizzo di «pdftops»

Il programma pdftops che fa parte del pacchetto di Xpdf, converte file dal formato PDF in PostScript. Se viene omessa l'indicazione del nome del file PostScript nella riga di comando, questo viene determinato sostituendo l'estensione .pdf con .ps.

pdftops [opzioni] file_pdf [file_ps]

Di solito esiste anche l'eseguibile pdf2ps che in realtà è solo uno script predisposto in modo da avviare opportunamente Ghostscript allo stesso scopo di convertire un file PDF in PostScript. È importante chiarire che non si tratta della stessa cosa e che, spesso, pdf2ps non funziona.

Tabella 26.57. Alcune opzioni.

Opzione Descrizione
-f n_pagina_iniziale
Permette di specificare il numero della pagina iniziale del gruppo da convertire.
-l n_pagina_finale
Permette di specificare il numero della pagina finale del gruppo da convertire.

Segue la descrizione di alcuni esempi.

26.4.1.2   Utilizzo di «pdftotext»

Il programma pdftotext che fa parte del pacchetto di Xpdf, converte file dal formato PDF in testo puro, con tutte le limitazioni che ciò significa. Se viene omessa l'indicazione del nome del file di testo nella riga di comando, questo viene determinato sostituendo l'estensione .pdf con .txt.

pdftotext [opzioni] file_pdf [file_txt]

Le opzioni già descritte a proposito di pdftops funzionano anche con questo programma. Naturalmente ne sono disponibili altre, come descritto nella documentazione pdftotext(1).

26.4.1.3   Utilizzo di «pdfimages»

Il programma pdfimages che fa parte del pacchetto di Xpdf, consente di estrarre da un file PDF le immagini contenute:

pdfimages [opzioni] file_pdf [radice_file_immagini]

In pratica, si indica il file da scandire e nell'ultimo argomento si mette la parte iniziale del nome dei file che si vogliono generare. Di solito si ottengono nomi del tipo radice-nnn.estensione:

pdfimages prova.pdf immagine[Invio]

L'esempio mostra la scansione del file prova.pdf, per estrarre le immagini, che vengono salvate in file con nomi che corrispondono al modello immagine-*.

Tabella 26.58. Alcune opzioni.

Opzione Descrizione
-f n_pagina_iniziale
Permette di specificare il numero della pagina iniziale del gruppo da scandire.
-l n_pagina_finale
Permette di specificare il numero della pagina finale del gruppo da scandire.

26.4.1.4   Utilizzo di «pdffonts»

Il programma pdffonts che fa parte del pacchetto di Xpdf, consente di conoscere quali tipi di carattere sono stati usati in un file PDF:

pdffonts [opzioni] file_pdf

Si potrebbe ottenere un listato simile a quello seguente:

name                           type    emb sub uni object ID
------------------------------ ------- --- --- --- ---------
Times-Roman                    Type 1  no  no  no      84  0
Times-Roman                    Type 1  no  no  no      83  0
Times-BoldItalic               Type 1  no  no  no      92  0
Times-Roman                    Type 1  no  no  no      88  0
Courier                        Type 1  no  no  no     128  0
Times-Bold                     Type 1  no  no  no     102  0
Times-Bold                     Type 1  no  no  no      99  0
...
GIRFAV+CMMI10                  Type 1C yes yes no     468  0
WETNRH+CMEX10                  Type 1C yes yes no     465  0
Courier-BoldOblique            Type 1  no  no  no     478  0
CSAMPF+CMMI10~1e4              Type 1C yes yes no     485  0
Times-Italic                   Type 1  no  no  no     486  0
Symbol                         Type 1  no  no  no     512  0
MGBIUX+CMR10~20e               Type 1C yes yes no     527  0
XQDQTR+CMSY10~215              Type 1C yes yes no     534  0
Courier-Bold                   Type 1  no  no  no     546  0
Times-Italic                   Type 1  no  no  no     551  0
Symbol                         Type 1  no  no  no     564  0
LFWIIS+TeX-cmex9               Type 1C yes yes no     571  0
IGXMIF+ZapfChancery-MediumItal Type 1C yes yes no     582  0
UUMAPZ+CMMI10~2c0              Type 1C yes yes no     705  0
Times-Italic                   Type 1  no  no  no     697  0
Times-Italic                   Type 1  no  no  no     696  0
Symbol                         Type 1  no  no  no     712  0
YKQLDT+TeX-cmex9~2b6           Type 1C yes yes no     695  0
VNVKKX+CMEX10~2c6              Type 1C yes yes no     711  0
JRRRBT+CMSY10~2c3              Type 1C yes yes no     708  0
Times-Roman                    Type 1  no  no  no     699  0
MYEVGY+CMR10~2bd               Type 1C yes yes no     702  0
Times-Roman                    Type 1  no  no  no     698  0
Symbol                         Type 1  no  no  no     721  0

Tabella 26.60. Alcune opzioni.

Opzione Descrizione
-f n_pagina_iniziale
Permette di specificare il numero della pagina iniziale del gruppo da scandire.
-l n_pagina_finale
Permette di specificare il numero della pagina finale del gruppo da scandire.

26.4.1.5   Utilizzo di «pdfinfo»

Il programma pdfinfo che fa parte del pacchetto di Xpdf, consente di conoscere le informazioni disponibili su di un PDF:

pdfinfo [opzioni] file_pdf

Si potrebbe ottenere un listato simile a quello seguente:

Title:          Editoria elettronica con Alml
Subject:        Dal foglio di carta alla realizzazione di \
  \un documento secondo Alml, con le \
  \note necessarie per scrivere in modo \
  \coerente rispetto all'opera \
  \«Appunti di informatica libera» Keywords: Alml, SGML, Linux, GNU/Linux, Unix, \
  \software, software libero Author: Daniele Giacomini appunti2@gmail.com Creator: LaTeX with hyperref package Producer: dvipdfm 0.13.2c, Copyright © 1998, by \
  \Mark A. Wicks CreationDate: Fri Apr 18 14:01:28 2003 Tagged: no Pages: 227 Encrypted: no Page size: 595 x 842 pts (A4) File size: 1643633 bytes Optimized: no PDF version: 1.2

Se con le opzioni si specifica un intervallo di pagine, si ottengono anche le misure delle varie pagine selezionate.

Tabella 26.62. Alcune opzioni.

Opzione Descrizione
-f n_pagina_iniziale
Permette di specificare il numero della pagina iniziale del gruppo da scandire.
-l n_pagina_finale
Permette di specificare il numero della pagina finale del gruppo da scandire.

26.4.2   Okular

Per la consultazione dei file PDF può risultare più comodo il programma Okular, con il quale è possibile visualizzare più pagine aperte simultaneamente ed è possibile fare delle annotazioni sul documento che appare. In ogni caso, tali annotazioni vanno poi salvate separatamente, dato che non è possibile modificare il file PDF con Okular.

Figura 26.63. Okular durante la visualizzazione di un file PDF, sul quale sono state fatte delle annotazioni. Per salvare le annotazioni occorre utilizzare la funzione che si vede nel menù aperto: in tal modo si ottiene un pacchetto compresso contenente il file PDF originale e un file con le annotazioni; questo pacchetto può essere poi aperto con Okular stesso.

Okular

26.4.3   Modifica di file PDF

Ci può essere la necessità di modificare un file PDF, per esempio quando questo file costituisce un formulario da inviare compilato a qualche ufficio. Per poter modificare realmente un file PDF si può utilizzare il programma PDFedit(24). Il suo utilizzo non è molto intuitivo, almeno le prime volte; pertanto, in questo video si possono vedere le attività principali che potrebbero essere svolte, corrispondenti allo spostamento e alla cancellazione di componenti, oltre all'aggiunta di testo: ogv http://www.youtube.com/watch?v=mfW6qgusNUg. Si osservi che per cancellare un componente, come si vede nel video, basta premere il tasto [Canc] una volta che questo è stato selezionato.

Figura 26.64. Immagine tratta dal video ogv http://www.youtube.com/watch?v=mfW6qgusNUg, in cui si vede la modifica del testo della data, della pagina visualizzata.

PDFedit: modifica del testo

Altri programmi affini.

Xournal(25) Consente di caricare un file PDF e farvi delle annotazioni, costituite da testo e disegni. Il risultato della modifica può essere annotato separatamente dal file PDF, oppure si può produrre un nuovo file PDF che includa le modifiche.

26.4.4   Filtro di stampa

Un filtro in grado di convertire un file PDF allo scopo di inviarlo alla stampa, dovrebbe passare per la conversione in PostScript. Il programma migliore per questo dovrebbe essere pdftops, del pacchetto Xpdf, come già indicato.

Nella realizzazione di uno script del genere, occorre tenere presente che pdftops ha bisogno di accedere al file PDF in modo non sequenziale (e lo stesso varrebbe comunque anche per Ghostscript), per cui questo non può essere fornito attraverso lo standard input. Quello che segue è uno script che cerca di ovviare all'inconveniente:

#!/bin/sh
# Definisce il nome di un file temporaneo.
FILE_PDF=`tempfile`
# Trasferisce lo standard input nel file temporaneo.
cat > $FILE_PDF
# Trasforma il file PDF in PostScript, emettendo il
# risultato attraverso lo standard output.
/usr/bin/pdftops $FILE_PDF -

Volendo intervenire nella configurazione di Magicfilter, si può sostituire la direttiva riferita al formato PDF, che di solito fa uso di Ghostscript come si vede qui:

# PDF
0       %PDF    fpipe   \
                /usr/bin/gs -q -dSAFER -dNOPAUSE -r600 \
                            -sDEVICE=ljet4 \
                            -sOutputFile=- $FILE

Questa potrebbe essere modificata in modo che utilizzi pdftops:

# PDF
0       %PDF    fpipe   /usr/bin/pdftops $FILE -

26.5   Riferimenti


1) Esistono due filoni nello sviluppo di Ghostscript; solo quello contrassegnato dalla sigla «GNU» è rilasciato con la licenza GNU GPL, mentre l'altro non è propriamente software libero.

2) Ghostscript   GNU GPL

3) HPIJS   GNU GPL, BSD e MIT

4) Ghostview   GNU GPL

5) GV   GNU GPL

6) Okular   GNU GPL

7) Pstoedit   GNU GPL

8) Ci possono essere difficoltà nella conversione a partire dal formato PDF, ma in tal caso è sufficiente convertirlo prima in PostScript.

9) PSUtils   licenza speciale formulata in modo poco preciso

10) Alcune distribuzioni GNU comuni non includono tutto il necessario per arrivare al risultato finale della stampa attraverso i programmi del pacchetto Dvilj.

11) Dvips   GNU GPL

12) Dvipdfm   GNU GPL

13) Xdvi   MIT

14) TkDVI   software libero con licenza speciale

15) Dvilj   GNU GPL

16) dvicopy   GNU GPL

17) dviselect   licenza speciale

18) dvidvi   GNU GPL

19) dviconcat   licenza speciale

20) dvi2fax   dominio pubblico

21) dvipng   GNU GPL

22) dvired   GNU GPL

23) Xpdf   GNU GPL

24) PDFedit   GNU GPL

25) Xournal   GNU GPL

«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net