Página 1 de 3

Problemas com Fonte de Codigo de Barras

Enviado: 06 Nov 2014 11:49
por frazato
Bom dia! estou fazendo uma rotina de impressão de etiquetas de código de barras usando as fontes ( EAN13,barcode font ) e todas as outras que achei no forum e não funciona até imprime as barras mais o leitor que tenho não le,fiz um teste gerando as barras pelo WORD usando as fontes e ficam diferente das fontes impressas no produto, minha pergunta existem alguma segredo para uso destas fontes ou tenho que usar alguma outra lib para gerar o codigo, estou usando o xharbour com win32prn.

Se alguém tiver alguma outra dica fico muito grato.

Frazato

Problemas com Fonte de Codigo de Barras

Enviado: 06 Nov 2014 12:23
por Itamar M. Lins Jr.
Vc pode usar OLE e continuar com word p/ imprimir as etiquetas.
Contudo, se informar mais tipo o código que está usando acredito que mais pessoas poderá auxiliar melhor.

Saudações,
Itamar M. Lins Jr.

Problemas com Fonte de Codigo de Barras

Enviado: 06 Nov 2014 14:11
por frazato
Boa tarde! obrigado pela resposta, segue o codigo que estou usando, esta gerando as barras só que o leitor de codigo de barras não le, estou usando um ean13 valido e estão ficando diferente as barras usando a que estou gerando com a que esta no produto fisico, ja testei todos os tipos de fontes que estao no codigo e nada, geram as barras mais o leitor não le!

Código: Selecionar todos

/****************************************
* Compilar: hbmk2 demo.prg -lhbwin
****************************************/
PROCEDURE Main()
   LOCAL nPrn := 1
   //LOCAL aPrn := WIN_PRINTERLIST()
   lOCAL aPrn := GetPrinters()  // Pega Impressoras

   CLS
   SETMODE(25,80)

   IF Empty( aPrn )
      Alert("Nenhuma impressora Instalada - Encerrando programa")
      QUIT
   ENDIF

   DO WHILE nPrn != 0
      CLS
      @ 3, 0 SAY "Escolha a impressora"
      @ 5, 9 TO MaxRow()-9, MaxCol()-9
      nPrn := AChoice( 6, 10, MaxRow() - 10, MaxCol() - 10, aPrn, .T.,, nPrn )
      IF nPrn != 0
         PrnTest( aPrn[ nPrn ] )
      ENDIF
   ENDDO

RETURN

*******************************************
Function PrnTest(cPrinterName)
*******************************************
local cTexto, nLinhas, nA, cLinha, oBMP
local oPrinter := win_prn():New(cPrinterName)

oPrinter:Landscape:= .F.
oPrinter:FormType:= 9
oprinter:SetPrintQuality(-1)
oPrinter:Copies:= 1

IF !oPrinter:Create()
   alert("ATENÇÃO !!! Não foi possivel Iniciar a Impressão, Favor Verificar se a Impressora esta Ligada.")
   return NIL
else
   IF !oPrinter:StartDoc("Codigo Barras")
      alert("ATENÇÃO !!! Não foi possivel Iniciar a Impressão, Favor Verificar a Impressora")
      Return NIL
   endif

   FOR TT=1 TO 2
      oPrinter:newline()
   NEXT

   *oPrinter:Bold(0)
   *oPrinter:TextOut("Teste impressao Codigo de Barras")

   *oPrinter:Bold(0)
   *oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 30 ), oPrinter:MM_TO_POSY( 60 ), "1234567890", "barcod39", 24, 0 )

   *oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 30 ), oPrinter:MM_TO_POSY( 80 ), "1234567890", "Code 128", 24, 0 )
	*
   *oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 30 ), oPrinter:MM_TO_POSY( 100 ), "1234567890", "Code-93", 24, 0 )
   
   
	nLinha1 := 10//5
   nColuna1:= 10//5
   
   nEtiquetas_Colunas := 11
   nMaximo_etq_formulario := 33//42
   nMaxColunas        := 3
   nColuna            := 1
   nEtiqueImpressa    := 0
   nMaxEtiquetaFolha  := 1
   //nSpaco_Entre_Coluna     := 5
   nSpaco_Entre_tag_Linhas := 15//15
   
   nPosicao_Coluna1    := 10 //15//0
   nPosicao_Coluna2    := 70
   nPosicao_Coluna3    := 150//130
   
   
   wListaEtiquetas := {}
   For x:= 1 to 27//100
       Aadd(wListaEtiquetas,{'Produto...'+Str(x,2),StrZero(7898352570134,13),'R$:'+Transf(x,"@EZ 9999.99"),'Codigo:'+str(x,5)})
   Next
   
   For i:= 1 to Len(wListaEtiquetas)
      cDescricao := wListaEtiquetas[i,1]
      cCodigoEan := wListaEtiquetas[i,2]
      cPrecoVenda:= wListaEtiquetas[i,3]
      cCodigoInterno:=wListaEtiquetas[i,4]
      
      
      oPrinter:Bold(0)
	  //oPrinter:TextAtFont( oPrinter:MM_TO_POSX( nLinha1  ), oPrinter:MM_TO_POSY( nColuna1 ), "DESCRICAO PRODUTO ", "Courier New", 10, 0 )
    //oPrinter:TextAtFont( oPrinter:MM_TO_POSX( nLinha1+5), oPrinter:MM_TO_POSY( nColuna1+7 ), "1234567890", "barcod39", 18, 0 )
   	*oPrinter:TextAtFont( oPrinter:MM_TO_POSX( nLinha1+30), oPrinter:MM_TO_POSY( nColuna1+7 ), "R$ 544,35", "Courier New", 12, 0 )
	   *oPrinter:TextAtFont( oPrinter:MM_TO_POSX( nLinha1   ), oPrinter:MM_TO_POSY( nColuna1+12 ), "Codigo:15766- Ean:654645444 ", "Courier New Bold", 09, 0 )
	   
	 //oPrinter:TextAtFont( oPrinter:MM_TO_POSX( nLinha1  ), oPrinter:MM_TO_POSY( nColuna1 ), cDescricao, "Courier New", 10, 0 )
    	//oPrinter:TextAtFont( oPrinter:MM_TO_POSX( nLinha1  ), oPrinter:MM_TO_POSY( nColuna1+7 ), cCodigoEan, "barcod39", 18, 0 )
    //	oPrinter:TextAtFont( oPrinter:MM_TO_POSX( nLinha1  ), oPrinter:MM_TO_POSY( nColuna1+7 ), cCodigoEan, "EAN-13", 26, 0 )
      //cCodigoEan := '7896733600043'
       //oPrinter:TextAtFont( oPrinter:MM_TO_POSX( nLinha1  ), oPrinter:MM_TO_POSY( nColuna1+7 ), cCodigoEan, "barcod39", 26,5 )  
		 	oPrinter:TextAtFont( oPrinter:MM_TO_POSX( nLinha1  ), oPrinter:MM_TO_POSY( nColuna1+7 ), cCodigoEan, "EAN-13", 26, 0 ) 
		 //oPrinter:TextAtFont( oPrinter:MM_TO_POSX( nLinha1  ), oPrinter:MM_TO_POSY( nColuna1+7 ), cCodigoEan, "Interleaved 2of5 NT", 25, 5 ) 
		//oPrinter:TextAtFont( oPrinter:MM_TO_POSX( nLinha1  ), oPrinter:MM_TO_POSY( nColuna1+7 ), cCodigoEan, "barcode font",26,0 )
    	
    	
   
   //Barcoding
     // oPrinter:TextAtFont( oPrinter:MM_TO_POSX( nLinha1  ), oPrinter:MM_TO_POSY( nColuna1+7 ), cCodigoEan, "barcodefont", 14, 10 )
   
   	//oPrinter:TextAtFont( oPrinter:MM_TO_POSX( nLinha1+30), oPrinter:MM_TO_POSY( nColuna1+7 ), cPrecoVenda, "Courier New", 12, 0 )
	   //oPrinter:TextAtFont( oPrinter:MM_TO_POSX( nLinha1   ), oPrinter:MM_TO_POSY( nColuna1+12 ), cCodigoInterno+' EAN:'+cCodigoEan, "Courier New Bold", 09, 0 )
	   
	   nLinha1 := nLinha1 
      nColuna1:= nColuna1+12+nSpaco_Entre_tag_Linhas
      nEtiqueImpressa ++
      
      If nEtiqueImpressa == nEtiquetas_Colunas
         nColuna++
         nEtiqueImpressa :=0
         nColuna1        :=nPosicao_Coluna1//10
      Endif
      If nColuna==1
      ElseIf nColuna==2
           nLinha1 := nPosicao_Coluna2//60
      ElseIf nColuna==3
      	  nLinha1 := nPosicao_Coluna3//120
      Else
		     nColuna1 := 10//5
      Endif
      If nMaxEtiquetaFolha++ >= nMaximo_etq_formulario// := 30
          oPrinter:newPage()
          nMaxEtiquetaFolha := 0
        	 nLinha1 := 10//5
          nColuna1:= nPosicao_Coluna1 //10//5
          nColuna := 1
      Endif
   Next	
	
   oPrinter:EndDoc()
   oPrinter:Destroy()
ENDIF
RETURN NIL

Problemas com Fonte de Codigo de Barras

Enviado: 06 Nov 2014 18:12
por Itamar M. Lins Jr.
O EAN 13 tem checagem de digito, voce não pode usar qualquer numero.
Voce pode habilitar ou não a checagem de digito no leitor e a impressão do digito.

Saudações,
Itamar M. Lins Jr.

Problemas com Fonte de Codigo de Barras

Enviado: 06 Nov 2014 19:50
por frazato
este código ean13 e valido peguei direto de um produto, só que quando imprimo usando a fonte ean32 gera diferente do impresso no produto, ai não le. fiz o teste usando o programa da pimaco e ele gera o ean32 igual ao do produto inclusive o calculo do digito esta OK.. sera q existe alguma de habilutatr a impressão com checagem de dígito pra eu não ter q configurar o leitor

Problemas com Fonte de Codigo de Barras

Enviado: 06 Nov 2014 20:11
por Itamar M. Lins Jr.
Essa fonte EAN13 que vc está usando é a mesma que usou no word ?
O tamanho do código tem que ser no padrão do leitor, é o mesmo tamanho que vc usou no word ?

Eu sei que não é a resposta que vc está querendo.
Eu lembrei que tinha visto um exemplo usando a hbzebra, quando passei a usar o MRBoleto achei fácil o uso.

Código: Selecionar todos

/* Copyright 2010 Viktor Szakats (vszakats.net/harbour) */

#require "hbzebra"
#require "hbhpdf"

PROCEDURE Main()

   LOCAL pdf := HPDF_New()
   LOCAL page := HPDF_AddPage( pdf )

   HPDF_Page_SetSize( page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_PORTRAIT )
   HPDF_Page_SetFontAndSize( page, HPDF_GetFont( pdf, "Helvetica", NIL ), 12 )

   DrawBarcode( page,  20,   1, "EAN13",      "477012345678" )
   DrawBarcode( page,  40,   1, "EAN8",       "1234567" )
   DrawBarcode( page,  60,   1, "UPCA",       "01234567891" )
   DrawBarcode( page,  80,   1, "UPCE",       "123456" )
   DrawBarcode( page, 100,   1, "CODE39",     "ABC123" )
   DrawBarcode( page, 120,   1, "CODE39",     "ABC123", HB_ZEBRA_FLAG_CHECKSUM )
   DrawBarcode( page, 140, 0.5, "CODE39",     "ABC123", HB_ZEBRA_FLAG_CHECKSUM + HB_ZEBRA_FLAG_WIDE2_5 )
   DrawBarcode( page, 160,   1, "CODE39",     "ABC123", HB_ZEBRA_FLAG_CHECKSUM + HB_ZEBRA_FLAG_WIDE3 )
   DrawBarcode( page, 180,   1, "ITF",        "1234", HB_ZEBRA_FLAG_WIDE3 )
   DrawBarcode( page, 200,   1, "ITF",        "12345678901", HB_ZEBRA_FLAG_CHECKSUM )
   DrawBarcode( page, 220,   1, "MSI",        "1234" )
   DrawBarcode( page, 240,   1, "MSI",        "1234", HB_ZEBRA_FLAG_CHECKSUM + HB_ZEBRA_FLAG_WIDE3 )
   DrawBarcode( page, 260,   1, "MSI",        "1234567", HB_ZEBRA_FLAG_CHECKSUM )
   DrawBarcode( page, 280,   1, "CODABAR",    "40156", HB_ZEBRA_FLAG_WIDE3 )
   DrawBarcode( page, 300,   1, "CODABAR",    "-1234", HB_ZEBRA_FLAG_WIDE3 )
   DrawBarcode( page, 320,   1, "CODE93",     "ABC-123" )
   DrawBarcode( page, 340,   1, "CODE93",     "TEST93" )
   DrawBarcode( page, 360,   1, "CODE11",     "12", HB_ZEBRA_FLAG_WIDE3 )
   DrawBarcode( page, 380,   1, "CODE11",     "1234567890", HB_ZEBRA_FLAG_CHECKSUM + HB_ZEBRA_FLAG_WIDE3 )
   DrawBarcode( page, 400,   1, "CODE128",    "Code 128" )
   DrawBarcode( page, 420,   1, "CODE128",    "1234567890" )
   DrawBarcode( page, 440,   1, "CODE128",    "Wikipedia" )
   DrawBarcode( page, 460,   1, "PDF417",     "Hello, World of Harbour!!! It's 2D barcode PDF417 :)" )
   DrawBarcode( page, 540,   1, "DATAMATRIX", "Hello, World of Harbour!!! It's 2D barcode DataMatrix :)" )
   DrawBarcode( page, 580,   1, "QRCODE",     "https://en.wikipedia.org/wiki/QR_Code" )

   FErase( hb_FNameExtSet( __FILE__, ".pdf" ) )
   ? HPDF_SaveToFile( pdf, hb_FNameExtSet( __FILE__, ".pdf" ) )

   RETURN

STATIC PROCEDURE DrawBarcode( page, nY, nLineWidth, cType, cCode, nFlags )

   LOCAL hZebra, nLineHeight, cTxt

   nY := HPDF_Page_GetHeight( page ) - nY

   SWITCH cType
   CASE "EAN13"      ; hZebra := hb_zebra_create_ean13( cCode, nFlags )   ; EXIT
   CASE "EAN8"       ; hZebra := hb_zebra_create_ean8( cCode, nFlags )    ; EXIT
   CASE "UPCA"       ; hZebra := hb_zebra_create_upca( cCode, nFlags )    ; EXIT
   CASE "UPCE"       ; hZebra := hb_zebra_create_upce( cCode, nFlags )    ; EXIT
   CASE "CODE39"     ; hZebra := hb_zebra_create_code39( cCode, nFlags )  ; EXIT
   CASE "ITF"        ; hZebra := hb_zebra_create_itf( cCode, nFlags )     ; EXIT
   CASE "MSI"        ; hZebra := hb_zebra_create_msi( cCode, nFlags )     ; EXIT
   CASE "CODABAR"    ; hZebra := hb_zebra_create_codabar( cCode, nFlags ) ; EXIT
   CASE "CODE93"     ; hZebra := hb_zebra_create_code93( cCode, nFlags )  ; EXIT
   CASE "CODE11"     ; hZebra := hb_zebra_create_code11( cCode, nFlags )  ; EXIT
   CASE "CODE128"    ; hZebra := hb_zebra_create_code128( cCode, nFlags ) ; EXIT
   CASE "PDF417"     ; hZebra := hb_zebra_create_pdf417( cCode, nFlags ); nLineHeight := nLineWidth * 3 ; EXIT
   CASE "DATAMATRIX" ; hZebra := hb_zebra_create_datamatrix( cCode, nFlags ); nLineHeight := nLineWidth ; EXIT
   CASE "QRCODE"     ; hZebra := hb_zebra_create_qrcode( cCode, nFlags ); nLineHeight := nLineWidth ; EXIT
   ENDSWITCH

   IF hZebra != NIL
      IF hb_zebra_geterror( hZebra ) == 0
         IF nLineHeight == NIL
            nLineHeight := 16
         ENDIF
         HPDF_Page_BeginText( page )
         HPDF_Page_TextOut( page, 40, nY - 13, cType )
         cTxt := hb_zebra_getcode( hZebra )
         IF Len( cTxt ) < 20
            HPDF_Page_TextOut( page, 150, nY - 13, cTxt )
         ENDIF
         HPDF_Page_EndText( page )
         hb_zebra_draw_hpdf( hZebra, page, 300, nY, nLineWidth, -nLineHeight )
      ELSE
         ? "Type", cType, "Code", cCode, "Error", hb_zebra_geterror( hZebra )
      ENDIF
      hb_zebra_destroy( hZebra )
   ELSE
      ? "Invalid barcode type", cType
   ENDIF

   RETURN

STATIC FUNCTION hb_zebra_draw_hpdf( hZebra, page, ... )

   IF hb_zebra_geterror( hZebra ) != 0
      RETURN HB_ZEBRA_ERROR_INVALIDZEBRA
   ENDIF

   hb_zebra_draw( hZebra, {| x, y, w, h | HPDF_Page_Rectangle( page, x, y, w, h ) }, ... )

   HPDF_Page_Fill( page )

   RETURN 0
Saudações,
Itamar M. Lins Jr.

Problemas com Fonte de Codigo de Barras

Enviado: 07 Nov 2014 00:18
por Jairo Maia
Olá Itamar,
Itamar M. Lins Jr. escreveu:Essa fonte EAN13 que vc está usando é a mesma que usou no word ?
Com certeza sim. Mas fontes do Windows não funcionam em [x]Harbour para impressão de código de barras. Não adianta insistir.

Olá Frazato,
Para imprimir códigos de barras com [x]Harbour, na minha opinião, não perca tempo. Estude a HbZebra. O exemplo postado pelo Itamar é um deles. E tenha em mente que você terá que pensar em pixels, e não Linha/Coluna. Esta é uma questão que (também na minha opinião) não é preocupação dos desenvolvedores, e com certeza pela baixa demanda. Isso fica por conta das contribs.

Problemas com Fonte de Codigo de Barras

Enviado: 07 Nov 2014 08:21
por frazato
Bom dia! muito obrigado pela resposta!
Tenho 2 duvidas?
1- E possivel compilar isso usando o xharbour?
2- Como compilo isso usando o harbour se nao consegui usar o xharbour?

Muito Obrigado, pela ajuda!

Frazato

Problemas com Fonte de Codigo de Barras

Enviado: 07 Nov 2014 12:43
por Jairo Maia
Olá Frazato,
frazato escreveu:1- E possivel compilar isso usando o xharbour?
Da minha parte não sei dizer como usar a hbzebra em xHarbour. Sempre usei com Harbour.

Descompacte o exemplo abaixo numa pasta e compile usando:

Código: Selecionar todos

Hbmk2 hbzebra -lhbzebra -lhbwin
Notas:
1 - Se for compilar com Harbour 3.0 precisa remover as chamadas para o QRCODE. QRCODE somente em Harbour 3.2 ou superior.
2 - Se você não tiver o Microsoft XPS Document Writer instalado, altere para a impressora padrão. Basta comentar as linhas do XPS Writer e descomentar as linhas da impressora padrão.

Problemas com Fonte de Codigo de Barras

Enviado: 07 Nov 2014 14:13
por frazato
Boa tarde! muito obrigado fiz o teste gerei o executável e imprimi agora o leitor le normal, agora tenho que ver ser funciona com o xharbour, caso não terei que procurar uma outra solução ou criar um executável somente para gerar as etiquetas, mais muito obrigado pela sua ajuda.

Frazato

Problemas com Fonte de Codigo de Barras

Enviado: 08 Nov 2014 09:28
por HASA
:-O
Bom dia, Itamar tentei enxugar o código e imprimir em uma impressora diretamente um QRCODE e não consegui montar, quando não da erro não imprimi, você tem algum pequeno exemplo em HARBOUR bem direto, selecionando uma impressora e enviando a impressão ?
:(
HASA

Problemas com Fonte de Codigo de Barras

Enviado: 08 Nov 2014 11:00
por Jairo Maia
Olá HASA,

Veja se o exemplo abaixo ajuda. Compilar usando:

Código: Selecionar todos

Hbmk2 qrcode -lhbzebra -lhbwin -lxhb

Problemas com Fonte de Codigo de Barras

Enviado: 08 Nov 2014 11:14
por HASA
:D
Bom dia, Jairo realmente está mais enxuto mas... não consigo traduzir ainda para imprimir na Minigui com Preview, mais valeu.
:)Pos
HASA

Problemas com Fonte de Codigo de Barras

Enviado: 10 Nov 2014 10:53
por HASA
:))
Caso interesse para alguém aqui tem um dica para imprimir com a MINIGUI http://www.hmgforum.com/viewtopic.php?f=6&t=3114#p28200
:xau
HASA

Problemas com Fonte de Codigo de Barras

Enviado: 10 Nov 2014 14:44
por frazato
Bom dia! Pegue parte código do Eolo para impressão de código de barras usando a fonte "BARRAS BIRO", que por sinal foi o unico que funciou usando as fontes, mais tenho um problema não consigo gerar o PDF usando o pdfcreator, o curioso é que foi a unica que deu problema para gerar o pdf, mais quando mando direto para a impressora funciona o e leitor também, se que existe algum problema com esta fonte( fiz o teste em maquinas diferentes Win7 e Win8).

Segue o parte do código que estou usando.!

Código: Selecionar todos

#define FORM_A4 9

#define PS_SOLID      0

#define RGB( nR,nG,nB ) ( nR + ( nG * 256 ) + ( nB * 256 * 256 ) )

#define BLACK     RGB( 0x0 ,0x0 ,0x0 )
#define BLUE     RGB( 0x0 ,0x0 ,0x85 )
#define GREEN     RGB( 0x0 ,0x85,0x0 )
#define CYAN     RGB( 0x0 ,0x85,0x85 )
#define RED      RGB( 0x85,0x0 ,0x0 )
#define MAGENTA    RGB( 0x85,0x0 ,0x85 )
#define BROWN     RGB( 0x85,0x85,0x0 )
#define WHITE     RGB( 0xC6,0xC6,0xC6 )



/****************************************
* Compilar: hbmk2 demo.prg -lhbwin
****************************************/
PROCEDURE Main()
   LOCAL nPrn := 1
   //LOCAL aPrn := WIN_PRINTERLIST()
   lOCAL aPrn := GetPrinters()  // Pega Impressoras

   CLS
   SETMODE(25,80)

   IF Empty( aPrn )
      Alert("Nenhuma impressora Instalada - Encerrando programa")
      QUIT
   ENDIF

 
   DO WHILE nPrn != 0
      CLS
      @ 3, 0 SAY "Escolha a impressora"
      @ 5, 9 TO MaxRow()-9, MaxCol()-9
      nPrn := AChoice( 6, 10, MaxRow() - 10, MaxCol() - 10, aPrn, .T.,, nPrn )
      IF nPrn != 0
         PrnTest( aPrn[ nPrn ] )
      ENDIF
      exit
   ENDDO

RETURN

*******************************************
Function PrnTest(cPrinterName)
*******************************************
local cTexto, nLinhas, nA, cLinha, oBMP
local oPrinter := win_prn():New(cPrinterName)

oPrinter:Landscape:= .F.
oPrinter:FormType:= 9
oprinter:SetPrintQuality(-1)
oPrinter:Copies:= 1

afontes:=oprinter:getfonts()
if !(ascan(afontes,{|aa| upper(aa[1])=="BARRAS BIRO"})>0) .and. ;
  (ascan(afontes,{|bb| upper(bb[1])=="ARIAL ROUNDED MT BOLD"})>0)
  oPrinter:destroy()
  * mensagem = fonte ausente
    Alert('falta fontes')
//  retu
Endif



IF !oPrinter:Create()
   alert("ATENÇÃO !!! Não foi possivel Iniciar a Impressão, Favor Verificar se a Impressora esta Ligada.")
   return NIL
else
   IF !oPrinter:StartDoc("Codigo Barras")
      alert("ATENÇÃO !!! Não foi possivel Iniciar a Impressão, Favor Verificar a Impressora")
      Return NIL
   endif

   FOR TT=1 TO 2
      oPrinter:newline()
   NEXT

   
   nLinha1 := 10//5
   nColuna1:= 10//5
   
 
		
  priv xxxxx:=alltrim('7898172866035')
  if len(xxxxx)=13
   xxxxx:=barraean13(xxxxx)
  elseif len(xxxxx)=8
   xxxxx:=barraean8(xxxxx)
  else
   xxxxx=padl(xxxxx,13,"0")
   xxxxx:=barraean13(xxxxx)
  endi

//   número do código de barras
   oPrinter:SetFont('Barras Biro',20,{3,7}, 400 )
//  oPrinter:setColor(preto00)
    alert(xxxxx)
  oPrinter:TextOutat(100,200,xxxxx,.f.,.f.,.f.)
  //  nLinha1 := 10
  //  nColuna1 := 10
  //	oPrinter:TextAtFont( oPrinter:MM_TO_POSX( nLinha1  ), oPrinter:MM_TO_POSY( nColuna1 ), xxxxx, "Barras Biro", 10, 0 )
   	//oPrinter:TextAtFont( oPrinter:MM_TO_POSX( nLinha1  ), oPrinter:MM_TO_POSY( nColuna1 ), xxxxx, "Courier New", 10, 0 )
		
		
		MemoWrit('c:\temp\Barras.txt',xxxxx)
	
   oPrinter:EndDoc()
   oPrinter:Destroy()
ENDIF
RETURN NIL



function carrega_produtos()
local witens := {}
go top
do while ! eof()
   for i:= 1 to quant_tag 
     Aadd(witens,{codigo,descricao,ean,Transf(preco_vend,'@EZ 9999.99')})
   next
   skip+1
   
enddo
return witens







***
*
* Barras EAN13
*
*

FUNCTION BarraEAN13( tcNumero )

LOCAL lnT, lcRetorno, lcSequencia
*LOCAL ARRAY laBarras(4, 10)
priv laBarras[4, 10]
lcRetorno = "FfF"

*-- Deve sempre ter 13 caracteres
IF LEN(tcNumero) <> 13
 RETURN ""
ENDIF

*-- Tabela A
laBarras[1, 1] = "fffFFfF"
laBarras[1, 2] = "ffFFffF"
laBarras[1, 3] = "ffFffFF" && Corrigido em 20010228
laBarras[1, 4] = "fFFFFfF"
laBarras[1, 5] = "fFfffFF"
laBarras[1, 6] = "fFFfffF"
laBarras[1, 7] = "fFfFFFF"
laBarras[1, 8] = "fFFFfFF"
laBarras[1, 9] = "fFFfFFF"
laBarras[1, 10] = "fffFfFF"

*-- Tabela B
laBarras[2, 1] = "fFffFFF"
laBarras[2, 2] = "fFFffFF"
laBarras[2, 3] = "ffFFfFF"
laBarras[2, 4] = "fFffffF"
laBarras[2, 5] = "ffFFFfF"
laBarras[2, 6] = "fFFFffF"
laBarras[2, 7] = "ffffFfF"
laBarras[2, 8] = "ffFfffF"
laBarras[2, 9] = "fffFffF"
laBarras[2, 10] = "ffFfFFF"

*-- Tabela C
laBarras[3, 1] = "FFFffFf"
laBarras[3, 2] = "FFffFFf"
laBarras[3, 3] = "FFfFFff"
laBarras[3, 4] = "FffffFf"
laBarras[3, 5] = "FfFFFff"
laBarras[3, 6] = "FffFFFf"
laBarras[3, 7] = "FfFffff"
laBarras[3, 8] = "FfffFff"
laBarras[3, 9] = "FffFfff"
laBarras[3, 10] = "FFFfFff"

*-- Tabela para definir primeiro caracter
laBarras[4, 1] = "111111"
laBarras[4, 2] = "112122"
laBarras[4, 3] = "112212"
laBarras[4, 4] = "112221"
laBarras[4, 5] = "121122"
laBarras[4, 6] = "122112"
laBarras[4, 7] = "122211"
laBarras[4, 8] = "121212"
laBarras[4, 9] = "121221"
laBarras[4, 10] = "122121"

*-- Pega a sequencia de tabela a usar
lcSequencia = laBarras[4, VAL(SUBSTR(tcNumero, 1, 1)) + 1]

*-- Apura do 2' ao 7' caracter
FOR lnT = 2 TO 7
 lcRetorno = lcRetorno +;
  laBarras[VAL(SUBSTR(lcSequencia, lnT - 1, 1)),;
  VAL(SUBSTR(tcNumero, lnT, 1)) + 1]
NEXT

*-- Coloca o meio
lcRetorno = lcRetorno + "fFfFf"

*-- Apura do 8' ao 13'
FOR lnT = 8 TO 13
 lcRetorno = lcRetorno +;
  laBarras[3, VAL(SUBSTR(tcNumero, lnT, 1)) + 1]
NEXT

*-- Acrescenta sequencia de finalizacao
lcRetorno = lcRetorno + "FfF"

RETURN lcRetorno

***
*
* Barras EAN8
*
*

FUNCTION BarraEAN8( tcNumero )

LOCAL lnT, lcRetorno
*LOCAL ARRAY laBarras(2, 10)
priv laBarras[2, 10]
lcRetorno = "FfF"

*-- Deve sempre ter 8 caracteres
IF LEN(tcNumero) <> 8
 RETURN ""
ENDIF

*-- Tabela A
laBarras[1, 1] = "fffFFfF"
laBarras[1, 2] = "ffFFffF"
laBarras[1, 3] = "ffFffFF" && Corrigido em 20010228
laBarras[1, 4] = "fFFFFfF"
laBarras[1, 5] = "fFfffFF"
laBarras[1, 6] = "fFFfffF"
laBarras[1, 7] = "fFfFFFF"
laBarras[1, 8] = "fFFFfFF"
laBarras[1, 9] = "fFFfFFF"
laBarras[1, 10] = "fffFfFF"

*-- Tabela C
laBarras[2, 1] = "FFFffFf"
laBarras[2, 2] = "FFffFFf"
laBarras[2, 3] = "FFfFFff"
laBarras[2, 4] = "FffffFf"
laBarras[2, 5] = "FfFFFff"
laBarras[2, 6] = "FffFFFf"
laBarras[2, 7] = "FfFffff"
laBarras[2, 8] = "FfffFff"
laBarras[2, 9] = "FffFfff"
laBarras[2, 10] = "FFFfFff"

*-- Apura do 1' ao 4' caracter
FOR lnT = 1 TO 4
 lcRetorno = lcRetorno +;
  laBarras[1, VAL(SUBSTR(tcNumero, lnT, 1)) + 1]
NEXT

*-- Coloca o meio
lcRetorno = lcRetorno + "fFfFf"

*-- Apura do 5' ao 8'
FOR lnT = 5 TO 8
 lcRetorno = lcRetorno +;
  laBarras[2, VAL(SUBSTR(tcNumero, lnT, 1)) + 1]
NEXT

*-- Acrescenta sequencia de finalizacao
lcRetorno = lcRetorno + "FfF"

RETURN lcRetorno