homeprecedentelivello superioresuccessivo

doUTSPUL

GESTIONE DELLE STAMPANTI    

SCOPO Il programma di utilita' UTSPUL gestisce tutte le chiamate alle stampanti

PRINCIPIO DI FUNZIONAMENTO

Il meccanismo di stampa e' spiegato nello schema allegato (vedi schema)

CHIAMATA

da programma
  • XX10 LOAD SUB 'UTSPUL'
  • XX20 Printer$=FNSpool$ ( Mes$,Prt,Lun)
Tutti i programmi fanno una chiamata a questa funzione che permette di scegliere su quale stampante inoltrare tutte le stampe del sistema.
Le modalita' di funzionamento delle stampe si possono riassumere in:
Stampa fisica
La stampa avvene direttamente sulla stampante indicata
Stampa differita
La stampa non avviene subito, ma viene lasciata (pronta alla stampa o ristampa) nel direttorio /frako/spul
Con la funzione STAMPE DIFFERITE, del menu Utilita', si possono ottenere quante copie si vuole e quando si vuole
Stampa a Video
La stampa viene dirottata a video.
Se il terminale supporta 132 colonne viene attivato CRTCOL=132
Stampa Nulla
Il ciclo di programma e di stampa avviene normalmente dirottando l'output sulla stampante $NULL
Stampa HTML/PDF
Viene attivata la possibilita' di creare a programma un file HTML (anche a colori)
Il programma deve essere predisposto opportunamente.
Stampa PDF
E' una funzionalita' che permette di stampare da qualsiasi programma (possibilmente senza modifiche) su qualsiasi stampante di sistema
In pratica il programma UTPCL2HTML converte una qualsiasi stampa differita prima in HTML e poi in PDF
Viene lanciato quindi Acrobat che permette la stampa fisica
Rinuncia a Stampa
Il programma viene interrotto bruscamente


Il programma passa alla funzione i seguenti parametri:


Mess$ Il formato di Mess$ e' composto di due parti = [@V@]  + Messaggio
@V@        =  chiamato variante ed e' opzionale
                        (vedi sotto la descrizione di questa funzione)
Messaggio =  compare sulla barra superiore della finestra
                        Se la stampa e' differita, questo messaggio commenta il contenuto del file da stampare nel file SP#xxx.


max 30 car.
Prt Numero della stampante come definita in PRTxxx
  xxx Vengono proposte tutte le stampanti. 
L'utente ne sceglie una.
1xxx Viene proposta per prima la stampante PRTxxx e poi le altre.  L'utente ne sceglie una.
-1xxx Stampante forzata. Vengono solamente presi le caratteristiche ed  i parameri per la stampante PRTxxx senza possibilita' di scelta da parte dell'utente
numero intero da
  • 0 : 999
  • 1001 : 1999
  • -1001 : -1999

 

 

Lun

Indica come eseguire la stampa

  • Se e' dispari l'orientamento e' LANDSCAPE
  • Se e' maggiore di 1000, le migliaia indicano quale dimensione avra' il carattere in PDF
  • La rimanenza e' la lunghezza pagina

66 = pagina lunga 66 righe
67 = pagina di 66 landscape
2067= pagina di 66, landscape, con font=2

Si supponga che il programma esegua la seguente chiamata:

Printer$=FNSpool$ ( "Libro GIORNALE",2,256)
Printer$=FNSpool$ ( "@F@Stampa Fattura",2,256)   (Messaggio con Variante)

Sovrapposta alla schermata del programma viene visualizzata la maschera di scelta stampante.
Viene proposta in prima riga la stampante predefinita per quell'utente come indicato da tabella KD (preferenze utente)
Cio' vale purche' non esista  una forzatura da programma generalmente indicata dalle tabelle SWxx.

Vengono poi lette tutte le tabelle di tipo PRTxxx
Vengono visualizzate nella seguente forma:



num Numero logico della stampante come da tabella PRTxxxV
Alcuni programmi accodano al numero di stampante una variante V che indica dove destinare il file PDF 
        (vedi sotto la descrizione di questa funzione)
stampante Breve descrizione della stampante e del suo settaggio da effettuare
tipo Classe a cui appartiene la stampante come da tabella PRxx   oppure PRxx-
porta Porta logica Eloquence ( su cui eseguire PRINTER IS (porta) )
Come definita in ../eloq.config
font Abilitazione possibile di Font secondario con CHR$(14)  (SI)
Deriva da tabella PRXnnn [15;6]
dettagli  Una stessa stampante fisica  puo' essere definita piu' volte e descritta su piu' righe.
Ogni riga viene definita stampante logica. 
Piu' righe possono puntare alla stessa stampante ma usando caratteristiche diverse (font, orientamento, vassoio, ecc..)
Le informazioni sono prese dalle tabelle PRxxxx
/etc/printcap
Porta Fisica 
PRTxxx
Tipo stampante 
Porta Eloquence
PRnn
Font primari
PRXxxx
Font Secondari 
RRTxxx
Stampa  PDF

Descrizione del flusso programma    
         Esempio :
Printer$=FNSpool ( "Libro GIORNALE,2,256)

Si punta il cursore con il mouse o le frecce su/giu sulla linea contenente la stampante logica  che si vuole utilizzare e si preme invio/return per confermare.
 

Viene letta la tabella PRT002
Tabelle PRTxxx
15;25 Descrizione stampante.  Esempio LASER  carta NORMALE
Compare nella maschera di scelta e nella descizione della stampa differita
50;2 Tipo/Famiglia stampante meglio specificata in PRxx (nell'esempio xx=10) = PR5
NOTA
Se 50;1 = "H" identifica una stampa in Html-Pdf

52;1
  • L =    Stampante con lunghezza di pagina  corta   (landscape)
  • '  '  =   Stampante con lunghezza di pagina  normale
60;8 Prt = Numero stampante logica Eloquence
  • 8 = video
  • 9 = nulla
  • n = numero stampante (PRINTER IS n)
129;32
reset Sequenza di reset     (  tipico   Ec&"E"  )
Eventualmente si puo' aggiungere cassetto ed orientamento
Ha precedenza su quella di PRxx
stty sequenza controllo delle stampanti seriali
esempio:   ! stty 9600 icanon icrnl
viene mandato il comando
COMMAND "! stty 9600 icanon icrnl < "&MAPPNTR$(Porta)
Viene letta la tabella PR10
Tabelle  PRxx
  
oppure
Tabella PRxx-  
se indicato carattere piccolo



Come indicato da tabella PRT002 [50;2]
15;35 Descrizione tipo stampante (non obbligatoria se non e' laser)

NOTA IMPORTANTE

Se la stampante e' una Laser PCL5 e' obbligatorio nel primi 5 caratteri scrivere LASER

       Sequenze escape da passare al programma
50;10 Sequenza comando escape per carattere Compresso ( 16.67 cps )( 12 cps )
60;10 Sequenza comando escape per carattere Espanso ( 5 cps )
70;10 Sequenza comando escape per carattere Normale (10 cps)
80;10 Sequenza comando escape per carattere Inizio sottolineatura
90;10 Sequenza comando escape per carattere Fine sottolineatura
100;16 Sequenza Reset
129;16 Sequenza escape cassetto
149;16 Sequenza escape orientamento carta
169;16 Sequenza escape lunghezza pagina
250;1 L se Vista=0  ( per compatibilita') (non piu' usato)
REQUEST  0 Viene aperta una coda di stampa sul sistema

eventuale

 COMMAND "! stty 9600 icanon icrnl < "&MAPPNTR$1(Prt)
PRINT Reset$ Riporta la stampante ai valori standard
PRINT Cassetto$ Seleziona il cassetto da cui prendere la carta
Questo comando puo' essere abbinato alla sequenza di Reset$
PRINT Orientamento$ Seleziona l'orientamento della carta (solo stampanti Laser o InkJet)
Questo comando puo' essere abbinato alla sequenza di Reset$
Lettura tabella PRXnnn

Tabella facoltativa che descrive ed abilita il font secondario

15;6 Codice font o mini descrizione (obbligatoria)
E' quella che compare nella maschera di scelta stampante.
21;29 Descrizione facoltativa a ggiuntiva
50;70 Sequenza caratteri per font secondario. (Sequenza completa)
Esempio: Ec)8UEc)s0p5h0s3b4102T
129;10 Variante per passare in Compresso
139;10 Variante per Espanso
149;10 Variante per Normale
159;10 Variante per Italico
169;10 Variante per non Italico
179;10 Variante per Bold
189;10 Variante per Non Bold
PRINT Escape$ PRINT Sequenza escape font secondario base se esiste la tabella PRXxxx
PRINT CHR$(15)  Set (predispone)  font primario

La funzione rende al programma:

PRONTA Stampante resettata, inizializzata con i font, scelti i cassetti, preparatol'orientamento.
Basta   mandare dei PRINT
Printer$ Nella variabile Printer$ viene reso:
Numero Numero logico Eloquence della stampante ( come da eloq.config)
Nome Nome del file in cui e' stata differita la stampa nel formato SPFxxxx
File pdf
Nome del file in cui e' stata differita la stampa nel formato SPFxxxx
In Key$[280;20] viene indicata al MENU la stampa da convertire nel formato  >nnnn<SPFxxx

Buf $ Vengono rilasciate nel Buffer (in common) i seguenti valori:
1;12 PRxx Famiglia stampante
15;25   Descrizione stampante
50;10 Comp$ sequenza Compresso
60;10 Esp$ Espanso
70;10 Norm$ Normale
80;10 Und$ Underline
90;10 Nound$ Stop Underline
100;16 Rst$ Sequenza Reset
129;16 Cst$ Sequenza escape cassetto
149;16 Ori$ Sequenza escape orientamento carta
169;16 Plen$ Sequenza escape lunghezza pagina
250;1   L = vista =0  ( compatibilita'  - non piu' usata )
260;1 "S " E' attivo e selezionabile il font secondario
261;70 seq.escape Sequenza completa per font secondario che e' stato attivato
331;10 Comp2$ Variante per Compresso
341;10 Esp2$ Variante per Espanso
351;10 Norm2$ Variante per Normale
361;10 Italic2$ Variante per Italico
371;10 Noitalic2$ Variante per non Italico
381;10 Bold2$ Variante per Bold
391;10 Nobold2$ Variante per non Bold
Area di stampa

Se la stampa e' differita, la stampa non avviene subito, ma viene lasciata  nel direttorio /frako/spul
Con la funzione STAMPE DIFFERITE, del menu Utilita', si potranno ottenere quante copie si vuole e quando si vuole
Nel direttorio /frako/spul vengono creati due file
  • SP#xxx  File delle caratteristiche di stampa           (ove xxx=numero progressivo di stampa)
    [1;30] Titolo della stampa
    [31;26]  Stampante a cui dovrebbe essere indirizzata la stampa
    [57;6]  Data di creazione
    [64;5]  Utente che l'ha creata
    [69;1]  L=Landscape(orizzontale)  ' ' = Verticale
    [70;1]  n = <font size=n>
  • SPFxxx Area in cui il programma lasciera' la stampa con il comando PRINTER IS "SPFxxx"

A conferma della scelta della stampante, la riga corrispondente viene evidenziata
A questo punto abbiamo le seguenti scelte

OK Il programma riceve i parametri sopra riportati e comincia a stampare
VIDEO Il programma riceve in Printer$ l'identificatore del video = 8
DIFFERITA Viene letta la tabella TTY , legge il numero progressivo della prossima stampa differita in posizione [50;5]
Crea due file
  • /frako/spul/SPFxxxx  ove verranno stampati i dati dal programma
  • /frako/spul/SP#xxxx  con Messaggio$+ Descrizione stampante + Data + Utente

Il programma riceve in Buf $ i parametri sopra riportati
Riceve in Printer$ il nome del file SPFxxxx
Il programma deposita la stampa con le caratteristiche sopra scelte
Si puo' stampare in seguito il file Differito con la funzione STAMPE DIFFERITE

NULLA Il programma riceve in Printer$ l'identificatore di stampa nulla = 9
Il programma esegue il suo ciclo e la stampa viene  buttata ( viene inviata al /dev/null )
RINUNCIA Il programma riceve in Printer$ l'identificatore  = 0 
Il programma puo' immediatamente terminare rinunciando al ciclo di elaborazione e stampa

Stampa in Html / Pdf

Le stampe i Html-Pdf possono essere eseguite solmente sui terminali di tipo Java-Net
I programmi (se predisposti) possono lasciare una immagine su un file in formato Html e Pdf
Il meccanismo di scelta stampante e' identico a quanto descritto per le stampanti standard.



La tabella PRTxxx deve essere configurata nel modo seguente:
Viene letta la tabella PRT000
Tabelle PRTxxx





15;25 Descrizione stampante.  Esempio PDF FILE
Compare nella maschera di scelta e nella descizione della stampa differita
50;1 "H" = identifica una stampa in Html-Pdf
"P"  = identifica una stampante che stampa in PDF
52;1
  • L =    Stampante con lunghezza di pagina  corta   (landscape)
  • '  '  =   Stampante con lunghezza di pagina  normale
60;8 Prt = Numero stampante logica Eloquence su cui eventualmente stampare il file PDF
  • 8 = video
  • 9 = nulla
  • n = numero stampante (PRINTER IS n)
70;1
  • P =  Pausa il programma per vedere a video la stampa e decidere se stamparla
  • '  '  = Non fermare il programma, ma stampa sulla stampante predefinita
71;1
  • D = Delete (Cancella) il file Html e lascia solanmente il file Pdf
  • '  ' = Non cancellare il file Html
72;1
  • L = Stampa in landscape
  • '  ' = Stampa in verticale (portrait)
            Il programma puo' forzare pero' Landscape se il paramentro passato in Lun e' dispari (vedi sopra)
80;7
90;7
100;7
Col_b$ = (background)  es:Colore di fondo caselle intestazione (rgb)  es: #FF0000   = rosso
Col_f$ = (forground)  es: Colore delle colonne       Es: #00FF00  = verde
Col_fw$ = (sfondo)  es:Colore di sfondo pagina    es: # FFFFFF  = bianco
129;40
Directory dove lasciare i file Html e Pdf




La funzione rende al programma:

NON SCELTA Stampante non scelta in quanto il file PDF verra' stampato con il comando lpr -P xy
Printer$

Nella variabile Printer$ viene reso:
<HTML-pd-n>xxx    ove:

  • p   P = (pausa)  oppure  "  "= (no pausa)

  • d   D= (cancella html)    "  " = (non cancellare html)

  • n   PRINTER IS n

  • xxx  Stampante logica scelta 

Buf $ Vengono rilasciate nel Buffer (in common) i seguenti valori:
1;80 Dir_html$ Direttorio dove lasciare i file Html e Pdf
128;80 Prt_html$ Comando da usare per stampa es: lpr -P laserjet
210;7 Col_b$ Col_b$ = (background)  es:Colore di fondo caselle intestazione (rgb)  
es: #FF0000   = rosso
220;7 Col_f$ Col_f$ = (forground)  es: Colore delle colonne       Es: #00FF00  = verde
230;7 Col_fw$ Col_fw$ = (sfondo)  es:Colore di sfondo pagina    es: # FFFFFF  = bianco
Area di stampa
E' il programma di stampa che si occupa della creazione dei file di stampa nel direttorio Dir_html$
Anche il nome ed il numero di file creati dipendera' dal programma di stampa
Normalmente il programma di stampa creera' un file xxxx.html    ed uno  xxxx.pdf

.................esempio di programma ...................................
600         Printer$=FNSpul$("STAMPA BOLLA/FATTURA",Prt,200)                   

610         DEL FNSpul$                                                        
620         IF LEN(TRIM$(Printer$))=0 THEN Fine                                
630         IF Printer$[1;1]="<" THEN                      
640            Html=POS(Printer$,">")                                          
650            Prtd$=Printer$[Html+1]                                          
660            Html=1                                                          
670            Dir_html$=TRIM$(Buf$[1;80])                                     
680            Prt_html$=TRIM$(Buf$[128;80])                                   
690            Prt_html=VAL(Printer$[9])                                       
700            Col_b$=Buf$[210;7]                                              
710            Col_f$=Buf$[220;7]                                              
720            Col_fw$=Buf$[230;7]                                             
730         ELSE                                                               
740            Dir_html$=" "                                                   
750            Prt_html$=" "                                                   
760            Esp$=Buf$[60;10]                                                
770            Nor$=Buf$[70;10]                                                
780            Comp$=Buf$[50;10]
790         END IF
....................... fine esempio  ............................

Stampa in Html / Pdf  su stampanti che non hanno PCL

La maggior parte dei programmi usano il  linguaggio PCL 3 come standard. 
Pertanto le stampe sono ottimizzate  per le stampanti di tipo LASER.
Questa funzionalita'  permette di stampare da qualsiasi programma (possibilmente senza modifiche) su qualsiasi stampante di sistema




La funzionalita' si attiva in due modi
Il funzionamento del programma e' il seguente:
Solo File Lascia come risultato un file HTML ed uno PDF in /frako/html/varie
Pdf a Video Il programma Acrobat visualizza il file /frako/html/varie/SPPxxx.pdf.  E' possibile stamparlo
Html a Video Il programma visualizza in un Browser  il file /frako/html/varie/SPHxxx.html.  E' possibile stamparlo ma, si sa, le stampe da browser non sono mai uguali.
Stampa  Alla fine del processo viene stampato direttamente il file sulla stmpante indicata
RINUNCIA
Non stampare e cestina la richiesta di stampa

Uso delle Varianti

Durante la scelta della stampante vengono proposte tutte le stampanti presenti nelle tabelle PRTxxx
Se una installazione ha, per esempio,  6 stampanti  ed ognuna di queste puo' stampare anche in PDF bolle + fatture + Ordini cli e forn + Preventivi le combinazioni possibili sono 6*5=30 stampanti.
Per ovviare a qusto inconveniente le stampanti di tipo H possono venire dichiarate usando le tabelle RRT (anziche' PRT)
Con questo sistema verranno proposte solamente le poche stampanti di tipo PRT ma la variante passata dal programma indirizzera' la stampa su quella indicata dalla tabella RRTxxxV

Esempio:    Printer$=FNSpool$ ( "@F@Stampa Fattura",0,256)

variante
Uso
B
DDT - BOLLE
F
FATTURE
C
ORDINI CLIENTI
D
ORDINI FORNITORI
P
PREVENTIVI

Esempio di tabella con variante F