Harupdf e boleto

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

Moderador: Moderadores

Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Harupdf e boleto

Mensagem por Toledo »

JoséQuintas escreveu:Agora tem o logotipo de vários bancos, e o limite de 100kb do fórum não deixa anexar.
José, o limite era de 900 Kb, mas acabei aumentando para 2 Mb. Então tenta anexar e se não conseguir, deixa um recado aqui.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

Harupdf e boleto

Mensagem por HASA »

:)) :-Y
José meus parabéns ficou excelente,
:*
Hasa
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harupdf e boleto

Mensagem por JoséQuintas »

Agora com o logotipo de todos os bancos.
Este mesmo arquivo não aceitou antes.
Anexos
boleto.zip
(604.48 KiB) Baixado 517 vezes
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Harupdf e boleto

Mensagem por asimoes »

José,

Parabéns pela contribuição.

Com certeza vai ajudar muitos aqui do forum.

[]´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
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

Harupdf e boleto

Mensagem por HASA »

:%
Bom dia, Ronaldo, compilei com Xharbour + bcc55 mas não gerou o PDF com a hbZebra.lib entrou no:
ELSE
ALERT( 'ERRO NA GERACAO DO ARQUIVO...;;' + cFilePdf ) <<<<<<<<< aqui !
ENDIF

Vou fazer algumas modificações para ver se descubro algo e posto mais tarde ok.

Hasa
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

Harupdf e boleto

Mensagem por HASA »

:))
IMPRIMUIUUUU, é que eu criei uma pasta para esse teste descompactando o .rar direto nela, nem me atendei, descuple, falha nossa.

:(
Mas... não imprimiu o código de barras.

Hasa
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

Harupdf e boleto

Mensagem por HASA »

:-O

Bom dia, não tenho o Harbour instalado uso a Minigui Extend que já vem com seus binarios para xHarbour, e nele já vem a hbZebra.lib para xHarbour, aparentemente está tudo ok,
:{
Hasa
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

Harupdf e boleto

Mensagem por Imatech »

Modificações cumulativas adicionadas a classe boleto...

1 - Ajuste de variaveis não declaradas para diretivas de compilação: -w1 -es2
2 - Alocação dinamica para as linhas/imagens do boleto...
3 - Impressão de datas com 4 digitos
4 - Criado arquivo demo.prg para uso da classe
5 - Criado arquivo Build.Bat para compilação do exemplo de uso...
6 - Opção para impressão do código de barras desenhando as Barras Interleaved 2 de 5 ( Febraban )
7 - Opção para impressão do código de barras usando a lib: hbZebra (elimina o uso de imagens .jpg na geração)
8 - etc...

Sujestão: Incorporar ao projeto Harbour Boleto...

1 - Abaixo as 03 formas encontradas para se gerar o código de barras...

1.1 - Utilizando imagens .jpg
1.2 - Utilizando a Lib hbZebra: Código Interleaved 2 de 5 (manual febraban)
1.3 - Desenhando as Barras: Código Interleaved 2 de 5 (manual febraban)

2 - Demo/Executavel (Alem do .exe precisa da pasta resources para logotipo do banco - copiar de: projetos )
Demo.rar
Projeto demo compilado ( executavel )
(905.81 KiB) Baixado 477 vezes
1.1 - Fontes com uso de imagens para gerar código de barras
1.1.1 - Projeto ( posts anteriores )
1.1.2 - Boleto Teste ( posts anteriores )

1.2 - Fontes com uso da lib Zebra para gerar código de barras (dispensa o uso de arquivos .jpg)
1.2.1 - Projeto
hb_boleto_Zebra_itf_2_5.rar
Sources: Zebra Interleaved 2-5
(529.56 KiB) Baixado 442 vezes
1.2.2 - Boleto Teste
boleto_Zebra_itf_2_5.pdf
Boleto: Zebra Interleaved 2-5
(33.44 KiB) Baixado 373 vezes
1.3 - Fontes: Desenhando as Barras: Código Interleaved 2 de 5 (dispensa o uso de arquivos .jpg)
1.3.1 - Projeto
hb_boleto_Int_2_5.rar
Sources: Interleaved 2-5
(3.96 KiB) Baixado 462 vezes
1.3.2 - Boleto Teste
boleto_Int_2_5.pdf
Boleto: Interleaved 2-5
(34.47 KiB) Baixado 370 vezes
Editado pela última vez por Imatech em 06 Out 2012 02:21, em um total de 3 vezes.
M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harupdf e boleto

Mensagem por JoséQuintas »

Ainda falta homologar no banco.
Um amigo já deu um toque que alguns bancos exigem o código de barras mais próximo ao final da página.
Então tem que ajustar os boletos mais pra baixo.

Já criei outra opção para o código de barras, usando somente uma única foto preta 50x50 criada no Paint.
Parece que o Itaú é o menos exigente, ainda bem que vou começar por ele.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Harupdf e boleto

Mensagem por asimoes »

Ronaldo,

Fiz um teste com os fontes abaixo:
Fontes: Desenhando as Barras: Código Interleaved 2 de 5 (dispensa o uso de arquivos .jpg)
e a barra diverge do pdf boleto_zebra_itf_2_5-2.pdf

O meu leitor de código barras só está lendo o pdf da zebra.

Pode ser algo relacionado ao espaçamento das barras.

pdf gerado pelos fontes que dispensam jpg
Imagem
pdf zebra
Imagem
►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)
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

Harupdf e boleto

Mensagem por Imatech »

Olá ASimoes !

Realmente: apesar da sequencia de barras estar identica, o espaçamento esta um pouco diferente...

Correção em meu proximo post...
Código de Barras: Função2_5 x Zebra
Código de Barras: Função2_5 x Zebra
Sucesso...
M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Harupdf e boleto

Mensagem por asimoes »

Olá Ronaldo,

Alterei o valor de nspace da função F_Gen_Barr_Code para .72 e HPDF_Page_SetLineWidth( oPdf_Page, 0.40)
Assim o leitor conseguiu ler.
►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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harupdf e boleto

Mensagem por JoséQuintas »

O código de barras até que não é complicado

- O início do código de barras usa 4 barras finas
- O final é uma barra larga e mais 2 finas
- Cada número é representado por 5 barras, sendo sempre 2 largas e 3 finas.
- O "interleave 2Of5", seria barras intercaladas de dois números. Supondo que as barras de um número fossem AAAAA e do outro BBBBB, na hora de imprimir seria um de cada: ABABABABAB.
- A barra larga precisa ser 2 a 3 vezes a largura da barra fina, mas sempre a mesma proporção no código inteiro.
- Por fim, é só uma barra branca, outra preta, branca, preta, etc. Só ficar trocando a cor na hora de imprimir.

O maior problema mesmo é evitar que o desenho seja deformado na impressão.

Aqui a rotina que montei. Pode ser interessante pra criar pra outros códigos.
E olhando a explicação acima, vai ficar fácil de entender o que ela faz.
Ela codifica os números, intercala cada par de números, e acrescenta início e fim.

Código: Selecionar todos

Function BarCode(cBarras)
   Local cBarCodeI25 := "", nCont, nCont2, cBarCodeNumber, cBarNumberA, cBarNumberB
   cBarCodeNumber     := Array(10)
   cBarCodeNumber[1]  := "FFLLF"
   cBarCodeNumber[2]  := "LFFFL"
   cBarCodeNumber[3]  := "FLFFL"
   cBarCodeNumber[4]  := "LLFFF"
   cBarCodeNumber[5]  := "FFLFL"
   cBarCodeNumber[6]  := "LFLFF"
   cBarCodeNumber[7]  := "FLLFF"
   cBarCodeNumber[8]  := "FFFLL"
   cBarCodeNumber[9]  := "LFFLF"
   cBarCodeNumber[10] := "FLFLF"
   For nCont = 1 To Len(cBarras) - 1 Step 2
      cBarNumberA = cBarCodeNumber[Val(Substr(cBarras, nCont, 1))+1]
      cBarNumberB = cBarCodeNumber[Val(Substr(cBarras, nCont + 1, 1))+1]
      For nCont2 = 1 To 5
         cBarCodeI25 += Substr(cBarNumberA, nCont2, 1) + Substr(cBarNumberB, nCont2, 1)
      Next
   Next
   cBarCodeI25 := "FFFF" + cBarCodeI25 + "LFF" 
   Return cBarCodeI25
O resultado é apenas uma lista informando se vai ser barra larga ou fina.
Na hora de imprimir, só ir variando entre branca/preta.

Ao que me parece, a zebra usa a lógica acima e acaba retornando um array com as coordenadas das barras pretas.
Mas como é a zebra que chama a rotina, talvez ela ajuste a resolução do PDF também.

O problema de resolução seria igual ter uma tela de 80 colunas e precisar colocar 81 caracteres.
Triplicando a resolução (algo como compactar letra), aonde caberiam 80 caracteres, passam a caber 240.
É legal... principalmente quando funciona...
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Harupdf e boleto

Mensagem por asimoes »

Para permitir caracteres acentuados na classe PdfBoletoClass : "WinAnsiEncoding"

Código: Selecionar todos

Method New() Class PdfBoletoClass
   ::oPdf           := HPDF_New()
   HPDF_SetCompressionMode( ::oPdf, HPDF_COMP_ALL )
   ::nAngulo         := 90
   ::nRadiano        := 0 // ::nAngulo / 180 * 3.141592
   ::oFontName       := HPDF_GetFont(::oPdf,"Helvetica","WinAnsiEncoding")
   ::nFontSizeLarge  := 12
   ::nFontSizeSmall  := 6
   ::nFontSizeNormal := 8
   Return Self
►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)
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

Harupdf e boleto

Mensagem por Imatech »

Olá ASimoes !

Fontes atualizados...
O melhor resultado que obtive foi com os parametros abaixo ( testado e aprovado em leitores de código de barras ):

nSpace := 0.712
HPDF_Page_SetLineWidth( oPdf_Page, nspace * 1.06 )

DownLoad:
https://pctoledo.org/forum/viewto ... 577#p78577

Resultado impresso desejado para as Barras:
Altura: 13mm
Largura: 103mm
Resultado dos ajustes:
Código de Barras: Função2_5 x Zebra
Código de Barras: Função2_5 x Zebra
Código de Barras:
É uma forma de representação gráfica de dígitos numéricos, composta de várias barras verticais dispostas paralelamente, cujas dimensões são sempre de 103mm de comprimento e 13mm de altura, contendo informações relativas à cobrança a serem lidas por um leitor de código de barras laser.

As informações que fazem parte do código de barras são:
Posição Conteúdo
01 a 03 Número do banco
04 a 04 Código da Moeda - 9 para Real
05 a 05 Digito verificador do Código de Barras
06 a 19 Valor (12 inteiros e 2 decimais)
20 a 44 Campo Livre definido por cada banco
Ficha de Compensação
A ficha de compensação fica em poder do banco para que seja encaminhado para a compensação do bancária, quando o boleto é pago.

A ficha de compensação deve conter as seguintes dimensões:

Altura - mínima de 95mm e máxima de 108mm;
Largura - mínima de 210mm para o papel tipo A4.

A ficha de compensação é sempre padronizada e deve obedecer as regras de cada Banco, cujas dimensões são 3 3/4'' a 4 2/8'', exibindo o código de barras e a linha digitável que informam os dados para a identificação automática da conta para crédito a ser utilizada na compensação bancária.
M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Responder