Fonte para Boleto Bancário

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Fonte para Boleto Bancário

Mensagem por Eolo »

Bão, não sei se vou fazer chover no molhado, mas aqui vai: fonte TTF para imprimir código de barras de Boleto Bancário (e outros), via Win32prn().

Primeiro, o crédito: o Robson SCOM me pediu, mas eu não tinha. Aí cutuquei o Leo Celista, que tinha a receita e me passou. E agora, 'autorizado' pelo Leo, eu distribuo pra todos. A propósito: o Alamino lembrou que tem um xHarbour Boleto ou coisa parecida, mas até onde eu soube ele imprime em HTML. Não que isto seja um impedimento, mas com o pacote que estou colocando no ar agora, dá pra imprimir via Win32prn().

Eu testei (só o "Barra 2 de 5 Intercalado", código do boleto) e funciona. O Robson também testou com sucesso. É só fazer, por exemplo (e resumidamente):

num:="12345678901234567890123456789012345678901234"
col=oprinter:mm_to_posX(100)
lin=oprinter:mm_to_posY(30)
setpos(col,lin)
oPrinter:SetFont('BARRAS BIRO',15,{3,25})
oPrinter:TextOutat(col,lin,Barra25i(num),.f.,.f.,1)

Precisa (obviamente) acertar a posição de impressão desejada através dos parâmetros das funções mm_to_posX e mm_to_posy, e também acertar a altura e comprimento da fonte (em oPrinter:SetFont('BARRAS BIRO',15,{3,25}))

No seguinte link, estão o arquivo da fonte TTF e também um arquivo PDF com as especificações técnicas de impressão do boleto (Banco do Brasil):

http://rapidshare.com/files/253360171/b ... o.zip.html

Bom proveito!

Eolo

Código: Selecionar todos

* Codigo de Barras Facil
*
* Estas funcoes para impressão de codigo de barras devem ser usadas com
* a fonte BARRAS2.TTF (Barras Biro).
*
* Esta fonte possui apenas as seguintes letras:
* f - espaco fino
* F - barra fina
* m - espaco medio
* M - barra media
* g - espaco grosso
* G - barra grossa
* s - espaco super grosso
* S - barra super grossa
* x - espaco extra grosso
* X - barra extra grossa
*
* As funcoes abaixo apenas geram sequencias de fFmMgGsSxX que vao
* formar as barras.
*
* Neste PRG seguem 5 exemplos de funcoes para geracao do codigo de
* barras 2 de 5 industrial, 2 de 5 intercalado, 3 de 9, EAN8, EAN13 e 128B.
*
* Para usar as funcoes abaixo basta chamar a funcao, passando o
* codigo desejado. Selecionar a fonte Barras Biro e o tamanho apropriado.
* Se a barra ficar muito estreita crie outra linha identica e cole
* embaixo.
* 
* Exemplos:
*
* Barra25("1234567890")    && Fonte Barras Biro, Tamanho 20
* Barra25i("1234567890")   && Fonte Barras Biro, Tamanho 20
* Barra39("*1234567890*")  && Fonte Barras Biro, Tamanho 20
*
*********************************************************************
* IMPORTANTE:                                                       *
* SEMPRE FACA MUITOS TESTES DE LEITURA COM VARIOS CODIGOS ANTES DE  *
* LIBERAR A IMPRESSAO DE BARRAS PARA SEUS CLIENTES.                 *
*********************************************************************
*
* Esta fonte (BARRAS2.TTF Barras Biro) e as funcoes Barra25, Barra25i,
* Barra39, BarraEAN8, BarraEAN13 e Barra128B podem ser livremente usadas e
* alteradas.
*
* Claudio Gaspar Martins (cgmartins@biro.com.br)
* Biro Processamento de Dados Ltda
* Novo Hamburgo - RS - Brasil
* Dezembro, 1999
*
*
* Historico das revisoes (YYYY/MM/DD):
* 2001/02/28 - Corrigida tabela A nas funcoes EAN13 e EAN8
* 2003/08/21 - Adicionada função Barra128b para geração de barras padrão 128B
*              Contribuição de Ezequiel Júnior Zemolin (ezequiel@slcagricola.com.br)
*
*


***
*
* Barra 2 de 5 Industrial
*
*

FUNCTION Barra25( tcNumero )

LOCAL lnT, lcRetorno, lnTamanho
LOCAL ARRAY laBarras(10)
lcRetorno  = "GfGfFf"      && Sequencia inicial
lnTamanho  = LEN(tcNumero)

*-- Sequencias fixas
laBarras[1] = "FfFfGfGfFf"
laBarras[2] = "GfFfFfFfGf"
laBarras[3] = "FfGfFfFfGf"
laBarras[4] = "GfGfFfFfFf"
laBarras[5] = "FfFfGfFfGf"
laBarras[6] = "GfFfGfFfFf"
laBarras[7] = "FfGfGfFfFf"
laBarras[8] = "FfFfFfGfGf"
laBarras[9] = "GfFfFfGfFf"
laBarras[10] = "FfGfFfGfFf"

FOR lnT = 1 TO lnTamanho
    lcRetorno = lcRetorno + laBarras[VAL(SUBSTR(tcNumero, lnT, 1)) + 1]
NEXT

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

RETURN lcRetorno

***
*
* Barra 2 de 5 Intercalado
*
*

FUNCTION Barra25i( tcNumero )

*-- Variaveis
LOCAL lnT, lnU, lcBarras, lcEspacos, lcRetorno, lnTamanho
LOCAL ARRAY laBarras(10)
lcRetorno = "FfFf"        && Sequencia inicial
lnTamanho = LEN(tcNumero)

*-- Sequencias
laBarras[1] = "00110"
laBarras[2] = "10001"
laBarras[3] = "01001"
laBarras[4] = "11000"
laBarras[5] = "00101"
laBarras[6] = "10100"
laBarras[7] = "01100"
laBarras[8] = "00011"
laBarras[9] = "10010"
laBarras[10] = "01010"

*-- Se quantidade de caracteres nao for par coloca 0 na frente
IF lnTamanho % 2 <> 0
	tcNumero = "0" + tcNumero
ENDIF

FOR lnT = 1 TO lnTamanho STEP 2

    *-- Pega os 0 e 1
    lcBarras  = laBarras[VAL(SUBSTR(tcNumero, lnT, 1)) + 1]
    lcEspacos = laBarras[VAL(SUBSTR(tcNumero, lnT + 1, 1)) + 1]

    *-- Combima as barras e os espacos
    FOR lnU = 1 TO 5
        lcRetorno = lcRetorno + IIF(SUBSTR(lcBarras, lnU, 1) == "0", "F", "G")
        lcRetorno = lcRetorno + IIF(SUBSTR(lcEspacos, lnU, 1) == "0", "f", "g")
    NEXT

NEXT

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

RETURN lcRetorno

***
*
* Barra 3 de 9
* 
* OBSERVACAO: Alguns leitores exigem o * como prefixo e sufixo do codigo
*
*

FUNCTION Barra39( tcNumero )

LOCAL lnT, lnPosicao, lcRetorno, lnTamanho, lcCaracteres
LOCAL ARRAY laBarras(44)
lcRetorno   = ""
lnTamanho   = LEN(tcNumero)
lcCaracteres = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ-.#*$/+%"

*-- Sequencias
laBarras[1] = "GfFgFfFfGf"
laBarras[2] = "FfGgFfFfGf"
laBarras[3] = "GfGgFfFfFf"
laBarras[4] = "FfFgGfFfGf"
laBarras[5] = "GfFgGfFfFf"
laBarras[6] = "FfGgGfFfFf"
laBarras[7] = "FfFgFfGfGf"
laBarras[8] = "GfFgFfGfFf"
laBarras[9] = "FfGgFfGfFf"
laBarras[10] = "FfFgGfGfFf"
laBarras[11] = "GfFfFgFfGf"
laBarras[12] = "FfGfFgFfGf"
laBarras[13] = "GfGfFgFfFf"
laBarras[14] = "FfFfGgFfGf"
laBarras[15] = "GfFfGgFfFf"
laBarras[16] = "FfGfGgFfFf"
laBarras[17] = "FfFfFgGfGf"
laBarras[18] = "GfFfFgGfFf"
laBarras[19] = "FfGfFgGfFf"
laBarras[20] = "FfFfGgGfFf"
laBarras[21] = "GfFfFfFgGf"
laBarras[22] = "FfGfFfFgGf"
laBarras[23] = "GfGfFfFgFf"
laBarras[24] = "FfFfGfFgGf"
laBarras[25] = "GfFfGfFgFf"
laBarras[26] = "FfGfGfFgFf"
laBarras[27] = "FfFfFfGgGf"
laBarras[28] = "GfFfFfGgFf"
laBarras[29] = "FfGfFfGgFf"
laBarras[30] = "FfFfGfGgFf"
laBarras[31] = "GgFfFfFfGf"
laBarras[32] = "FgGfFfFfGf"
laBarras[33] = "GgGfFfFfFf"
laBarras[34] = "FgFfGfFfGf"
laBarras[35] = "GgFfGfFfFf"
laBarras[36] = "FgGfGfFfFf"
laBarras[37] = "FgFfFfGfGf"
laBarras[38] = "GgFfFfGfFf"
laBarras[39] = "FgGfFfGfFf"
laBarras[40] = "FgFfGfGfFf"
laBarras[41] = "FgFgFgFfFf"
laBarras[42] = "FgFgFfFgFf"
laBarras[43] = "FgFfFgFgFf"
laBarras[44] = "FfFgFgFgFf"

FOR lnT = 1 TO lnTamanho

	lnPosicao = AT(SUBSTR(tcNumero, lnT, 1), lcCaracteres)
    IF lnPosicao > 0
        lcRetorno = lcRetorno + laBarras[lnPosicao]
    ENDIF

NEXT

RETURN lcRetorno

***
*
* Barras EAN13
*
*

FUNCTION BarraEAN13( tcNumero )

LOCAL lnT, lcRetorno, lcSequencia
LOCAL ARRAY 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)
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

***
*
* Barras Padrão 128-B
* Contribuição de Ezequiel Júnior Zemolin (ezequiel@slcagricola.com.br)
*
*

FUNCTION Barra128B( tcNumero )

LOCAL lnT, lnPosicao, lcRetorno, lnTamanho, lcCaracteres, lnCheck
LOCAL ARRAY laBarras(106)
lcRetorno   = "MfFmFs"
lnTamanho   = LEN(tcNumero)
lnCheck		= 104
lcCaracteres = " !^#$%&~()*+,-.;0123456789Çç<=>:@ABCDEFGHIJKLMNOPQRSTUVWXYZ']["+;
               ["_~abcdefghijklmnopqrstuvwxyz]

*-- Sequencias
laBarras[1]  = "MfMmMm"
laBarras[2]  = "MmMfMm"
laBarras[3]  = "MmMmMf"
laBarras[4]  = "FmFmMg"
laBarras[5]  = "FmFgMm"
laBarras[6]  = "FgFmMm"
laBarras[7]  = "FmMmFg"
laBarras[8]  = "FmMgFm"
laBarras[9]  = "FgMmFm"
laBarras[10] = "MmFmFg"
laBarras[11] = "MmFgFm"
laBarras[12] = "MgFmFm"
laBarras[13] = "FfMmGm"
laBarras[14] = "FmMfGm"
laBarras[15] = "FmMmGf"
laBarras[16] = "FfGmMm"
laBarras[17] = "FmGfMm"
laBarras[18] = "FmGmMf"
laBarras[19] = "MmGmFf"
laBarras[20] = "MmFfGm"
laBarras[21] = "MmFmGf"
laBarras[22] = "MfGmFm"
laBarras[23] = "MmGfFm"
laBarras[24] = "GfMfGf"
laBarras[25] = "GfFmMm"
laBarras[26] = "GmFfMm"
laBarras[27] = "GmFmMf"
laBarras[28] = "GfMmFm"
laBarras[29] = "GmMfFm"
laBarras[30] = "GmMmFf"
laBarras[31] = "MfMfMg"
laBarras[32] = "MfMgMf"
laBarras[33] = "MgMfMf"
laBarras[34] = "FfFgMg"
laBarras[35] = "FgFfMg"
laBarras[36] = "FgFgMf"
laBarras[37] = "FfMgFg"
laBarras[38] = "FgMfFg"
laBarras[39] = "FgMgFf"
laBarras[40] = "MfFgFg"
laBarras[41] = "MgFfFg"
laBarras[42] = "MgFgFf"
laBarras[43] = "FfMfGg"
laBarras[44] = "FfMgGf"
laBarras[45] = "FgMfGf"
laBarras[46] = "FfGfMg"
laBarras[47] = "FfGgMf"
laBarras[48] = "FgGfMf"
laBarras[49] = "GfGfMf"
laBarras[50] = "MfFgGf"
laBarras[51] = "MgFfGf"
laBarras[52] = "MfGfFg"
laBarras[53] = "MfGgFf"
laBarras[54] = "MfGfGf"
laBarras[55] = "GfFfMg"
laBarras[56] = "GfFgMf"
laBarras[57] = "GgFfMf"
laBarras[58] = "GfMfFg"
laBarras[59] = "GfMgFf"
laBarras[60] = "GgMfFf"
laBarras[61] = "GfSfFf"
laBarras[62] = "MmFsFf"
laBarras[63] = "SgFfFf"
laBarras[64] = "FfFmMs"
laBarras[65] = "FfFsMm"
laBarras[66] = "FmFfMs"
laBarras[67] = "FmFsMf"
laBarras[68] = "FsFfMm"
laBarras[69] = "FsFmMf"
laBarras[70] = "FfMmFs"
laBarras[71] = "FfMsFm"
laBarras[72] = "FmMfFs"
laBarras[73] = "FmMsFf"
laBarras[74] = "FsMfFm"
laBarras[75] = "FsMmFf"
laBarras[76] = "MsFmFf"
laBarras[77] = "MmFfFs"
laBarras[78] = "SfGfFf"
laBarras[79] = "MsFfFm"
laBarras[80] = "FgSfFf"
laBarras[81] = "FfFmSm"
laBarras[82] = "FmFfSm"
laBarras[83] = "FmFmSf"
laBarras[84] = "FfSmFm"
laBarras[85] = "FmSfFm"
laBarras[86] = "FmSmFf"
laBarras[87] = "SfFmFm"
laBarras[88] = "SmFfFm"
laBarras[89] = "SmFmFf"
laBarras[90] = "MfMfSf"
laBarras[91] = "MfSfMf"
laBarras[92] = "SfMfMf"
laBarras[93] = "FfFfSg"
laBarras[94] = "FfFgSf"
laBarras[95] = "FmMgFm"
laBarras[96] = "FfSfFg"
laBarras[97] = "FfSgFf"
laBarras[98] = "SfFfFg"
laBarras[99] = "SfFgFf"
laBarras[100]= "FfGfSf"
laBarras[101]= "FfSfGf"
laBarras[102]= "GfFfSf"
laBarras[103]= "SfFfGf"
laBarras[104]= "MfFfSm"
laBarras[105]= "MfFmFs"
laBarras[106]= "MfFmGm"

FOR lnT = 1 TO lnTamanho

	lnPosicao = AT(SUBSTR(tcNumero, lnT, 1), lcCaracteres)
    IF lnPosicao > 0
        lcRetorno = lcRetorno + laBarras[lnPosicao]
    ENDIF
    
    lnCheck = lnCheck + ((lnPosicao - 1) * lnT)

NEXT

lcRetorno = lcRetorno + laBarras[lnCheck % 103 + 1]
lcRetorno = lcRetorno + "MgGfFfM"

RETURN lcRetorno

*-- Fim
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Fonte para Boleto Bancário

Mensagem por alaminojunior »

Aliás alguém poderia dizer à quantas anda este projeto (harbourboleto), e dar mais detalhes ?
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Fonte para Boleto Bancário

Mensagem por sygecom »

Eu uso até hoje o HarbourBoleto, porem só faço geração e impressão dos boletos bancarios, não gero remessas. Mas sei que tem essa possibilidade tmb. Uso inclusive com alguns sisteminhas em clipper ainda chamando pelo RUN do clipper um app compilado em xHarbour !
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Fonte para Boleto Bancário

Mensagem por alaminojunior »

Ok Leo. Prometo e preciso dar uma olhada nisto.
Mas pergunto: como funciona na prática este harbour boleto ?
Seria uma função onde se envia as variáveis e a mesma se encarrega de imprimir o boleto ?
Você teria algum exemplo básico de uso dela ?
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
wagner aragao
Usuário Nível 2
Usuário Nível 2
Mensagens: 58
Registrado em: 30 Jan 2008 02:06
Localização: PORTO VELHO-RONDÔNIA

Re: Fonte para Boleto Bancário

Mensagem por wagner aragao »

Olá Senhores,


To usando o harbourboleto, e funciona muito bem, fiz algumas alterações no layout a pedido do Bradesco, Real e Caixa Econômica e to esperando retorno do Banco do Brasil, foi homologado nesses bancos e tenho cliente emitindo boletos. Fiquei de mandar para o Mário Simoes Filho, para ele analisar e atualizar o projeto. Mais pelo que procurei e comparei inclusive preço é a melhor opção (0800) e o Mário sempre me atendeu sobre dúvidas, simplifiquei algumas chamadas. Vou estar passando para ele....
t+
xHarbour 1.2.3 Simplex / xDev 0.70 / LetoDB 2.15b37 / HWGUI 2.17 / xDesigner (LF Basso)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: Fonte para Boleto Bancário

Mensagem por asimoes »

Amigos,

Alguém poderia mandar para o meu email: asimoesluz@gmail.com esta fonte barra_biro
eu não estou conseguindo baixar do link colocado.

[]´s
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Re: Fonte para Boleto Bancário

Mensagem por fladimir »

Vou disponibilizar aki... quem sabe outros colegas precisem tb...

Sucesso!!!


:)Pos
Anexos
barra_biro.rar
(3.92 KiB) Baixado 700 vezes
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: Fonte para Boleto Bancário

Mensagem por asimoes »

Fladimir,

Obrigado por ter disponibilizado a fonte:

Amigos, estou com o seguinte problema quando mando gerar um teste com o código de barras o teste mostra o seguinte erro:
Eu estou direcionando a impressão para um pdf.

O código que estou testando:

Código: Selecionar todos

#include "wingdi.ch"
FUNCTION MAIN

   AddFont("barras2.ttf")

   cPrinter:=GetDefaultPrinter()
   oPrinter                 := Win32Prn():new( cPrinter )
   oPrinter:landscape := .F.
   oPrinter:formType  := DMPAPER_A4
   oPrinter:copies    := 1
   IF .NOT. oPrinter:create()
      QUIT
   ENDIF

   IF .NOT. oPrinter:startDoc( "xHarbour test page" )
      QUIT
   ENDIF


   cNum:=Barra39("1234567890")
   oPrinter:SetFont('Courier New', 12, 0 )
   col=oPrinter:mm_to_posX(10)
   lin=oPrinter:mm_to_posY(10)
   oPrinter:TextOutAt(col,lin,"*1234567890*",.t.,.f.,0)

   col=oPrinter:mm_to_posX(10)
   lin=oPrinter:mm_to_posY(30)
   oPrinter:SetFont('Barras Biro',20)
   oPrinter:TextOutat(col,lin,cNum,.t.,.f.,0)
   oPrinter:endDoc()

RETURN NIL

FUNCTION AddFont(cFonte)
Local nRet := AddFontResource(cFonte)
RETURN nRet
As funções:

Código: Selecionar todos

***
*  
* Codigo de Barras Facil
*
* Estas funcoes para impressão de codigo de barras devem ser usadas com
* a fonte BARRAS2.TTF (Barras Biro).
*
* Esta fonte possui apenas as seguintes letras:
* f - espaco fino
* F - barra fina
* m - espaco medio
* M - barra media
* g - espaco grosso
* G - barra grossa
* s - espaco super grosso
* S - barra super grossa
* x - espaco extra grosso
* X - barra extra grossa
*
* As funcoes abaixo apenas geram sequencias de fFmMgGsSxX que vao
* formar as barras.
*
* Neste PRG seguem 5 exemplos de funcoes para geracao do codigo de
* barras 2 de 5 industrial, 2 de 5 intercalado, 3 de 9, EAN8, EAN13 e 128B.
*
* Para usar as funcoes abaixo basta chamar a funcao, passando o
* codigo desejado. Selecionar a fonte Barras Biro e o tamanho apropriado.
* Se a barra ficar muito estreita crie outra linha identica e cole
* embaixo.
* 
* Exemplos:
*
* Barra25("1234567890")    && Fonte Barras Biro, Tamanho 20
* Barra25i("1234567890")   && Fonte Barras Biro, Tamanho 20
* Barra39("*1234567890*")  && Fonte Barras Biro, Tamanho 20
*
*********************************************************************
* IMPORTANTE:                                                       *
* SEMPRE FACA MUITOS TESTES DE LEITURA COM VARIOS CODIGOS ANTES DE  *
* LIBERAR A IMPRESSAO DE BARRAS PARA SEUS CLIENTES.                 *
*********************************************************************
*
* Esta fonte (BARRAS2.TTF Barras Biro) e as funcoes Barra25, Barra25i,
* Barra39, BarraEAN8, BarraEAN13 e Barra128B podem ser livremente usadas e
* alteradas.
*
* Claudio Gaspar Martins (cgmartins@biro.com.br)
* Biro Processamento de Dados Ltda
* Novo Hamburgo - RS - Brasil
* Dezembro, 1999
*
*
* Historico das revisoes (YYYY/MM/DD):
* 2001/02/28 - Corrigida tabela A nas funcoes EAN13 e EAN8
* 2003/08/21 - Adicionada função Barra128b para geração de barras padrão 128B
*              Contribuição de Ezequiel Júnior Zemolin (ezequiel@slcagricola.com.br)
*
*


***
*
* Barra 2 de 5 Industrial
*
*

FUNCTION Barra25( tcNumero )

LOCAL lnT, lcRetorno, lnTamanho
LOCAL laBarras[10]
lcRetorno  = "GfGfFf"      && Sequencia inicial
lnTamanho  = LEN(tcNumero)

*-- Sequencias fixas
laBarras[1] = "FfFfGfGfFf"
laBarras[2] = "GfFfFfFfGf"
laBarras[3] = "FfGfFfFfGf"
laBarras[4] = "GfGfFfFfFf"
laBarras[5] = "FfFfGfFfGf"
laBarras[6] = "GfFfGfFfFf"
laBarras[7] = "FfGfGfFfFf"
laBarras[8] = "FfFfFfGfGf"
laBarras[9] = "GfFfFfGfFf"
laBarras[10] = "FfGfFfGfFf"

FOR lnT = 1 TO lnTamanho
    lcRetorno = lcRetorno + laBarras[VAL(SUBSTR(tcNumero, lnT, 1)) + 1]
NEXT

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

RETURN lcRetorno

***
*
* Barra 2 de 5 Intercalado
*
*

FUNCTION Barra25i( tcNumero )

*-- Variaveis
LOCAL lnT, lnU, lcBarras, lcEspacos, lcRetorno, lnTamanho
LOCAL laBarras[10]
lcRetorno = "FfFf"        && Sequencia inicial
lnTamanho = LEN(tcNumero)

*-- Sequencias
laBarras[1] = "00110"
laBarras[2] = "10001"
laBarras[3] = "01001"
laBarras[4] = "11000"
laBarras[5] = "00101"
laBarras[6] = "10100"
laBarras[7] = "01100"
laBarras[8] = "00011"
laBarras[9] = "10010"
laBarras[10] = "01010"

*-- Se quantidade de caracteres nao for par coloca 0 na frente
IF lnTamanho % 2 <> 0
	tcNumero = "0" + tcNumero
ENDIF

FOR lnT = 1 TO lnTamanho STEP 2

    *-- Pega os 0 e 1
    lcBarras  = laBarras[VAL(SUBSTR(tcNumero, lnT, 1)) + 1]
    lcEspacos = laBarras[VAL(SUBSTR(tcNumero, lnT + 1, 1)) + 1]

    *-- Combima as barras e os espacos
    FOR lnU = 1 TO 5
        lcRetorno = lcRetorno + IIF(SUBSTR(lcBarras, lnU, 1) == "0", "F", "G")
        lcRetorno = lcRetorno + IIF(SUBSTR(lcEspacos, lnU, 1) == "0", "f", "g")
    NEXT

NEXT

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

RETURN lcRetorno

***
*
* Barra 3 de 9
* 
* OBSERVACAO: Alguns leitores exigem o * como prefixo e sufixo do codigo
*
*

FUNCTION Barra39( tcNumero )

LOCAL lnT, lnPosicao, lcRetorno, lnTamanho, lcCaracteres
LOCAL laBarras[44]
lcRetorno   = ""
lnTamanho   = LEN(tcNumero)
lcCaracteres = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ-.#*$/+%"

*-- Sequencias
laBarras[1] = "GfFgFfFfGf"
laBarras[2] = "FfGgFfFfGf"
laBarras[3] = "GfGgFfFfFf"
laBarras[4] = "FfFgGfFfGf"
laBarras[5] = "GfFgGfFfFf"
laBarras[6] = "FfGgGfFfFf"
laBarras[7] = "FfFgFfGfGf"
laBarras[8] = "GfFgFfGfFf"
laBarras[9] = "FfGgFfGfFf"
laBarras[10] = "FfFgGfGfFf"
laBarras[11] = "GfFfFgFfGf"
laBarras[12] = "FfGfFgFfGf"
laBarras[13] = "GfGfFgFfFf"
laBarras[14] = "FfFfGgFfGf"
laBarras[15] = "GfFfGgFfFf"
laBarras[16] = "FfGfGgFfFf"
laBarras[17] = "FfFfFgGfGf"
laBarras[18] = "GfFfFgGfFf"
laBarras[19] = "FfGfFgGfFf"
laBarras[20] = "FfFfGgGfFf"
laBarras[21] = "GfFfFfFgGf"
laBarras[22] = "FfGfFfFgGf"
laBarras[23] = "GfGfFfFgFf"
laBarras[24] = "FfFfGfFgGf"
laBarras[25] = "GfFfGfFgFf"
laBarras[26] = "FfGfGfFgFf"
laBarras[27] = "FfFfFfGgGf"
laBarras[28] = "GfFfFfGgFf"
laBarras[29] = "FfGfFfGgFf"
laBarras[30] = "FfFfGfGgFf"
laBarras[31] = "GgFfFfFfGf"
laBarras[32] = "FgGfFfFfGf"
laBarras[33] = "GgGfFfFfFf"
laBarras[34] = "FgFfGfFfGf"
laBarras[35] = "GgFfGfFfFf"
laBarras[36] = "FgGfGfFfFf"
laBarras[37] = "FgFfFfGfGf"
laBarras[38] = "GgFfFfGfFf"
laBarras[39] = "FgGfFfGfFf"
laBarras[40] = "FgFfGfGfFf"
laBarras[41] = "FgFgFgFfFf"
laBarras[42] = "FgFgFfFgFf"
laBarras[43] = "FgFfFgFgFf"
laBarras[44] = "FfFgFgFgFf"

FOR lnT = 1 TO lnTamanho

	lnPosicao = AT(SUBSTR(tcNumero, lnT, 1), lcCaracteres)
    IF lnPosicao > 0
        lcRetorno = lcRetorno + laBarras[lnPosicao]
    ENDIF

NEXT

RETURN lcRetorno

***
*
* Barras EAN13
*
*

FUNCTION BarraEAN13( tcNumero )

LOCAL lnT, lcRetorno, lcSequencia
LOCAL 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 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

***
*
* Barras Padrão 128-B
* Contribuição de Ezequiel Júnior Zemolin (ezequiel@slcagricola.com.br)
*
*

FUNCTION Barra128B( tcNumero )

LOCAL lnT, lnPosicao, lcRetorno, lnTamanho, lcCaracteres, lnCheck
LOCAL laBarras[106]
lcRetorno   = "MfFmFs"
lnTamanho   = LEN(tcNumero)
lnCheck		= 104
lcCaracteres = " !^#$%&~()*+,-.;0123456789Çç<=>:@ABCDEFGHIJKLMNOPQRSTUVWXYZ']["+;
               ["_~abcdefghijklmnopqrstuvwxyz]

*-- Sequencias
laBarras[1]  = "MfMmMm"
laBarras[2]  = "MmMfMm"
laBarras[3]  = "MmMmMf"
laBarras[4]  = "FmFmMg"
laBarras[5]  = "FmFgMm"
laBarras[6]  = "FgFmMm"
laBarras[7]  = "FmMmFg"
laBarras[8]  = "FmMgFm"
laBarras[9]  = "FgMmFm"
laBarras[10] = "MmFmFg"
laBarras[11] = "MmFgFm"
laBarras[12] = "MgFmFm"
laBarras[13] = "FfMmGm"
laBarras[14] = "FmMfGm"
laBarras[15] = "FmMmGf"
laBarras[16] = "FfGmMm"
laBarras[17] = "FmGfMm"
laBarras[18] = "FmGmMf"
laBarras[19] = "MmGmFf"
laBarras[20] = "MmFfGm"
laBarras[21] = "MmFmGf"
laBarras[22] = "MfGmFm"
laBarras[23] = "MmGfFm"
laBarras[24] = "GfMfGf"
laBarras[25] = "GfFmMm"
laBarras[26] = "GmFfMm"
laBarras[27] = "GmFmMf"
laBarras[28] = "GfMmFm"
laBarras[29] = "GmMfFm"
laBarras[30] = "GmMmFf"
laBarras[31] = "MfMfMg"
laBarras[32] = "MfMgMf"
laBarras[33] = "MgMfMf"
laBarras[34] = "FfFgMg"
laBarras[35] = "FgFfMg"
laBarras[36] = "FgFgMf"
laBarras[37] = "FfMgFg"
laBarras[38] = "FgMfFg"
laBarras[39] = "FgMgFf"
laBarras[40] = "MfFgFg"
laBarras[41] = "MgFfFg"
laBarras[42] = "MgFgFf"
laBarras[43] = "FfMfGg"
laBarras[44] = "FfMgGf"
laBarras[45] = "FgMfGf"
laBarras[46] = "FfGfMg"
laBarras[47] = "FfGgMf"
laBarras[48] = "FgGfMf"
laBarras[49] = "GfGfMf"
laBarras[50] = "MfFgGf"
laBarras[51] = "MgFfGf"
laBarras[52] = "MfGfFg"
laBarras[53] = "MfGgFf"
laBarras[54] = "MfGfGf"
laBarras[55] = "GfFfMg"
laBarras[56] = "GfFgMf"
laBarras[57] = "GgFfMf"
laBarras[58] = "GfMfFg"
laBarras[59] = "GfMgFf"
laBarras[60] = "GgMfFf"
laBarras[61] = "GfSfFf"
laBarras[62] = "MmFsFf"
laBarras[63] = "SgFfFf"
laBarras[64] = "FfFmMs"
laBarras[65] = "FfFsMm"
laBarras[66] = "FmFfMs"
laBarras[67] = "FmFsMf"
laBarras[68] = "FsFfMm"
laBarras[69] = "FsFmMf"
laBarras[70] = "FfMmFs"
laBarras[71] = "FfMsFm"
laBarras[72] = "FmMfFs"
laBarras[73] = "FmMsFf"
laBarras[74] = "FsMfFm"
laBarras[75] = "FsMmFf"
laBarras[76] = "MsFmFf"
laBarras[77] = "MmFfFs"
laBarras[78] = "SfGfFf"
laBarras[79] = "MsFfFm"
laBarras[80] = "FgSfFf"
laBarras[81] = "FfFmSm"
laBarras[82] = "FmFfSm"
laBarras[83] = "FmFmSf"
laBarras[84] = "FfSmFm"
laBarras[85] = "FmSfFm"
laBarras[86] = "FmSmFf"
laBarras[87] = "SfFmFm"
laBarras[88] = "SmFfFm"
laBarras[89] = "SmFmFf"
laBarras[90] = "MfMfSf"
laBarras[91] = "MfSfMf"
laBarras[92] = "SfMfMf"
laBarras[93] = "FfFfSg"
laBarras[94] = "FfFgSf"
laBarras[95] = "FmMgFm"
laBarras[96] = "FfSfFg"
laBarras[97] = "FfSgFf"
laBarras[98] = "SfFfFg"
laBarras[99] = "SfFgFf"
laBarras[100]= "FfGfSf"
laBarras[101]= "FfSfGf"
laBarras[102]= "GfFfSf"
laBarras[103]= "SfFfGf"
laBarras[104]= "MfFfSm"
laBarras[105]= "MfFmFs"
laBarras[106]= "MfFmGm"

FOR lnT = 1 TO lnTamanho

	lnPosicao = AT(SUBSTR(tcNumero, lnT, 1), lcCaracteres)
    IF lnPosicao > 0
        lcRetorno = lcRetorno + laBarras[lnPosicao]
    ENDIF
    
    lnCheck = lnCheck + ((lnPosicao - 1) * lnT)

NEXT

lcRetorno = lcRetorno + laBarras[lnCheck % 103 + 1]
lcRetorno = lcRetorno + "MgGfFfM"

RETURN lcRetorno

*-- Fim
O que está mostrando no PDF
*1234567890*

ERROR: typecheck
OFFENDING COMMAND: put
STACK:
(barra grossa)
/G
1
[/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
]
[/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Re: Fonte para Boleto Bancário

Mensagem por billy1943 »

Desculpem-me a intromissão em assuntos do [X]Harbour, pois ainda não posso me posicionar em algo que não seja Clipper, mas vou fazer o seguinte:

- como eu uso em meus sistemas, o código de barras padrão Interleaved, vou substituí-lo pelo Barra Biro e ver se funciona tudo Ok

- posicionarei também caso algo dê errado.
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Re: Fonte para Boleto Bancário

Mensagem por billy1943 »

Coloquei o fonte Barras Biro, em meu sistema, que usa o Interleaved 2 of 5, via .RTF -> WORD e não deu certo, inclusive porque meu sistema converte os bytes, 2 a 2, antes de usar o fonte Interleaved.
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Fonte para Boleto Bancário

Mensagem por sygecom »

Pessoal, desculpa insistir no assunto, mas dem uma olhada no HarbourBoleto, vale a pena:
http://sourceforge.net/projects/harbourboleto/
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Re: Fonte para Boleto Bancário

Mensagem por Hasse »

Bom dia amigos.

No passado eu também gerava os meus códigos de barras com rotinas desenvolvidas em Clipper. E foi muito legal o aprendizado.

Hoje, com o xHarbour uso uma rotina muito simples, como abaixo:

Código: Selecionar todos

         oPrinter:SetFont('Bar Code', 28, 0 )
         oPrinter:TextOut(" *6920897718380*  " )
         oPrinter:SetFont('Courier New', 12, 0 )
         oPrinter:SetPrc(oPrinter:Prow(), 40 )
         oPrinter:TextOut("Bar Code, 28, 0")
/*
   Onde:
      1-Nome da Fonte;
      2-Tamanho vertical da fonte;
      3-Tamanho horizontal da fonte;
*/
Onde:
oPrinter:SetFont('Bar Code', 28, 0 ) seta a fonte para direto para código de barras, e puff..., o código está ali...

Veja mais detalhes no tópico:
viewtopic.php?f=4&t=6465&hilit=win32prn+para+iniciantes

Em seguida é só encaminhar para a impressora ou para o PDFCreator.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
psyther
Usuário Nível 1
Usuário Nível 1
Mensagens: 1
Registrado em: 17 Mai 2012 15:15
Localização: Patrocínio/MG

Fonte para Boleto Bancário

Mensagem por psyther »

preciso de uma fonte intercalado 2 de 5 para relogio de ponto, sera q essa fonte serve?
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Fonte para Boleto Bancário

Mensagem por Hasse »

Para 2 de 5 interleaved, veja o tópico:

https://pctoledo.org/forum/viewto ... tes#p56225
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Responder