Página 1 de 1

Impressao de Codigo de barras

Enviado: 06 Dez 2005 08:36
por negrao
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

Enviado: 06 Dez 2005 13:40
por jpalma
Veja na pagina do Wagner Nunes. Ele desenvolveu o programa PRWIN que alem de outras funções tambem imprime CODIGO DE BARRAS.

sds