Newsgroup: it.comp.lang.visual-basic
Titolo: Quei maledetti driver delle stampanti...







Be' le cose sono due: o mi sfugge qualcosa d'importante oppure 
chi programma i driver delle stampanti è un maiale.
Ovviamente 
propendo per la prima ipotesi ma non riesco a capire dove sbaglio.
Sto 
realizzando l'anteprima di stampa per un programma scritto in VB 5 ma riscontro 
un'imprecisione non banale nella risposta che i driver restituiscono alle 
interrogazioni delle API.
Ricavare le dimensioni in millimetri del foglio 
nella stampante è semplicissimo:
(1) 
Printer.Width / 56.7
(2) Printer.Height / 
56.7
oppure
(1') 
GetDeviceCaps(Printer.hDC, HORZSIZE&) / 56.7
(2') 
GetDeviceCaps(Printer.hDC, VERTSIZE&) / 56.7
Non è neppure 
difficile ricavare l'area stampabile cui provvedono le seguenti 
chiamate:
(3) GetDeviceCaps(Printer.hDC, 
PHYSICALOFFSETX&) / 10
(4) GetDeviceCaps(Printer.hDC, 
PHYSICALOFFSETY&) / 10
per quanto riguarda l'angolo superiore 
sinistro e
(5) GetDeviceCaps(Printer.hDC, 
HORZSIZE&)
(6) GetDeviceCaps(Printer.hDC, VERTSIZE&)
per le 
dimensioni.
Peccato che i risultati ottenuti non mi sembrino 
coerenti...
 


 
Esempi:
 


 
EPSON Stylus Color 
600
Con il formato A4:
Dimensioni fisiche del foglio: 
210,0 x 297,0 mm (dalla 1 e dalla 2)
Angolo superiore sinistro: 4,2 , 4,2 mm 
(dalla 3 e dalla 4)
Area stampabile: 204,0 x 280,0 mm (dalla 5 e dalla 
6)
L'esperienza e la pratica suggeriscono che il margine sinistro e quello 
destro siano uguali cioè entrambi di 4,2 mm ma ... 4,2 + 204,0 + 4,2 = 
212,4 mm cioè 2,4 mm oltre le dimensioni fisiche del foglio ! 
Significherebbe che l'area stambile non è centrata orizzontalmente ma 
è spostata sulla destra...


CANON Bubble-Jet BJC-800
Con il formato 
A4:
Dimensioni fisiche del foglio: 210,0 x 296,1 mm
Angolo superiore 
sinistro: 6,5 , 4,5 mm
Area stampabile: 203,0 x 281,0 mm
Come nel caso 
precedente si ha un risultato anomalo: 6,5 + 203,0 + 6,5 = 216,0 mm cioè 
ben 6 mm in eccesso !


HP DeskJet 560C
Con il formato 
A4:
Dimensioni fisiche del foglio: 209,9 x 296,3 mm
Angolo superiore 
sinistro: 5,6 , 9,7 mm
Area stampabile: 200,0 x 270,0 mm
Ancora una volta 
i conti non tornano: 5,6 + 200,0 + 5,6 = 211,2 mm, un errore di 1,3 
mm.


Inutile riportare altri esempi, i risultati sono 
pressocchè uguali.
Tutto ciò può sembrare un eccesso di 
pignoleria ma ci si rende conto del contrario quando si intende rispettare le 
rigide regole del WYSIWYG e realizzare un'applicazione nella quale la stampa 
è l'elemento fondamentale.
È quasi superfluo chiedere 
suggerimenti e commenti, a che servono i NG ?


    

Grazie





Zzzpl...@tin.it
           
[ ovviamente le Zzz sono per chi dorme... ]






Questo č il motivo per il quale tutti i programmi che hanno a che fare con
le dimensioni del foglio, sono anche provvisti di una finestra di
personalizzazione dei margini. E anche quella non basta! Prova a scrivere
una tesi di 150/200 pagine. Praticamente non la stampi su nessun altra
stampante a meno di una noiosa reimpaginazione. Se proprio non puoi inserire
una "personalizzazione dei margini" nel tuo programma, crea una lista di
impostazioni (nel registro o in un INI) delle stampanti che riesci a
testare.
Fabio Guerrazzi