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.
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. |
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.
|
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.
|
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:
|
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.
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.
|
|
|
|
|
Segue la descrizione di alcuni esempi.
$
gs -dNOPAUSE -q -sDEVICE=cdjmono -sOutputFile=-
\
\ esempio.ps < /dev/null | lpr
[Invio]
Invia al sistema di stampa (tramite lpr) il documento esempio.ps
dopo la trasformazione nel formato compatibile con le stampanti HP Deskjet.
$
gs -dNOPAUSE -q -sDEVICE=cdjmono
\
\ -sOutputFile=pagina%0004d esempio.ps < /dev/null
[Invio]
Genera una serie di file, a partire dal documento esempio.ps
, uno per ogni pagina, con un nome che inizia per pagina
seguito da quattro cifre numeriche.
$
gs -dNOPAUSE -q -sDEVICE=cdjmono
\
\ -sOutputFile=esempio.prn esempio.ps < /dev/null
[Invio]
Genera, a partire dal documento esempio.ps
, il file esempio.prn
pronto per essere inviato a una stampante HP Deskjet.
$
gs -dSAFER -dNOPAUSE -q -sDEVICE=cdjmono
\
\ -sOutputFile=esempio.prn esempio.ps < /dev/null
[Invio]
Come nell'esempio precedente, ma impedendo che il codice contenuto nel file esempio.ps
possa compiere azioni dannose.
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.
|
|
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.
|
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:
|
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] |
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.
ps2ps [opzioni] file_originale file_da_generare_ps |
eps2eps [opzioni] file_originale file_da_generare_eps |
ps2epsi [opzioni] file_originale file_da_generare_epsi |
ps2ascii [opzioni] file_originale file_da_generare_ascii |
pdf2ps [opzioni] file_originale file_da_generare_ps |
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 \ |
gs -q -sDEVICE=epswrite -sOutputFile=file_da_generare \ |
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.
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.
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] \ |
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:
|
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]
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:
l'adattamento delle dimensioni del foglio;
l'estrazione di pagine in un documento a parte;
la fusione di file diversi;
la modifica nella sequenza delle pagine;
l'unione di più pagine in un solo foglio.
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. |
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.
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.
|
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.
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.
|
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.
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.
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.
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.
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.
|
È 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.
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.
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. |
|
Segue la descrizione di alcuni esempi.
$
psselect -p1,3 documento.ps mio_file.ps
[Invio]
Estrae dal file documento.ps
la prima e la terza pagina, generando il file mio_file.ps
.
$
psselect -p1,_3 documento.ps mio_file.ps
[Invio]
Estrae dal file documento.ps
la prima e la terza pagina dalla fine, generando il file mio_file.ps
.
$
psselect -p1-3,10-15 documento.ps mio_file.ps
[Invio]
Estrae dal file documento.ps
le prime tre pagine e le pagine dalla 10 alla 15, generando il file mio_file.ps
.
$
psselect -p-3,10-15 documento.ps mio_file.ps
[Invio]
Esattamente come nell'esempio precedente, con la differenza che la prima pagina viene considerata in modo predefinito, avendo lasciato il trattino da solo.
$
psselect -p3,150- documento.ps mio_file.ps
[Invio]
Estrae dal file documento.ps
la terza pagina e tutte le pagine a partire dalla 150, generando il file mio_file.ps
.
$
psselect -e -p150- documento.ps mio_file.ps
[Invio]
Estrae dal file documento.ps
tutte le pagine pari (even) a partire dalla 150, generando il file mio_file.ps
.
$
psselect -o -r -p150- documento.ps mio_file.ps
[Invio]
Estrae dal file documento.ps
tutte le pagine dispari (odd) a partire dalla 150, in ordine inverso, generando il file mio_file.ps
.
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:
|
Segue la descrizione di alcuni esempi.
$
psnup -2 documento.ps mio_file.ps
[Invio]
Elabora il file documento.ps
(A4) generando il file mio_file.ps
(A4) che, per ogni pagina, contiene due pagine del documento originale.
$
psnup -4 documento.ps mio_file.ps
[Invio]
Come nell'esempio precedente, con la differenza che vengono riunite quattro pagine in una sola facciata.
$
psnup -Pletter -4 documento.ps mio_file.ps
[Invio]
Come nell'esempio precedente, con la differenza che il file originale contiene pagine in formato letter.
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.
|
Segue la descrizione di alcuni esempi.
$
psbook -s4 documento.ps mio_file.ps
[Invio]
Elabora il file documento.ps
generando il file mio_file.ps
con una sequenza del tipo 4-1+2-3.
$
psbook -s8 documento.ps mio_file.ps
[Invio]
Elabora il file documento.ps
generando il file mio_file.ps
con una sequenza del tipo 8-1+2-7+6-3+4-5.
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.
|
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.
|
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:
|
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.
$
psbook -s4 originale.ps | psnup -2 > mio_file.ps
[Invio]
Rielabora il file originale.ps
generando una pagina ogni due di origine, facendo in modo che il risultato possa essere stampato in fronte-retro con una stampante normale, secondo la sequenza mostrata nella figura 26.23.
$
pstops "4:3L@0.7(21cm,0)+0L@0.7(21cm,14.85cm),
\
\1L@0.7(21cm,0)+2L@0.7(21cm,14.85cm)"
\
\originale.ps mio_file.ps
[Invio]
Come nell'esempio precedente, facendo uso di pstops.
$
psbook -s4 originale.ps | pstops
\
\"4:0L@0.7(21cm,0)+1L@0.7(21cm,14.85cm),
\
\2L@0.7(21cm,0)+3L@0.7(21cm,14.85cm)"
\
\> mio_file.ps
[Invio]
Esattamente come nell'esempio precedente, facendo uso di psbook e di pstops.
$
psbook -s4 originale.ps | psnup -2 | psselect -e > mio_file.ps
[Invio]
Come nel primo esempio, selezionando solo le pagine pari del risultato finale.
$
psbook -s4 originale.ps | psnup -2 | psselect -o -r > mio_file.ps
[Invio]
Come nell'esempio precedente, selezionando solo le pagine dispari del risultato finale e invertendone l'ordine.
$
psbook originale.ps | psnup -2 > mio_file.ps
[Invio]
Rielabora il file originale.ps
generando una pagina ogni due di origine, facendo in modo che il risultato possa essere stampato in fronte-retro, ma a differenza del primo esempio, i fogli stampati vanno rilegati piegandoli tutti assieme, unendoli al centro.
$
psbook -s16 originale.ps | psnup -2 > mio_file.ps
[Invio]
Rielabora il file originale.ps
generando una pagina ogni due di origine, a segnature di quattro fogli A4 da piegare a metà, facendo in modo che il risultato possa essere stampato in fronte-retro con una stampante normale.
$
psbook -s16 originale.ps | pstops
\
\"4:0L@0.7(21cm,0)+1L@0.7(21cm,14.85cm),
\
\2L@0.7(21cm,0)+3L@0.7(21cm,14.85cm)"
\
\> mio_file.ps
[Invio]
Come nell'esempio precedente.
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.
$
pstops "4:3L@0.7(21cm,0)+0L@0.7(21cm,14.85cm),
\
\1R@0.7(0,29.75cm)+2R@0.7(0,14.85cm)"
\
\originale.ps mio_file.ps
[Invio]
Rielabora il file originale.ps
generando una pagina ogni due di origine, facendo in modo che il risultato possa essere stampato in fronte-retro con una stampante duplex, oppure una normale secondo la sequenza mostrata nella figura 26.25.
$
psbook -s4 originale.ps | pstops
\
\"4:0L@0.7(21cm,0)+1L@0.7(21cm,14.85cm),
\
\2R@0.7(0,29.75cm)+3R@0.7(0,14.85cm)"
\
\> mio_file.ps
[Invio]
Esattamente come nell'esempio precedente.
$
psbook -s16 originale.ps | pstops
\
\"4:0L@0.7(21cm,0)+1L@0.7(21cm,14.85cm),
\
\2R@0.7(0,29.75cm)+3R@0.7(0,14.85cm)"
\
\> mio_file.ps
[Invio]
Come nell'esempio precedente, ma ottenendo segnature di quattro fogli A4 da piegare a metà.
$
pstops "8:4U@0.45(10cm,29.2cm)+3U@0.45(20.5cm,29.2cm)+
\
\7@0.45(0.5cm,0.5cm)+0@0.45(11cm,0.5cm),
\
\2U@0.45(10cm,29.2cm)+5U@0.45(20.5cm,29.2cm)+
\
\1@0.45(0.5cm,0.5cm)+6@0.45(11cm,0.5cm)"
\
\> mio_file.ps
[Invio]
Stampa in modo da ottenere otto pagine ridotte su un foglio A4 (fronte e retro), piegandolo due volte. La riduzione delle pagine è maggiore del necessario (le pagine ridotte sono più piccole) per garantire la presenza di margini sufficienti alla rilegatura.
$
pstops "16:8U@0.45(10cm,29.2cm)+7U@0.45(20.5cm,29.2cm)+
\
\15@0.45(0.5cm,0.5cm)+0@0.45(11cm,0.5cm),
\
\6U@0.45(10cm,29.2cm)+9U@0.45(20.5cm,29.2cm)+
\
\1@0.45(0.5cm,0.5cm)+14@0.45(11cm,0.5cm),
\
\10U@0.45(10cm,29.2cm)+5U@0.45(20.5cm,29.2cm)+
\
\13@0.45(0.5cm,0.5cm)+2@0.45(11cm,0.5cm),
\
\4U@0.45(10cm,29.2cm)+11U@0.45(20.5cm,29.2cm)+
\
\3@0.45(0.5cm,0.5cm)+12@0.45(11cm,0.5cm)"
\
\> mio_file.ps
[Invio]
Come nell'esempio precedente, piegando assieme due fogli A4.
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).
|
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.
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:
In tal caso può essere eliminato anche il commento finale:
|
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:
|
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,
|
è sufficiente aggiungere pstops alla catena:
|
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.
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.
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. |
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.
|
Viene mostrato brevemente un file di configurazione tipico.
|
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.
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] |
|
Segue la descrizione di alcuni esempi.
$
dvips -t a4 -o mio_file.ps mio_file.dvi
[Invio]
Elabora il file mio_file.dvi
generando il file mio_file.ps
, in formato A4.
$
dvips -t a4 mio_file.dvi
[Invio]
Elabora il file mio_file.dvi
, trasformandolo in PostScript, lasciando che questo sia diretto come stabilito dalla configurazione (presumibilmente si tratta della coda di stampa predefinita).
$
dvips -t a4 -o mio_file.ps mio_file.dvi
[Invio]
Genera il file mio_file.ps
, in formato A4, togliendo alcuni commenti che possono creare problemi ai programmi di visualizzazione o di rielaborazione.
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.
|
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 |
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:
dvilj4 per stampanti HP Laserjet 4 e compatibili;
dvilj4l per stampanti HP Laserjet 4L e compatibili;
dvilj2p per stampanti HP Laserjet IIp e compatibili;
dvilj per stampanti HP Laserjet generiche e compatibili;
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.
|
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.
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.
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
.
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]... \ |
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:
[pagina_iniziale]:[pagina_finale] |
In questo modo, il valore che appare prima dei due punti indica la pagina di partenza, mentre l'altro indica la pagina finale. In mancanza del primo valore, si intende la prima pagina; in mancanza del secondo si intende l'ultima pagina.
Se uno dei valori che indicano gli intervalli di pagine, è preceduto da un trattino basso (_), si intende fare riferimento a una pagina numerata in modo negativo.
odd |
Seleziona tutte le pagine dispari, ovvero quelle destre in una numerazione normale.
even |
Seleziona tutte le pagine pari, ovvero quelle sinistre in una numerazione normale.
$
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.
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.
|
Segue la descrizione di alcuni esempi.
$
dvidvi -f 21 -l 40 pippo.dvi pippo.2.dvi
[Invio]
Genera il file pippo.2.dvi
, copiando l'intervallo di pagine dalla 21-esima alla 40-esima del file pippo.dvi
.
$
dvidvi -i 21..40 pippo.dvi pippo.2.dvi
[Invio]
Esattamente come nell'esempio precedente.
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
.
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.
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
).
|
Segue la descrizione di alcuni esempi.
$
dvipng prova.dvi
[Invio]
Genera una serie di file (prova1.png
, prova2.png
,...) con il contenuto di tutte le pagine del file prova.dvi
.
$
dvipng -p =10 -l =20 prova.dvi
[Invio]
Genera una serie di file (da prova10.png
a prova20.png
) con il contenuto delle pagine dalla numero 10 alla numero 20, incluse, contandole in modo assoluto.
$
dvipng -p =5 -l =10 -o prova-%03d.png prova.dvi
[Invio]
Genera una serie di file, da prova-001.png
a prova-010.png
.
Si osservi che nel modello si può usare solo la sigla %d, oppure %03d, pertanto, se si hanno più di 999 pagine, non è possibile richiedere una numerazione di quattro cifre costanti. |
$
dvipng -p =5 -l =10 -o prova-%03d.png -x 100
\
\ prova.dvi
[Invio]
Come nell'esempio precedente, producendo però delle miniature della dimensione di un decimo (100/1 000).
$
dvipng -p =5 -l =10 -o prova-%03d.png -x 100 -D 600
\
\ prova.dvi
[Invio]
Come nell'esempio precedente, ma con una risoluzione di 600 punti per pollice. In pratica, considerato che normalmente uno schermo funziona con risoluzioni da 72 punti o da 100 punti, l'immagine risultante è più grande (almeno sei volte più grande).
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] \ |
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.
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.
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]] |
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.
|
Segue la descrizione di alcuni esempi.
$
xpdf prova.pdf
[Invio]
Carica il file prova.pdf
e inizia a visualizzare la prima pagina.
$
xpdf prova.pdf 10
[Invio]
Carica il file prova.pdf
e inizia a visualizzare la pagina numero 10.
$
xpdf prova.pdf +capitolo-1
[Invio]
Carica il file prova.pdf
e inizia a visualizzare la pagina che contiene l'etichetta capitolo-1.
$
xpdf -rv prova.pdf
[Invio]
Carica il file prova.pdf
visualizzando a colori inversi.
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.
|
Quando il puntatore grafico del mouse si trova nell'area che mostra la pagina, i tasti del mouse hanno funzioni speciali:
|
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. |
|
Segue la descrizione di alcuni esempi.
$
pdftops prova.pdf prova.ps
[Invio]
Converte il file prova.pdf
in prova.ps
.
$
pdftops -f10 -l20 prova.pdf prova.ps
[Invio]
Estrae dal file prova.pdf
le pagine da 10 a 20, generando il file prova.ps
in formato PostScript.
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).
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-*
.
|
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 |
|
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 \ |
Se con le opzioni si specifica un intervallo di pagine, si ottengono anche le misure delle varie pagine selezionate.
|
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.
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.
|
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:
|
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:
|
Questa potrebbe essere modificata in modo che utilizzi pdftops:
|
Online Computer Science Degree, PostScript Resources, http://www.onlinecomputersciencedegree.com/resources/postscript-resources/
Peter J. Weingartern, A First Guide to PostScript, http://www.tailrecursive.org/postscript/postscript.html
Thomas Merz, Ghostscript Manual, 1997, http://pages.cs.wisc.edu/%7Eghost/doc/merz.htm
Cappella Archive, http://www.cappella.demon.co.uk/index.html
David Byram Wigfield, Self-Printing Books, http://www.cappella.demon.co.uk/tinypdfs/01books.pdf
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
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.
14) TkDVI software libero con licenza speciale
17) dviselect licenza speciale
19) dviconcat licenza speciale
«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net