imprimir rotulo con tprinter

imprimir rotulo con tprinter

Postby artu01 » Tue Aug 02, 2011 8:41 pm

Gente
Quiero imprimir un texto en la mitad de una hoja A4 apaisada

Hago asi:
PRINT oPrn NAME "ROTULO" PREVIEW
cFont := "Arial"
oPrn:SetPage(9)
oPrn:SetLandscape()

DEFINE FONT oFont NAME cFont SIZE 0,45 BOLD OF oPrn

cCad1:="HIPOLITO SAMUEL BENDEZU CUADROS"

aCoord:= oPrn:Cmtr2Pix( 29.7, 21 )
nfilpix:=int(aCoord[2]/2) // mitad de fila en pixeles

nfilmm:= nfilpix * 25.4 / oPrn:nLogPixelX() // convierto los pixeles en mm
nfilcm := nFilmm/10 // convierto los mm en cm.
PAGE

oPrn:CmSay(nfilcm,1,cCad1, oFont,,,0)
¿Me falta hallar el ancho del texto para que éste salga centrado y
si el texto tiene muchas letras, poder cambiar el tamaño del texto hasta
que encaje en una sola linea, me dejo entender ?



ENDPAGE
ENDPRINT

oFont := Nil
oPrn := Nil

Espero sus comentarios
Gracias
Arturo
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 399
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: imprimir rotulo con tprinter

Postby Francisco Horta » Tue Aug 02, 2011 9:37 pm

arturo,
si tu forma es A4
prueba a hacerlo asi:

oPrn:CmSay( 10.5, 14, "Mi texto centrado",tufont,,,,2)

te lo centra automatico
donde 10.5 y 14 son la mitad de la hoja
saluds
paco
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: imprimir rotulo con tprinter

Postby artu01 » Wed Aug 03, 2011 4:25 am

gracias paco ya lo centra
ahora quiero hacer que cualquier texto q imprima salga en una sola linea
si es preciso achicar el font que empezare de 45 pts e ir reduciendolo en 1 pto hasta que encaje mi texto en una sola linea, es posible hacer eso?
tengo alguna idea usando estos comandos

nanchohoja:=oPrn:nHorzRes()
nanchotexto:=oPrn:GetTextWidth( cCad, oFont )

PRINT oPrn NAME "ROTULO" PREVIEW
cFont := "Arial"
oPrn:SetPage(9)
oPrn:SetLandscape()
DEFINE FONT oFont NAME cFont SIZE 0,45 BOLD OF oPrn

PAGE
Do while .t.
nanchohoja:=oPrn:nHorzRes() // no estoy seguro si me devuelve el ancho en pixeles de mi hoja
nanchotexto:=oPrn:GetTextWidth( cCad1, oFont ) // tampoco se si este es el ancho en pixeles de mi texto

if nanchotexto > nanchohoja
DEFINE FONT oFont NAME cFont SIZE 0,44 BOLD OF oPrn // tendria que hacer una rutina que vaya decreciendo en 1 hasta
// saber si el ancho de mi cad es menor al ancho de mi pag.
// no se como hacer eso?
else
oPrn:CmSay(nfilcm,14,cCad1, oFont,,,,2) // aqui con este tamaño de ofont si encaja mi texto
exit
endif
enddo
ENDPAGE
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 399
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: imprimir rotulo con tprinter

Postby Francisco Horta » Wed Aug 03, 2011 4:00 pm

Arturo,

puedes usar oPrn:nHorzRes() y oPrn:GetTextWidht("ARTURO",oFont)
y si es corecto,

se me ocurre que pruebes con un pequeño bucle asi:

PRINT oPrn NAME "ROTULO" PREVIEW
DEFINE FONT oFont NAME "ARIAL" SIZE 0, -45 BOLD OF oPrn
nanchohoja:=oPrn:nHorzRes()
nanchotexto:=oPrn:GetTextWidth( cCad, oFont )

if nanchotexto > nanchohoja
DO WHILE .T.
FOR x := 44 to 1 STEP -1
oFont:nHeight(x) ó oFont:Modify(x)
oFont:Refresh()
nanchotexto:=oPrn:GetTextWidth( cCad, oFont )
IF nanchotexto < nanchohoja
EXIT
ENDIF
NEXT
ENDDO
endif

algo asi prueba y comentas
saludos
paco
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: imprimir rotulo con tprinter

Postby artu01 » Fri Aug 05, 2011 2:21 am

Gracias paco ya termine mi programa y lo hice asi
Claro que a veces no lo saca bien centrado creo q depende de la cantidad de texto que haya pero si esta aceptable
Lo raro es que tengo q ponerlo en negativo al ptje del font para que calcule la anchura en pixeles correctamente al menos me parece
porque con valor positivo sale otro numero... no entiendo muy bien como trabajo pero en fin

Gracias


Code: Select all  Expand view
FUNCTION RRotulo()
   LOCAL cfont, cCad1, cCad2, cCad3, aTam:={}, aCoord:={}, nfilpix, nfilcm, nfilmm, nancho
   local ntamp, x, nanchotexto, nanchohoja, lok, nx
   local aLen:={}, nMax, cCadlarga, i, ncolpix, ncolmm, ncolcm

   cCad1:=alltrim(DATOS->CliRot)
   cCad2:=Alltrim(DATOS->DirRot)
   cCad3:=upper(Alltrim(UBICA->Descri))

   aLen:= {len(alltrim(cCad1)), len(alltrim(cCad2)), len(alltrim(cCad3))}
   nMax:= Max(len(alltrim(cCad1)), len(alltrim(cCad2)))
   nMax:= Max(nMax, len(alltrim(cCad3)))
   for i:=1 to 3
    IF aLen[i]=nMax
      exit
    endif
   next
   cCadlarga:= "cCad"+Str(i,1)

    PRINT oPrn NAME "ROTULO" PREVIEW
      cFont := "Arial"
      oPrn:SetPage(1)

      oPrn:SetLandscape()

      DEFINE FONT oFont NAME "ARIAL" SIZE 0, -45 BOLD OF oPrn
      nanchohoja:=oPrn:nHorzRes()


      Do Case
        Case i=1
          nanchotexto:=oPrn:GetTextWidth( cCad1, oFont )
        Case i=2
          nanchotexto:=oPrn:GetTextWidth( cCad2, oFont )
        Case i=3
          nanchotexto:=oPrn:GetTextWidth( cCad3, oFont )
      EndCase
      aCoord:= oPrn:Cmtr2Pix( 27.94, 21.59 )
      ncolpix:=int(aCoord[1]/2)                    // mitad de col en pixeles
      ncolmm:= ncolpix * 25.4 / oPrn:nLogPixely()  // convierto los pixeles en mm
      ncolcm := ncolmm/10                         // convierto los mm en cm.

      if nanchotexto > nanchohoja
        lok:=.t.
        DO WHILE lok
          FOR x := 44 to 1 STEP -0.5
            oFont := Nil
            nx:=x*-1
            DEFINE FONT oFont NAME "ARIAL" SIZE 0, (nx) BOLD OF oPrn
            Do Case
              Case i=1
                nanchotexto:=oPrn:GetTextWidth( cCad1, oFont )
              Case i=2
                nanchotexto:=oPrn:GetTextWidth( cCad2, oFont )
              Case i=3
                nanchotexto:=oPrn:GetTextWidth( cCad3, oFont )
            EndCase
            IF nanchotexto < nanchohoja
              lok:=.f.
              EXIT
            ENDIF
          NEXT
        ENDDO
      else
        nx:=-45
      endif
      DEFINE FONT oFont NAME "ARIAL" SIZE -35, (nx) BOLD OF oPrn
      PAGE
        oPrn:CmSay(6.5,nColcm,cCad1, oFont,,,,2)
        oPrn:CmSay(9,nColcm,cCad2, oFont,,,,2)
        oPrn:CmSay(11.5,nColcm,cCad3, oFont,,,,2)

      ENDPAGE
    ENDPRINT

   oFont := Nil
   oPrn  := Nil

RETURN Nil
 
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 399
Joined: Fri May 11, 2007 8:20 pm
Location: Lima


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: cmsoft and 129 guests