//--------------------------------//10 Tarjetas con Foto y Code-Bar en caja hoja tam carta
Function MyCarnet(cAlias)
local oPrn, oFont, oFont2, oFontCBar, oPen1, cIcon := ".\Gorra.ico"
//local cFontCBar := ".\EAN-13.ttf", cNombre := "EAN-13"
local cFontCBar := ".\Code3of9.TTF", cNombre := "Code3of9"
local cImagePath := "..\FOTOS\"
local aDir := {}, aDire := Directory( cImagePath +"*.*" )
local nWidth, nHeight, nWid,nHei
local n,i,nRow, nCol, nn, nRec, nImages:=0
local lStretch := .t. // to stretch image or not
Local aImage := {}, aNombre := {}, aCargo := {}, aCode := {}
local aImages:= {}, aNombres:= {}, aCargos:= {}, aCodes:= {}
local nRowStep:=0, nColStep:=0
local nCancel:=0, n2:=0, nLin:=0, aTokens
local nWdIcon:=0, nHtIcon:=0
//ARRAY CON LAS FOTOS Y OTROS DATOS
nRec := (cAlias)->(Recno())
(cAlias)->(dbgotop())
While (cAlias)->(!eof())
if ( n:= Ascan(aDire,{|a| a[1] = cFileNoExt(StrZero((cAlias)->Codigo,3))} )) != 0
AAdd( aDir, { aDire[ n,1 ],;
(cAlias)->nombre,;
(cAlias)->cargo ,;
StrZero((cAlias)->Codigo,3) ; //+ Alltrim(Upper((cAlias)->Nombre)) ;
} )
else
if ( n:= Ascan(aDire,{|a| a[1] = cFileNoExt("000")} )) != 0
AAdd( aDir, { aDire[ n,1 ],;
(cAlias)->nombre,;
(cAlias)->cargo ,;
StrZero((cAlias)->Codigo,3) ; //+ Substr(upper((cAlias)->nombre),1,9) ;
} )
endif
endif
(cAlias)->(dbSkip())
Enddo
(cAlias)->(dbGoTo(nRec))
SysRefresh()
//FIN ARRAY CON LAS FOTOS Y OTROS DATOS
//SEPARAMOS DATOS EN ARRAYS DIFERENTES
for n := 1 to Len( aDir ) step 2
For nn := 1 to 2
nImages ++
if nImages <= Len(aDir)
aadd(aImages, cImagePath + aDir[ nImages ][ 1 ])
aadd(aNombres, aDir[ nImages ][ 2 ])
aadd(aCargos, aDir[ nImages ][ 3 ])
aadd(aCodes, "*"+ aDir[ nImages ][ 4 ] +"*")
else
aadd(aImages, " ")
aadd(anombres, " ")
aadd(aCargos, " ")
aadd(aCodes, " ")
endif
Next
AAdd( aImage, aImages )
AAdd( aNombre, aNombres )
AAdd( aCargo, aCargos )
AAdd( aCode, aCodes )
aImages := {}
aNombres := {}
aCargos := {}
aCodes := {}
next
//FIN SEPARAMOS DATOS EN ARRAYS DIFERENTES
PrnSetSize(2160,2790) // tam carta
PrnPorTrait() // Vertical
IF ( nCancel := PrinterSetup(oPrn) ) == 0
return nil
ENDIF
AddFontResource( cFontCBar ) //cuando font no esta instalada en windows
PRINT oPrn NAME "Carnet" PREVIEW
DEFINE PEN oPen1 WIDTH 1
DEFINE FONT oFont NAME "Arial" SIZE 0,-10 OF oPrn BOLD
DEFINE FONT oFont2 NAME "Arial" SIZE 0,-12 OF oPrn BOLD
DEFINE FONT oFontCBar NAME cNombre SIZE 0,-16 OF oPrn
nRowStep := oPrn:nVertRes/60
nColStep := oPrn:nHorzRes/80
nHeight := nRowStep * 11 //alto del carnet : 12 (5 filas de carnets)
nWidth := nColStep * 32 //ancho del carnet: 33 (2 cols de carnets)
nHei := nHeight - (4 * nRowStep) //alto foto
nWid := nHei / 1.40 //ancho foto
nWdIcon :=1.5*nRowStep //ancho icon
nHtIcon :=1.5*nRowStep //alto icon
for n := 1 to Len( aImage ) step 5 //5 Carnets por hoja carta (5 carnets vert por 2 horizontales)
PAGE
nRow := 1 * nRowStep
nCol := 3 * nColStep
for i := n to Min( n + 4, Len( aImage ) )
if !Empty(aImage[ i, 1 ])
oPrn:Box(nRow,nCol, nRow+nHeight, nCol+nWidth, oPen1)
oPrn:SayImage( nRow+(2*nRowStep), nCol+(nWidth-(4*nColStep)), cIcon, nWdIcon, nHtIcon, nil, lStretch )
oPrn:SayImage( nRow+(2*nRowStep), nCol+(1*nColStep), aImage[ i, 1 ], nWid, nHei, nil, lStretch )
oPrn:Say( nRow+(nRowStep*.5), nCol+(1*nColStep), EMPRESA, oFont2)
aTokens := FA_Tokens(aNombre[i,1])
nLin := nRow+(nRowStep*2)
For n2 := 1 to len(aTokens)
nLin+=nRowStep
oPrn:Say( nLin, nCol+nWid+(3*nColStep), aTokens[n2], oFont)
Next
oPrn:Say( nRow+(nRowStep*7.5), nCol+nWid+(2*nRowStep), Capitalize(aCargo[i,1]), oFont)
oPrn:Say( nRow+(nRowStep*9.3), nCol+(1*nColStep), aCode[i,1], oFontCBar)
endif
if !Empty(aImage[ i, 2 ])
nCol += nWidth
oPrn:Box(nRow,nCol, nRow+nHeight, nCol+nWidth, oPen1)
oPrn:SayImage( nRow+(2*nRowStep), nCol+(nWidth-(4*nColStep)), cIcon, nWdIcon, nHtIcon, nil, lStretch )
oPrn:SayImage( nRow+(2*nRowStep), nCol+(1*nColStep), aImage[ i, 2 ], nWid, nHei, nil, lStretch )
oPrn:Say( nRow+(nRowStep*.5), nCol+(1*nColStep), EMPRESA, oFont2)
aTokens := FA_Tokens(aNombre[i,2])
nLin := nRow+(nRowStep*2)
For n2 := 1 to len(aTokens)
nLin+=nRowStep
oPrn:Say( nLin, nCol+nWid+(3*nColStep), aTokens[n2], oFont)
Next
oPrn:Say( nRow+(nRowStep*7.5), nCol +nWid+(2*nColStep), Capitalize(aCargo[i,2]), oFont)
oPrn:Say( nRow+(nRowStep*9.3), nCol+(1*nColStep), aCode[i,2], oFontCBar)
endif
nRow += nHeight
nCol := 3 * nColStep
next
ENDPAGE
next n
ENDPRINT
oFont:End()
oFont2:End()
oFontCBar:End()
oPen1:End()
*RemoveFontResource( cFontCBar ) //cuando font no esta instalada en windows
//Tarjeta() //probando otra font code-bar
return nil
//----------------------//DEVUELVE ARRAY CON NOMBRES, APELLIDOS, EN CADA LINEA
Function FA_Tokens(cString)
local aTokens := {}, cToken := "", n
For n := 1 to len(cString)
cToken := Upper( StrToken( cString, n ) )
if !Empty( cToken )
AAdd( aTokens, cToken )
endif
Next
Return aTokens