FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour imprimir rotulo con tprinter
Posts: 400
Joined: Fri May 11, 2007 08:20 PM
imprimir rotulo con tprinter
Posted: Tue Aug 02, 2011 08: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
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
Re: imprimir rotulo con tprinter
Posted: Tue Aug 02, 2011 09: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
Posts: 400
Joined: Fri May 11, 2007 08:20 PM
Re: imprimir rotulo con tprinter
Posted: Wed Aug 03, 2011 04: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
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
Re: imprimir rotulo con tprinter
Posted: Wed Aug 03, 2011 04: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
Posts: 400
Joined: Fri May 11, 2007 08:20 PM
Re: imprimir rotulo con tprinter
Posted: Fri Aug 05, 2011 02: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 (fw): Select all Collapse
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

Continue the discussion