Impressao de Codigo de barras
Enviado: 06 Dez 2005 08:36
Pessoal, ve se alguem tem uma solucao pra isso.
Na impressao do codigo de barras da HP deskjet 692C esta saindo as letras que indicam o tipo da Barra e de vez em qndo nem sai o codigo de barras.
Agora , se eu mandar para a tela o arquivo do codigo de barras e depois mandar imprimir pelo Edit sai certinho.
O que pode ser isso
Obrigado por qualquer ajuda
abaixo esta o fonte de onde me inspirei, Faca o seguinte teste, digite
BARRAS HP LPT1 (reparem que vai sair umas letras aciam da barras)
e depois
BARRAS HP TESTE(ABRAM pelo Edit o arquivo teste.prg e mande imprimir, veja como sai certo)
/****************************************************
Exemplo de uso da fun‡Æo CodBar()
por <maurilio@microsafety.com.br>
clipper barras.prg /n /b
rtlink fi barras
EX.: BARRAS HP TESTE
*******************************************************/
function Exemplo( cPrn, cPorta )
local I
local aNum
//aNum:= {[7896778500773]}
aNum:= {[0000000101011]}
if Empty( cPrn ) .or. Empty( cPorta )
return nil
endif
set printer to "prov.txt"
Set( 20, [PRINTER] )
Set( 24, cPorta ) // Ser criado um arquivo de nome barras.prn
SetPrc( 0, 0 )
DevOut( Codbar( aNum, cPrn, 05, 15, 06 ) )
// ³ ³ ³
// ³ ³ ÀÄ> ALTURA DAS BARRAS
// ³ ³
// ³ ÀÄÄÄÄ> ESPACO ENTRE AS BARRAS
// ³
// ÀÄÄÄÄÄÄÄÄ> MARGEM
DevOut( Chr( 12 ) )
Set( 20, [SCREEN] )
return nil
/*****************************************************/
FUNCTION CODBAR( ANUM, CIMP, NESQ, NESP, NALT )
local I , J , cBar , aTab , cFlag , nPos , cNum , aBar , cLF
Def( @aNum, {}, [A] )
Def( @nEsq, 0, [N] )
Def( @nEsp, 1, [N] )
cLF:= Chr( 13 ) +Chr( 10 )
FOR I:= 1 TO LEN( ANUM )
IF VALTYPE( ANUM ) # [C] .OR. LEN( ANUM ) # 13
RETURN []
ENDIF
NEXT
// Esq A Esq B Dir Flag
//------- ------- ------- ------
aTab:= {;
{ [0001101], [0100111], [1110010], [111111] },; // 0
{ [0011001], [0110011], [1100110], [112122] },; // 1
{ [0010011], [0011011], [1101100], [112212] },; // 2
{ [0111101], [0100001], [1000010], [112221] },; // 3
{ [0100011], [0011101], [1011100], [121122] },; // 4
{ [0110001], [0111001], [1001110], [122112] },; // 5
{ [0101111], [0000101], [1010000], [122211] },; // 6
{ [0111011], [0010001], [1000100], [121212] },; // 7
{ [0110111], [0001001], [1001000], [121221] },; // 8
{ [0001011], [0010111], [1110100], [122121] } } // 9
cNum:= []
cBar:= []
aBar:= {}
cImp:= Upper( cImp )
FOR I:= 1 TO LEN( ANUM )
CFLAG:= ATAB[VAL( LEFT( ANUM, 1 ) ) +1,4]
CBAR += [101]
FOR J:= 1 TO 6
NPOS:= VAL( SUBSTR( ANUM, J +1, 1 ) ) +1
CBAR+= ATAB[NPOS,VAL( SUBSTR( CFLAG, J, 1 ) )]
NEXT
CBAR+= [01010]
FOR J:= 1 TO 6
NPOS:= VAL( SUBSTR( ANUM, J +7, 1 ) ) +1
CBAR+= ATAB[NPOS,3]
NEXT
CBAR+= [101]
IF CIMP = [HP]
CNUM+= ANUM
IF I < LEN( ANUM )
CBAR+= REPLICATE( [0], 2 +ROUND( NESP * 7.5, 0 ) )
CNUM+= SPACE( NESP )
ENDIF
ELSE
RETURN []
ENDIF
NEXT
IF CIMP = [HP]
CBAR:= SPACE( NESQ ) +HP( CBAR, NALT ) +CLF +SPACE( NESQ ) +CNUM +CLF
ENDIF
RETURN CBAR
/*******************************************************/
STATIC FUNCTION HP( CBAR, NALT )
local I , N , cRet
Def( @nAlt, 5, [N])
N:= Len( cBar )
if N % 8 # 0
cBar+= Replicate( [0], 8 -(N % 8) )
endif
N:= Int( Len( cBar ) / 8)
cRet:= Chr( 27 ) +[*r1A] +Chr( 27 ) +[*b] +LTrim( Str( N ) ) +[W]
for I:= 1 to N
cRet+= Chr( Bin2Dec( SubStr( cBar, (I -1) * 8 +1, 8 ) ) )
next
N:= Round( (nAlt -1) * 12.5 -14, 0 )
for I:= 1 to N
cRet+= Chr( 27 ) +[*b3m0W]
next
cRet+= Chr( 27 ) +[*rbC]
RETURN CRET
/*********************************************************/
static function Bin2Dec( cBin )
local I
local J
local nDec
nDec:= 0
J:= Len( cBin )
I:= 0
while J > 0
if SubStr( cBin, J, 1 ) = [1]
nDec+= 2 ^ I
endif
J--
I++
enddo
RETURN NDEC
/*********************************************************/
STATIC FUNCTION DEF( XVAR, XNOVO, CTIPO )
if ! ( ValType( xVar ) $ Upper( cTipo ) )
return xVar:= xNovo
endif
RETURN XVAR
Na impressao do codigo de barras da HP deskjet 692C esta saindo as letras que indicam o tipo da Barra e de vez em qndo nem sai o codigo de barras.
Agora , se eu mandar para a tela o arquivo do codigo de barras e depois mandar imprimir pelo Edit sai certinho.
O que pode ser isso
Obrigado por qualquer ajuda
abaixo esta o fonte de onde me inspirei, Faca o seguinte teste, digite
BARRAS HP LPT1 (reparem que vai sair umas letras aciam da barras)
e depois
BARRAS HP TESTE(ABRAM pelo Edit o arquivo teste.prg e mande imprimir, veja como sai certo)
/****************************************************
Exemplo de uso da fun‡Æo CodBar()
por <maurilio@microsafety.com.br>
clipper barras.prg /n /b
rtlink fi barras
EX.: BARRAS HP TESTE
*******************************************************/
function Exemplo( cPrn, cPorta )
local I
local aNum
//aNum:= {[7896778500773]}
aNum:= {[0000000101011]}
if Empty( cPrn ) .or. Empty( cPorta )
return nil
endif
set printer to "prov.txt"
Set( 20, [PRINTER] )
Set( 24, cPorta ) // Ser criado um arquivo de nome barras.prn
SetPrc( 0, 0 )
DevOut( Codbar( aNum, cPrn, 05, 15, 06 ) )
// ³ ³ ³
// ³ ³ ÀÄ> ALTURA DAS BARRAS
// ³ ³
// ³ ÀÄÄÄÄ> ESPACO ENTRE AS BARRAS
// ³
// ÀÄÄÄÄÄÄÄÄ> MARGEM
DevOut( Chr( 12 ) )
Set( 20, [SCREEN] )
return nil
/*****************************************************/
FUNCTION CODBAR( ANUM, CIMP, NESQ, NESP, NALT )
local I , J , cBar , aTab , cFlag , nPos , cNum , aBar , cLF
Def( @aNum, {}, [A] )
Def( @nEsq, 0, [N] )
Def( @nEsp, 1, [N] )
cLF:= Chr( 13 ) +Chr( 10 )
FOR I:= 1 TO LEN( ANUM )
IF VALTYPE( ANUM ) # [C] .OR. LEN( ANUM ) # 13
RETURN []
ENDIF
NEXT
// Esq A Esq B Dir Flag
//------- ------- ------- ------
aTab:= {;
{ [0001101], [0100111], [1110010], [111111] },; // 0
{ [0011001], [0110011], [1100110], [112122] },; // 1
{ [0010011], [0011011], [1101100], [112212] },; // 2
{ [0111101], [0100001], [1000010], [112221] },; // 3
{ [0100011], [0011101], [1011100], [121122] },; // 4
{ [0110001], [0111001], [1001110], [122112] },; // 5
{ [0101111], [0000101], [1010000], [122211] },; // 6
{ [0111011], [0010001], [1000100], [121212] },; // 7
{ [0110111], [0001001], [1001000], [121221] },; // 8
{ [0001011], [0010111], [1110100], [122121] } } // 9
cNum:= []
cBar:= []
aBar:= {}
cImp:= Upper( cImp )
FOR I:= 1 TO LEN( ANUM )
CFLAG:= ATAB[VAL( LEFT( ANUM, 1 ) ) +1,4]
CBAR += [101]
FOR J:= 1 TO 6
NPOS:= VAL( SUBSTR( ANUM, J +1, 1 ) ) +1
CBAR+= ATAB[NPOS,VAL( SUBSTR( CFLAG, J, 1 ) )]
NEXT
CBAR+= [01010]
FOR J:= 1 TO 6
NPOS:= VAL( SUBSTR( ANUM, J +7, 1 ) ) +1
CBAR+= ATAB[NPOS,3]
NEXT
CBAR+= [101]
IF CIMP = [HP]
CNUM+= ANUM
IF I < LEN( ANUM )
CBAR+= REPLICATE( [0], 2 +ROUND( NESP * 7.5, 0 ) )
CNUM+= SPACE( NESP )
ENDIF
ELSE
RETURN []
ENDIF
NEXT
IF CIMP = [HP]
CBAR:= SPACE( NESQ ) +HP( CBAR, NALT ) +CLF +SPACE( NESQ ) +CNUM +CLF
ENDIF
RETURN CBAR
/*******************************************************/
STATIC FUNCTION HP( CBAR, NALT )
local I , N , cRet
Def( @nAlt, 5, [N])
N:= Len( cBar )
if N % 8 # 0
cBar+= Replicate( [0], 8 -(N % 8) )
endif
N:= Int( Len( cBar ) / 8)
cRet:= Chr( 27 ) +[*r1A] +Chr( 27 ) +[*b] +LTrim( Str( N ) ) +[W]
for I:= 1 to N
cRet+= Chr( Bin2Dec( SubStr( cBar, (I -1) * 8 +1, 8 ) ) )
next
N:= Round( (nAlt -1) * 12.5 -14, 0 )
for I:= 1 to N
cRet+= Chr( 27 ) +[*b3m0W]
next
cRet+= Chr( 27 ) +[*rbC]
RETURN CRET
/*********************************************************/
static function Bin2Dec( cBin )
local I
local J
local nDec
nDec:= 0
J:= Len( cBin )
I:= 0
while J > 0
if SubStr( cBin, J, 1 ) = [1]
nDec+= 2 ^ I
endif
J--
I++
enddo
RETURN NDEC
/*********************************************************/
STATIC FUNCTION DEF( XVAR, XNOVO, CTIPO )
if ! ( ValType( xVar ) $ Upper( cTipo ) )
return xVar:= xNovo
endif
RETURN XVAR