Página 2 de 5

Harupdf e boleto

Enviado: 10 Set 2012 09:35
por HASA
:-O
Bom dia, eu coloquei (copiei daqui e colei) no meu prg que te enviei, compilou mas... não gerou o pdf :% , eu usei uma variavel m-> e você não, só troquei isso a unica coisa que tinha notado de diferente, vou rever então te falo. No zip que te enviei anteriormene mostra a criação de janela com fundo no caso vermelho que poderia ser trocado por branco e preto ok, esse prg é o teste original da pasta contrib do xharbour.
´o)

Harupdf e boleto

Enviado: 10 Set 2012 10:32
por JoséQuintas
Por aí se vê como o mercado está uma merd.
Esse boleto do borboleto.... o boleto emitido não atende uma lei que entrou, se não me engano, em 2008.
No caso de uma cobrança judicial, o cliente pode alegar simplesmente que não pagou porque o boleto está fora da lei.

No caso de não sair PDF:
Já coloquei antes: se o nome de uma imagem estiver errado, não sai pdf, e não dá mensagem de erro.
tem uma imagem, se não me engano codestart.jpg, que no seu fonte estava de um jeito e no arquivo estava de outro.
mas essa não serve pro boleto.
start e stop estão repetidos nas imagens por um motivo: um deles não dá pra usar, porque o tamanho da imagem é fora do padrão das outras.

No fonte aqui andei mexendo pra fazer outros testes. No momento tenho dois boletos pra testar o pagamento, com código de barras criados de formas diferentes. Acho que vou aproveitar e fazer um terceiro, com uma imagem que com certeza funciona, pra ver se o problema é a resolução do PDF, como comentaram no grupo harbour-users.

Harupdf e boleto

Enviado: 10 Set 2012 11:47
por HASA
:%
José na verdade peguei as imagens do HarbourBoleto que são Gif´s e passei para JPG para testar os tamanhos e nomes mantive os mesmos do projeto original apenas tentando disponibilizar uma maneira de imprimir o código de barras em Pdf como varios colegas dizem utilizar esse projeto com exito nem me atentei ok, eu não uso esse projeto nem os gifs nem os jpgs no meu sistema uso uma fonte Int 2-5 que não consegui fazer o Harupdf aceita-la nem a pal, se quizer te envio a fonte eu uso com xHarbour + Minigui Extend + bcc55 e funcional legal para impressão com a Miniprint.lib da Minigui e eu queria já imprimri em pdf, ok.
Hasa
:xau

Harupdf e boleto

Enviado: 10 Set 2012 12:21
por JoséQuintas
Teoricamente deveria ser mais fácil até.
Olhando o fonte da hbnfe dá pra ter uma idéia:

- Carregar o fonte, para que seja anexado ao pdf
- Escrever como se fosse um texto normal, apenas selecionando o fonte

O fonte I25 tem um detalhe especial: ele trabalha em pares de números, e intercala as 5 barras do par de números.
Por isso tem as fotos de 00 a 99, que seriam a combinação de 0+0..... 9+9
Para o fonte I25 é algo parecido a essas 99 fotos. Só que não se pode usar Chr(0) a Chr(99), então ele deve ter um esquema de conversão dos números do código de barras antes de passar ao fonte.
Algo como....
cConvertido = Converte(cNumeroCodBarras)
pdf_writetext(cConvertido,"fontebarras")

Usando fonte pode ser que facilite para o pdf fazer redimensionamento sem perda.
O fonte do código de barras da hbnfe utiliza 3 arquivos pra poder carregar o fonte pro pdf.
Mas só tem um jeito de saber se dá certo... tentando.

No meu servidor eu tenho uma rotina onde passo o número e a rotna retorna a imagem do código pronto.
Não testei se funciona no PDF, porque deixar dependente de internet não está nos planos.

Harupdf e boleto

Enviado: 10 Set 2012 21:33
por JoséQuintas
Alguém tem um número de código de barras válido?
Não é a linha digitável, é o número do código de barras.
Hoje testei boleto com duas formas diferentes de imprimir o código de barras, no caixa eletrônico.
Um deles nem leu, mas o outro acusou código de barras inválido.
Então... precisava de um número válido pra testar.

Harupdf e boleto

Enviado: 11 Set 2012 08:51
por andersoncamilo
Bom dia

No caso do código de barras Code128, você tem que fazer a conversão, se não os leitores não conseguem ler.
Abaixo segue a rotina para conversão do Code128 que é utilizado no HbNFe, foi eu quem a criei, teria que verificar quais as fontes você esta utilizando para verificar se não tem que fazer algo parecido, você pode utilizar um leitor de codigo de barras comum para testar se o código esta legível.

Qualquer coisa me envia as fontes que você esta utilizando que vou pesquisar se tem que fazer alguma conversão.

Segue um código valido de um boleto do banco do Brasil.
00194.57662 24501.911903 02499.702211 2 54570000015500

Anderson Camilo

Código: Selecionar todos

cCodBarra = CodificaCode128c(Codigo)

Código: Selecionar todos

****************************************
function CodificaCode128c(pcCodigoBarra)      
****************************************

&&  Parameters de entrada : O codigo de barras no formato Code128C "somente numeros" campo tipo caracter
&&  Retorno               : Retorna o código convertido e com o caracter de START e STOP mais o checksum
&&                        : para impressão do código de barras utilizando a fonte Code128bWin, é necessário
&&                        : para utilizar essa fonte os arquivos Code128bWin.ttf, Code128bWin.afm e Code128bWin.pfb
&& Autor                  : Anderson Camilo
&& Data                   : 19/03/2012 

local  nI :=0, checksum :=0, nValorCar :=0, cCode128 := '', cCodigoBarra :=''

cCodigoBarra = pcCodigoBarra
if len(cCodigoBarra) > 0    && Verifica se os caracteres são válidos (somente números)
   if int(len(cCodigoBarra) / 2) = len(cCodigoBarra) / 2    && Tem ser par o tamanho do código de barras
      for nI = 1 to len(cCodigoBarra)
          if (Asc( substr ( cCodigoBarra, nI, 1) ) < 48 .or. Asc( substr ( cCodigoBarra, nI, 1) ) > 57)
             nI = 0
	         exit
          endif		  
      next nI
   endif
   if nI > 0 
      nI = 1 &&  nI é o índice da cadeia
      cCode128 = chr(155)
	   
      do while nI <= len ( cCodigoBarra )
         nValorCar = val ( substr( cCodigoBarra, nI, 2) )
         if nValorCar = 0
            nValorCar += 128 
          elseif nValorCar < 95
                 nValorCar += 32 
          else   
                 nValorCar +=  50 
         endif
         cCode128 += Chr(nValorCar)
         nI = nI + 2
      enddo
	   
      && Calcula o checksum  
      for nI = 1 to len(cCode128)
          nValorCar = asc ( substr( cCode128, nI, 1 ) )
          if nValorCar = 128
             nValorCar = 0
           elseif nValorCar < 127
                  nValorCar -= 32 
           else 
                  nValorCar -=  50 
          endif
				   
          if nI = 1 
		     checksum = nValorCar
          endif			  
          checksum = mod( (checksum + (nI - 1) * nValorCar ) , 103)
       next nI 
	   &&  Cálculo código ASCII do checkSum

       if checksum = 0
          checksum += 128 
        elseif checksum < 95
               checksum += 32 
        else   
               checksum +=  50 
       endif

       && Adiciona o checksum e STOP
   
       cCode128 = cCode128 + Chr(checksum) +  chr(156)  
    endif 
endif

return cCode128


Harupdf e boleto

Enviado: 11 Set 2012 09:31
por JoséQuintas
Tenho a impressão de que esse código do Banco do Brasil é o digitável.
Vou dar uma olhada nos fontes do harbourboleto pra conferir minha rotina.
Estou usando esta que fiz pelo manual do Itaú (parte da classe)
Note que a linha digitável não é o mesmo código que está no código de barras, então não serve como referência
Obs. cada banco e carteira tem seu critério de cálculo. Este seria do Itaú, carteira 109, se estiver correto.

Código: Selecionar todos

Method Calcula() Class BoletoClass
   Local cBanco, cAgencia, cConta, cCarteira, cNossoNumero, cMoeda, cParte, cDigito, cBarras, cDigitavel
   cBanco       := StrZero(::nBanco,3)
   cAgencia     := StrZero(::nAgencia,4)
   cConta       := StrZero(::nConta,6)
   cCarteira    := StrZero(::nCarteira,3)
   cNossoNumero := StrZero(::nNossoNumero,8)
   cMoeda       := Str(9,1) // Real

   cBarras      := cBanco + cMoeda + StrZero(::dDatVen-Ctod("07/10/1997"),4) + StrZero(::nValor*100,10) 
   cDigito      := ::Modulo10( cAgencia + cConta + cCarteira + cNossoNumero )
   cBarras      += cCarteira + cNossoNumero + cDigito + cAgencia + cConta + "000"
   cDigito      := ::Modulo11(cBarras)
   cBarras      := Substr(cBarras,1,4) + cDigito + Substr(cBarras,5)
   ::cBarras := cBarras

   cParte       := cBanco + "9" + cCarteira + Substr(cNossoNumero,1,2)
   cDigito      := ::Modulo10(cParte)
   cDigitavel   := cParte + cDigito
   cParte       := Substr(cNossoNumero,3)  + ::Modulo10( cAgencia + cConta + cCarteira + cNossoNumero ) + Substr(cAgencia,1,3)
   cDigito      := ::Modulo10(cParte)
   cDigitavel   += cParte
   cParte       := Substr(cAgencia,4) + cConta + "000"
   cDigito      := ::Modulo10(cParte)
   cDigitavel   += cParte
   cDigitavel   += Substr(cBarras,5,1)
   cDigitavel   += StrZero(::dDatVen-Ctod("07/10/1997"),4) + StrZero(::nValor*100,10)
   ::cDigitavel := cDigitavel
   Return NIL


Harupdf e boleto

Enviado: 11 Set 2012 11:50
por depaula.jau
Bom dia!

José... eu estava estudando essa classe mas não deu tempo de terminar, por acaso você conhece? :

+++ Abaixo da Impressão normal das linhas texto

Código: Selecionar todos

    hZebra := hb_zebra_create_code128( '1234567890123', Nil )
    hb_zebra_draw_hpdf( hZebra, oPdfPage, 40, nLinhaPdf-700, 1.0, 30 )

// Função para Gerar Codigo de Barra em PDF
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
é uma lib do Harbour que é usado junto com o HaruPDF e esses são os código que se pode usar :

Código: Selecionar todos

#define HB_ZEBRA_TYPE_EAN13               1
#define HB_ZEBRA_TYPE_EAN8                2
#define HB_ZEBRA_TYPE_UPCA                3
#define HB_ZEBRA_TYPE_UPCE                4
#define HB_ZEBRA_TYPE_CODE128             5
#define HB_ZEBRA_TYPE_CODE93              6
#define HB_ZEBRA_TYPE_CODE39              7
#define HB_ZEBRA_TYPE_CODE11              8
#define HB_ZEBRA_TYPE_CODABAR             9
#define HB_ZEBRA_TYPE_ITF                10
#define HB_ZEBRA_TYPE_MSI                11

Vou continuar acompanhando

Abs;

Marcelo de Paula

Harupdf e boleto

Enviado: 15 Set 2012 11:44
por HASA
:-O

Bom dia, pessoal semaninha puxada, alguma novidade, posso ajudar em algo mais ?
Excelente final de semana a todos,
:xau
Hasa

Harupdf e boleto

Enviado: 17 Set 2012 11:31
por JoséQuintas
No momento criei outra rotina:
- Tem a mesma, que utiliza as fotos de códigos de barras
- Tem outra, onde só utilizo uma barra preta, e desenho tudo.

Andei olhando o manual da harupdf, e encontrei como mudar a resolução do PDF, do default de 72 para 300.
Tinha outra diferença nas fotos, mas acabei de resolver.
Falta testar no caixa eletrônico com a nova resolução/correção.

Harupdf e boleto

Enviado: 17 Set 2012 13:19
por HASA
:D
Ok, se puder ajudar estamos ai,
:)Pos
Hasa

Harupdf e boleto

Enviado: 27 Set 2012 13:34
por HASA
:D
Boa tarde, José, você tem algum pequeno exemplo para eu tentar dar continuidade por aqui, é que estou querendo implementar emissão de boleto via PDF ( como disse já faço impressão e tela via Minigui ) mas gostaria de anexar o pdf do boleto em um email ok. Pode ser um pequeno "demo" com as imagens que te enviei (retiradas as invalidas) se posssivel claro, agradeço,
:{
Hasa

Harupdf e boleto

Enviado: 27 Set 2012 19:36
por JoséQuintas
Preparem os panos de chão, porque vão babar.
Testado e aprovado no leitor do caixa eletrônico.
Anexo o PDF totalmente gerado pela rotina.
Mudou bastante.
Agora tem o logotipo de vários bancos, e o limite de 100kb do fórum não deixa anexar.
Vou ver o que eliminar.

Harupdf e boleto

Enviado: 28 Set 2012 09:25
por HASA
:-O
Bom dia, José ficou lindo, mas... não era exatamente o que eu esperava, você não vai disponibilizar um DEMO.PRG ?
:'(
Hasa

Harupdf e boleto

Enviado: 28 Set 2012 09:59
por JoséQuintas
Como eu disse, aqui não aceitou o tamanho, por causa dos logotipos de bancos.
Agora deixei só o logotipo do Itaú.
Não sei se reparou nisso, mas tem 5 boletos no PDF.
É só criar a lista de boletos, e sai tudo num único PDF.