Mi Gente... Buen Día...
Hace años desarrolle una aplicación que imprime, por medio de la clase tPrinter, una serie de formularios (diseño gubernamental) en papel Legal (8.5" x 14"... acá lo llamamos "extra-oficio")...
hace poco menos de una semana la dependencia gubernamental en cuestion emitió una circular donde manda a que todos esos formularios se impriman ahora en un tamaño de papel de 8.5" x 13" (acá lo llamamos "oficio")...
Como podrán ver, debo escalar verticalmente la impresión de los formularios para que se impriman completos en un papel que es 2.5cm mas corto...
Ya le añadí a Windows un papel de 8.5" x 13" (Panel de Control ==> Herramientas Administrativas ==> Administrador de Impresión ==> Servidores de Impresion ==> [Equipo] ==> Formularios)
Como hago para saber que constante aplicar al método :SetPage() para indicarle ese tamaño de papel, tomando en cuenta que al ser un tamaño definido por el usuario, puede que en distintos PC's esa constante puede tener diferentes valores...
Ej...
#define DMPAPER_LETTER 1 // Letter 8 1/2 x 11 in
...
#define DMPAPER_LEGAL 5 // Legal 8 1/2 x 14 in
...
#define DMPAPER_OFICIO ???? // 8 1/2 x 13 in
He probado el método :SetSize( nWidth, nHeight ) de la clase tPrinter... pero he estado tirando flechas porque no he encontrado documentación que me diga en que unidades pasan nWidth y nHeight... a duras penas logre que escalara de Legal (8.5" x 14") a Letter (Carta 8.5" x 11")... pero no logro otras medidas por mucho que cambie los valores de nWidth y nHeight...
Agradecido de antemano por la ayuda y/o sugerencias que me puedan dar...
Giancarlo Sabattino
Valencia - Venezuela
FW13.12+xH1.2001+BCC5.51
Como ajustar impresión por cambio en tamaño del papel
- gsabattino
- Posts: 100
- Joined: Fri Oct 14, 2005 12:03 am
- Location: Valencia, Venezuela
- FranciscoA
- Posts: 1964
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Como ajustar impresión por cambio en tamaño del papel
Ya lo intentaste asi?
Saludos.
Code: Select all
PrnSetSize(2125, 3250) //(8.50x2.5)x100 = 2125 mm (13*2.5)*100=3250 mm
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh1204-MySql-TMySql
Chinandega, Nicaragua.
Fwxh1204-MySql-TMySql
Re: Como ajustar impresión por cambio en tamaño del papel
Code: Select all
#include "FiveWin.ch"
FUNCTION PAPEL_LEGAL()
LOCAL oPrinter, aPaper
oPrinter = TPrinter():New( 'Meu Documento' , .F., .F., NIL, .F. )
aPaper = PrnGetPaper( oPrinter )
IF .NOT. aPaper[3] = 'Legal'
MsgStop( "Por favor use papel legal, cambie impresora", "Atencion" )
RETURN( .F. )
ENDIF
RETURN( .T. )
FUNCTION PrnGetPaper( oPrn )
LOCAL aPoint := PrnGetSize( oPrn:hDc ), aRecmm := {}, nW := 0
LOCAL nH := 0, wx := 0
LOCAL aPapers:={{"DMPAPER_LETTER " , 1 , "Letter " , {216,279} },;
{"DMPAPER_LETTERSMALL " , 2 , "Letter Small " , {216,279} },;
{"DMPAPER_TABLOID " , 3 , "Tabloid " , {280,432} },;
{"DMPAPER_LEDGER " , 4 , "Ledger " , {432,280} },;
{"DMPAPER_LEGAL " , 5 , "Legal " , {216,356} },;
{"DMPAPER_STATEMENT " , 6 , "Statement " , {140,216} },;
{"DMPAPER_EXECUTIVE " , 7 , "Executive " , {184,257} },;
{"DMPAPER_A3 " , 8 , "A3 " , {297,420} },;
{"DMPAPER_A4 " , 9 , "A4 " , {210,297} },;
{"DMPAPER_A4SMALL " , 10 , "A4 Small " , {210,297} },;
{"DMPAPER_A5 " , 11 , "A5 " , {148,210} },;
{"DMPAPER_B4 " , 12 , "B4 " , {250,354} },;
{"DMPAPER_B5 " , 13 , "B5 " , {182,257} },;
{"DMPAPER_FOLIO " , 14 , "Folio " , {216,330} },;
{"DMPAPER_QUARTO " , 15 , "Quarto " , {215,275} },;
{"DMPAPER_10X14 " , 16 , "10x14 in " , {254,356} },;
{"DMPAPER_11X17 " , 17 , "11x17 in " , {280,432} },;
{"DMPAPER_NOTE " , 18 , "Note " , {216,279} },;
{"DMPAPER_ENV_9 " , 19 , "Envelope #9 " , {098,225} },;
{"DMPAPER_ENV_10 " , 20 , "Envelope #10 " , {105,241} },;
{"DMPAPER_ENV_11 " , 21 , "Envelope #11 " , {114,264} },;
{"DMPAPER_ENV_12 " , 22 , "Envelope #12 " , {109,279} },;
{"DMPAPER_ENV_14 " , 23 , "Envelope #14 " , {127,292} },;
{"DMPAPER_ENV_DL " , 27 , "Envelope DL " , {110,220} },;
{"DMPAPER_ENV_C5 " , 28 , "Envelope C5 " , {162,229} },;
{"DMPAPER_ENV_C3 " , 29 , "Envelope C3 " , {324,458} },;
{"DMPAPER_ENV_C4 " , 30 , "Envelope C4 " , {229,324} },;
{"DMPAPER_ENV_C6 " , 31 , "Envelope C6 " , {114,162} },;
{"DMPAPER_ENV_C65 " , 32 , "Envelope C65 " , {114,229} },;
{"DMPAPER_ENV_B4 " , 33 , "Envelope B4 " , {250,353} },;
{"DMPAPER_ENV_B5 " , 34 , "Envelope B5 " , {176,250} },;
{"DMPAPER_ENV_B6 " , 35 , "Envelope B6 " , {176,125} },;
{"DMPAPER_ENV_ITALY " , 36 , "Envelope " , {110,230} },;
{"DMPAPER_ENV_MONARCH " , 37 , "Envelope Monarch " , {098,191} },;
{"DMPAPER_ENV_PERSONAL " , 38 , "6 3/4 Envelope " , {092,165} },;
{"DMPAPER_FANFOLD_US " , 39 , "US Std Fanfold " , {378,279} },;
{"DMPAPER_FANFOLD_STD_GERMAN" , 40 , "German Std Fanfold " , {216,305} },;
{"DMPAPER_FANFOLD_LGL_GERMAN" , 41 , "German Legal Fanfold" , {216,330} } }
aRecmm = oPrn:Pix2Mmtr(aPoint[1], aPoint[2])
nW = ROUND(aRecmm[1],0)
nH = ROUND(aRecmm[2],0)
for wx=1 to len(aPapers)
if aPapers[wx,4,1] = nW .AND. aPapers[wx,4,2] = nH
return {aPapers[wx,1],aPapers[wx,2],aPapers[wx,3]}
endif
next
return {"",0,""}
João Santos - São Paulo - Brasil
- gsabattino
- Posts: 100
- Joined: Fri Oct 14, 2005 12:03 am
- Location: Valencia, Venezuela
Re: Como ajustar impresión por cambio en tamaño del papel
Francisco... Gracias por tu sugerencia...
Te comento que no funcionó... el formato se imprime igual como si se tratara de papel Legal (8.5" x 14")... no se escala verticalmente que es lo que estoy buscando, y lógicamente al ser el papel 2.5cm mas corto se corta el final de la impresión...
de todas formas, por si estoy haciendo algo incompatible con lo que necesito, te copio un resumen del código...
PRINT oPlanilla:oPrn DOC cText;
PREVIEW MODAL
oPlanilla:oPrn:SetPage( DMPAPER_LEGAL ) // Quitando esta linea la clase asume papel carta (8.5" x 11")
oPlanilla:oPrn:SetPortrait()
...
...
PrnSetSize( 2159, 3302 ) // Los valores para nWidth y nHeight están calculados en base a 2.54 cm x pulgada
oPlanilla:oPrn:Preview()
oPlanilla:oPrn:End()
Te comento que no funcionó... el formato se imprime igual como si se tratara de papel Legal (8.5" x 14")... no se escala verticalmente que es lo que estoy buscando, y lógicamente al ser el papel 2.5cm mas corto se corta el final de la impresión...
de todas formas, por si estoy haciendo algo incompatible con lo que necesito, te copio un resumen del código...
PRINT oPlanilla:oPrn DOC cText;
PREVIEW MODAL
oPlanilla:oPrn:SetPage( DMPAPER_LEGAL ) // Quitando esta linea la clase asume papel carta (8.5" x 11")
oPlanilla:oPrn:SetPortrait()
...
...
PrnSetSize( 2159, 3302 ) // Los valores para nWidth y nHeight están calculados en base a 2.54 cm x pulgada
oPlanilla:oPrn:Preview()
oPlanilla:oPrn:End()
Re: Como ajustar impresión por cambio en tamaño del papel
Code: Select all
// Sample showing how to manage the printer object
#include "FiveWin.ch"
static oWnd
//----------------------------------------------------------------------------//
function Main()
local oPrn, oFont
local nRowStep, nColStep
local nRow := 0, nCol := 0, n, m
//oPrn := PrnSetSize( 2100, 1200 ) // To adjust a different printer paper size!
//oPrn := PrnSetSize( 216, 356 ) // To adjust a different printer paper size!
oPrn := PrnSetSize( 202 * 10, 289 * 10 ) // To adjust a different printer paper size!
PRINT oPrn NAME "Testing the printer object from FiveWin" PREVIEW
if Empty( oPrn:hDC )
return nil // Printer was not installed or ready
endif
DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 0, -12 OF oPrn
nRowStep = oPrn:nVertRes() / 20 // We want 20 rows
nColStep = oPrn:nHorzRes() / 15 // We want 15 cols
PAGE
oPrn:SayBitmap( 1, 1, "..\bitmaps\fivewin.bmp" )
for n = 1 to 20 // rows
nCol = 0
oPrn:Say( nRow, nCol, Str( n, 2 ), oFont )
nCol += nColStep
for m = 1 to 15
oPrn:Say( nRow, nCol, "+", oFont )
nCol += nColStep
next
nRow += nRowStep
next
oPrn:Line( 0, 0, nRow, nCol )
ENDPAGE
ENDPRINT
oFont:End() // Destroy the font object
return nil
//----------------------------------------------------------------------------//
procedure AppSys // XBase++ requirement
return
//----------------------------------------------------------------------------//
João Santos - São Paulo - Brasil
- FranciscoA
- Posts: 1964
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Como ajustar impresión por cambio en tamaño del papel
Giancarlo:
Talvez este trozo de codigo pueda ayudarte. Lo he usado en formatos de distintos tamaños de papel.
Saludos.
Talvez este trozo de codigo pueda ayudarte. Lo he usado en formatos de distintos tamaños de papel.
Code: Select all
PrnSetSize( nAnchPapel, nAltoPapel )
PRINT oPrn NAME "Documento"
oPrn:SetPortrait()
DEFINE FONT oFont NAME "Arial" SIZE 0, -10 OF oPrn
nRowStep := oPrn:nVertRes() / nMaxLineas // Lineas deseadas PRUEBA CON _ RESOLUCION
nColStep := oPrn:nHorzRes() / 80 // Columnas deseadas
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh1204-MySql-TMySql
Chinandega, Nicaragua.
Fwxh1204-MySql-TMySql
- FranciscoA
- Posts: 1964
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Como ajustar impresión por cambio en tamaño del papel
Upps!! Mientras escribía, Karinha lo posteaba.
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh1204-MySql-TMySql
Chinandega, Nicaragua.
Fwxh1204-MySql-TMySql
- gsabattino
- Posts: 100
- Joined: Fri Oct 14, 2005 12:03 am
- Location: Valencia, Venezuela
Re: Como ajustar impresión por cambio en tamaño del papel
chicos...
parece que no me he sabido explicar... jeje
el formato ya esta dibujado para papel Legal (8.5" x 14")... y eso tiene varios años funcionando así...
con la nueva normativa el problema no es en si definir el tamaño del papel... yo diría que ese es el problema menor...
lo que quiero evitar es el tener que hacer de nuevo el formato para que encaje en un papel de 8.5" x 13"...
y es allí a donde me gustaría llegar... escalar el formato, que ya esta hecho, para que se imprima en un papel que es 2.5cm mas corto...
claro que si eso no es posible, ni modo... a hacer el formato de nuevo... jeje
Sin embargo, Karinha, con ese ultimo código que posteastes me distes una idea para otra cosa...
Mil Gracias a los dos... y a ver que otra idea surge...
parece que no me he sabido explicar... jeje
el formato ya esta dibujado para papel Legal (8.5" x 14")... y eso tiene varios años funcionando así...
con la nueva normativa el problema no es en si definir el tamaño del papel... yo diría que ese es el problema menor...
lo que quiero evitar es el tener que hacer de nuevo el formato para que encaje en un papel de 8.5" x 13"...
y es allí a donde me gustaría llegar... escalar el formato, que ya esta hecho, para que se imprima en un papel que es 2.5cm mas corto...
claro que si eso no es posible, ni modo... a hacer el formato de nuevo... jeje
Sin embargo, Karinha, con ese ultimo código que posteastes me distes una idea para otra cosa...
Mil Gracias a los dos... y a ver que otra idea surge...