Harupdf e boleto

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

Moderador: Moderadores

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 »

Comecei a tentar montar o boleto com a harupdf.
Tenho olhado o exemplo Harbour, o Danfe da hbnfe, e minha geração de PDF que converti do VB.
A minha que agora está em Harbour, só trabalha com texto, então não serve pro boleto.

Só pra dar uma idéia da encrenca....
O PDF do Danfe, na hbnfe, define uma página inclinada em 45 graus, e também inclina os textos em 45 graus pra desfazer a inclinaçào da página. Como o Danfe é um trabalho excelente, faz direito o que tem que fazer, dá uma idéia de que os exemplos existentes de modelo acabam dando muito mais trabalho pra entender as coisas.
Infelizmente, no Harbour isso é comum: querem mostrar a quantidade de recursos, e complicam os exemplos pra quem está começando.

Ainda não acertei o cálculo de converter linha/coluna para posições do PDF, mas já começou a sair alguma coisa.
E sem ser pra boleto, acertando essa métrica, vou poder deixar de usar minha rotina que só trata texto, apesar de funcionar numa boa.

O fonte, ainda precário, só traçando linhas e um texto simples, ainda em ajuste está assim:
Se alguém puder ajudar seria interessante.
Por enquanto usei o que tinha no outro fonte, que considera espaçamento entre linhas de 1.2 vezes o tamanho da letra, e largura proporcional à altura em 1.5. (largura * 1.5 = altura).
E o posicionamento no PDF é ao contrário: a posição zero do papel é no fim e não no começo.
Talvez até mais fácil criar funções PdfRow() e PdfCol() que convertam as posições - considerando apenas texto e gráficos básicos, pelo menos pra começo e pra aprendizado.

Código: Selecionar todos


#include "hbwin.ch"
#include "harupdf.ch"


Procedure PBOL0010

cFilePdf := "harutest.pdf"
oPdf := HPDF_New()
HPDF_SetCompressionMode( oPdf, HPDF_COMP_ALL )

oPdfPage       := HPDF_AddPage( oPdf )
HPDF_Page_SetSize( oPdfPage, HPDF_PAGE_SIZE_A4, HPDF_PAGE_PORTRAIT )
nAltura        := HPDF_Page_GetHeight( oPdfPage )
nLargura       := HPDF_Page_GetWidth( oPdfPage )
nLinhaPdf      := nAltura -8
nAngulo        := 90
nRadiano       := nAngulo / 180 * 3.141592
oPdfFontName   := HPDF_GetFont( oPdf, "Helvetica", NIL )
oPdfFontSizeGrande  := 12
oPdfFontSizePequeno := 6
oPdfFontSizeNormal  := 10
//nQtCol := nLargura/oPdfFontSizePequeno*1.5-1
//nQtRow := nAltura/oPdfFontSizePequeno/1.2-1
//MsgExclamation("nAltura " + Ltrim(Str(nAltura)) + ", nLargura " + Ltrim(Str(nLargura)) + ", nQtCol " + Ltrim(Str(nQtCol)) + ", nQtRow " + Ltrim(Str(nQtRow)) )

PdfDrawLine( 3, 0, 3, 88 )
PdfDrawLine( 7, 0, 7, 88 )
PdfDrawLine( 11, 0, 11, 88 )
PdfDrawLine( 14, 0, 14, 88 )
PdfDrawLine( 17, 0, 17, 88 )
PdfDrawLine( 20, 0, 20, 88 )

PdfDrawLine( 23, 60, 23, 88 )
PdfDrawLine( 26, 60, 26, 88 )
PdfDrawLine( 29, 60, 29, 88 )
PdfDrawLine( 32, 60, 32, 88 )

PdfDrawLine( 35, 0, 35, 88 )
PdfDrawLine( 38, 0, 38, 88 )
PdfDrawLine( 41, 0, 41, 88 )

PdfDrawText( 10, 10, "Testando o texto que vai ser impresso", oPdfFontSizeNormal )

//HPDF_Page_SetRGBFill( oPdfPage, 0, 0, 0 ) // reseta cor do fonte

//HPDF_Page_SetRGBStroke( oPdfPage, 0.75, 0.75, 0.75 )
//HPDF_Page_SetRGBStroke( oPdfPage, 0, 0, 0 ) // reseta cor de linha

HPDF_SaveToFile( oPdf, cFilePdf )
HPDF_Free( oPdf )
ShellExecute(cFilePdf)
Return


Function PdfDrawLine(nRowi, nColi, nRowf, nColf)
   nRowi := nAltura - nRowi*6*1.2
   nColi := nColi*6/1.5
   nRowf := nAltura - nRowf*6*1.2
   nColf := nColf*6/1.5
   HPDF_Page_SetLineWidth( oPdfPage, 0.2 ) // Grossura da linha
   HPDF_Page_MoveTo( oPdfPage, nColi, nRowi )
   HPDF_Page_LineTo( oPdfPage, nColf, nRowf )
   HPDF_Page_Stroke( oPdfPage )
   Return NIL

Function PdfDrawText(nRow,nCol,cTexto,nSize)

nRow := nAltura-nRow*6*1.2
nCol := nCol*6/1.5
// nRadiano := nAngulo / 180 * 3.141592 // Calcurate the radian value. 
nRadiano := 0 / 180 * 3.141592 // Não precisa girar o texto, segue igual a página
HPDF_Page_SetFontAndSize( oPdfPage, oPdfFontName, nSize )
HPDF_Page_BeginText( oPdfPage )
HPDF_Page_SetTextMatrix( oPdfPage, Cos(nRadiano), Sin(nRadiano), -Sin(nRadiano), Cos(nRadiano), nCol, nRow )
HPDF_Page_ShowText( oPdfPage, cTexto )
HPDF_Page_EndText( oPdfPage )
Return NIL

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
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 »

Pra ser mais exato, por enquanto só tentando definir a equação pra isto:

Function PdfRow(nRow)
Return nAltura - nRow*6*1.2

Function PdfCol(nCol)
Return nCol*6/1.5
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
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 fonte agora está assim, notem que comparado ao primeiro fonte, mudou só o que se refere a linhas/colunas.
E estou usando basicamente linhas/colunas como se fosse impressão normal estilo tradicional.

Código: Selecionar todos

#include "hbwin.ch"
#include "harupdf.ch"

Procedure PBOL0010

cFilePdf := "harutest.pdf"
oPdf := HPDF_New()
HPDF_SetCompressionMode( oPdf, HPDF_COMP_ALL )

oPdfPage       := HPDF_AddPage( oPdf )
HPDF_Page_SetSize( oPdfPage, HPDF_PAGE_SIZE_A4, HPDF_PAGE_PORTRAIT )
nAltura        := HPDF_Page_GetHeight( oPdfPage )
nLargura       := HPDF_Page_GetWidth( oPdfPage )
nLinhaPdf      := nAltura -8
nAngulo        := 90
nRadiano       := nAngulo / 180 * 3.141592
oPdfFontName   := HPDF_GetFont( oPdf, "Helvetica", NIL )
oPdfFontSizeGrande  := 12
oPdfFontSizePequeno := 6
oPdfFontSizeNormal  := 10
//nQtCol := nLargura/oPdfFontSizePequeno*1.5-1
//nQtRow := nAltura/oPdfFontSizePequeno/1.2-1
//MsgExclamation("nAltura " + Ltrim(Str(nAltura)) + ", nLargura " + Ltrim(Str(nLargura)) + ", nQtCol " + Ltrim(Str(nQtCol)) + ", nQtRow " + Ltrim(Str(nQtRow)) )

PdfDrawLine(  3, 10,  3, 140 )
PdfDrawLine(  7, 10,  7, 140 )
PdfDrawLine( 11, 10, 11, 140 )
PdfDrawLine( 14, 10, 14, 140 )
PdfDrawLine( 17, 10, 17, 140 )
PdfDrawLine( 20, 10, 20, 140 )
PdfDrawLine( 23, 100, 23, 140 )
PdfDrawLine( 26, 100, 26, 140 )
PdfDrawLine( 29, 100, 29, 140 )
PdfDrawLine( 32, 100, 32, 140 )

PdfDrawLine( 35, 10, 35, 140 )
PdfDrawLine( 41, 10, 41, 140 )
PdfDrawLine( 50, 10, 50, 140 )

PdfDrawText(  2, 10, "Banco Itau S/A", oPdfFontSizeNormal)
PdfDrawText(  2, 35, "341-4",oPdfFontSizeGrande)
PdfDrawText(  2, 50, "34191.09008 01530.780749 61723.78005 1 50880000012518",oPdfFontSizeGrande)
PdfDrawText(  4, 105, "Vencimento", oPdfFontSizePequeno)
//PdfDrawText(  5, 10, "PAGAVEL EM QUALQUER BANCO ATE O VENCIMENTO", oPdfFontSizeNormal)
//PdfDrawText(  5, 110, "12/09/2012", oPdfFontSizeNormal)
PdfDrawText(  8, 12, "Cedente", oPdfFontSizePequeno)
PdfDrawText(  8, 105, "Agencia/Codigo do Cedente", oPdfFontSizePequeno)
PdfDrawText( 12, 12, "Data do Documento", oPdfFontSizePequeno)
PdfDrawText( 12, 32, "Numero do Documento", oPdfFontSizePequeno)
PdfDrawText( 12, 42, "Especie Doc", oPdfFontSizePequeno)
PdfDrawText( 12, 52, "Aceite", oPdfFontSizePequeno)
PdfDrawText( 12, 72, "Data de Processamento", oPdfFontSizePequeno)
PdfDrawText( 12, 105, "Nosso Número", oPdfFontSizePequeno)
PdfDrawText( 15, 12, "Uso do Banco", oPdfFontSizePequeno)
PdfDrawText( 15, 32, "Carteira", oPdfFontSizePequeno)
PdfDrawText( 15, 42, "Especie", oPdfFontSizePequeno)
PdfDrawText( 15, 62, "Quantidade", oPdfFontSizePequeno)
PdfDrawText( 15, 82, "Valor", oPdfFontSizePequeno)
PdfDrawText( 15, 105, "(=) Valor do Documento", oPdfFontSizePequeno)
PdfDrawText( 18, 12, "Instruções (Texto de Responsabilidade do Cedente)", oPdfFontSizePequeno)
PdfDrawText( 18, 105, "(-) Desconto/Abatimento",oPdfFontSizePequeno)
PdfDrawText( 21, 105, "(-) Outras Deducoes",oPdfFontSizePequeno)
PdfDrawText( 24, 105, "(-) Mora/Multa", oPdfFontSizePequeno)
PdfDrawText( 27, 105, "(+) Mora/Multa",oPdfFontSizePequeno)
PdfDrawText( 30, 105, "(+) Outros Acrescimos", oPdfFontSizePequeno)
PdfDrawText( 33, 105, "(=) Valor Cobrado", oPdfFontSizePequeno)
PdfDrawText( 36, 12, "Sacado", oPdfFontSizePequeno)
PdfDrawText( 40, 12, "SACADOR/AVALISTA", oPdfFontSizePequeno)
PdfDrawText( 42, 100, "Autenticacao Mecânica - Ficha de Compensacao", oPdfFontSizePequeno)
PdfDrawText( 43, 100, "Papelete Processada e impressa pelo cedente", oPdfFontSizePequeno)


//HPDF_Page_SetRGBFill( oPdfPage, 0, 0, 0 ) // reseta cor do fonte

//HPDF_Page_SetRGBStroke( oPdfPage, 0.75, 0.75, 0.75 )
//HPDF_Page_SetRGBStroke( oPdfPage, 0, 0, 0 ) // reseta cor de linha

HPDF_SaveToFile( oPdf, cFilePdf )
HPDF_Free( oPdf )
ShellExecute(cFilePdf)
Return


Function PdfDrawLine(nRowi, nColi, nRowf, nColf)
   nRowi := PdfRow(nRowi)
   nColi := PdfCol(nColi)
   nRowf := PdfRow(nRowf)
   nColf := PdfCol(nColf)
   HPDF_Page_SetLineWidth( oPdfPage, 0.2 ) // Grossura da linha
   HPDF_Page_MoveTo( oPdfPage, nColi, nRowi )
   HPDF_Page_LineTo( oPdfPage, nColf, nRowf )
   HPDF_Page_Stroke( oPdfPage )
   Return NIL

Function PdfDrawText(nRow,nCol,cTexto,nSize)

nRow := PdfRow(nRow)
nCol := PdfCol(nCol)
// nRadiano := nAngulo / 180 * 3.141592 // Calcurate the radian value. 
nRadiano := 0 / 180 * 3.141592 // o texto segue angulo diferente
HPDF_Page_SetFontAndSize( oPdfPage, oPdfFontName, nSize )
HPDF_Page_BeginText( oPdfPage )
HPDF_Page_SetTextMatrix( oPdfPage, Cos(nRadiano), Sin(nRadiano), -Sin(nRadiano), Cos(nRadiano), nCol, nRow )
HPDF_Page_ShowText( oPdfPage, cTexto )
HPDF_Page_EndText( oPdfPage )
Return NIL

Function PdfRow(nRow)
   Return nAltura - nRow*6*1.2

Function PdfCol(nCol)
   Return nCol*6/1.5

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
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 »

Alterei o tamanho do fonte normal, de 10 pra 9, e acrescentei informações.
O fonte pra impressão está assim, por enquanto:

Código: Selecionar todos

PdfDrawText(  2,  10, "Banco Itau S/A", oPdfFontSizeNormal)
PdfDrawText(  2,  35, "341-4",oPdfFontSizeGrande)
PdfDrawText(  2,  50, "34191.09008 01530.780749 61723.78005 1 50880000012518",oPdfFontSizeGrande)
PdfDrawLine(  3,  10,  3, 140 )
PdfDrawText(  4, 101, "Vencimento", oPdfFontSizePequeno)
PdfDrawText(  5,  11, "PAGAVEL EM QUALQUER BANCO ATE O VENCIMENTO", oPdfFontSizeNormal)
PdfDrawText(  5, 101, "12/09/2012", oPdfFontSizeNormal)
PdfDrawLine(  6,  10,  6, 140 )
PdfDrawText(  7,  11, "Cedente", oPdfFontSizePequeno)
PdfDrawText(  7, 101, "Agencia/Codigo do Cedente", oPdfFontSizePequeno)
PdfDrawText(  8,  11, "NOME DO CEDENTE E CNPJ", oPdfFontSizeNormal)
PdfDrawText(  9,  11, "ENDERECO DO CEDENTE", oPdfFontSizeNormal)
PdfDrawText( 10,  11, "CEP, BAIRRO, CIDADE, UF DO CEDENTE", oPdfFontSizeNormal)
PdfDrawLine( 11,  10, 11, 140 )
PdfDrawText( 12,  11, "Data do Documento", oPdfFontSizePequeno)
PdfDrawText( 12,  32, "Numero do Documento", oPdfFontSizePequeno)
PdfDrawText( 12,  42, "Especie Doc", oPdfFontSizePequeno)
PdfDrawText( 12,  52, "Aceite", oPdfFontSizePequeno)
PdfDrawText( 12,  72, "Data de Processamento", oPdfFontSizePequeno)
PdfDrawText( 12, 101, "Nosso Número", oPdfFontSizePequeno)
PdfDrawText( 13,  11, "12/09/2012", oPdfFontSizeNormal)
PdfDrawText( 13,  32, "NUMERO", oPdfFontSizeNormal)
PdfDrawText( 13,  42, "NF", oPdfFontSizeNormal)
PdfDrawText( 13,  52, "N", oPdfFontSizeNormal)
PdfDrawText( 13,  72, "12/09/2012", oPdfFontSizeNormal)
PdfDrawText( 13, 101, "NOSSO NUMERO", oPdfFontSizeNormal)
PdfDrawLine( 14,  10, 14, 140 )
PdfDrawText( 15,  11, "Uso do Banco", oPdfFontSizePequeno)
PdfDrawText( 15,  32, "Carteira", oPdfFontSizePequeno)
PdfDrawText( 15,  42, "Especie", oPdfFontSizePequeno)
PdfDrawText( 15,  62, "Quantidade", oPdfFontSizePequeno)
PdfDrawText( 15,  82, "Valor", oPdfFontSizePequeno)
PdfDrawText( 15, 101, "(=) Valor do Documento", oPdfFontSizePequeno)
PdfDrawText( 16,  32, "109", oPdfFontSizeNormal)
PdfDrawText( 16,  42, "REAL", oPdfFontSizeNormal)
PdfDrawText( 16, 101, Transform(12345678.90, "@E 999,999,999,999.99"), oPdfFontSizeNormal)
PdfDrawLine( 17,  10, 17, 140 )
PdfDrawText( 18,  11, "Instruções (Texto de Responsabilidade do Cedente)", oPdfFontSizePequeno)
PdfDrawText( 18, 101, "(-) Desconto/Abatimento",oPdfFontSizePequeno)
PdfDrawText( 19, 11, "PROTESTO APOS 10 DIAS DO VENCIMENTO", oPdfFontSizeNormal)
PdfDrawLine( 20,  10, 20, 140 )
PdfDrawText( 21, 101, "(-) Outras Deducoes",oPdfFontSizePequeno)
PdfDrawLine( 23, 100, 23, 140 )
PdfDrawText( 24, 101, "(-) Mora/Multa", oPdfFontSizePequeno)
PdfDrawLine( 26, 100, 26, 140 )
PdfDrawText( 27, 101, "(+) Mora/Multa",oPdfFontSizePequeno)
PdfDrawLine( 29, 100, 29, 140 )
PdfDrawText( 30, 101, "(+) Outros Acrescimos", oPdfFontSizePequeno)
PdfDrawLine( 32, 100, 32, 140 )
PdfDrawText( 33, 101, "(=) Valor Cobrado", oPdfFontSizePequeno)
PdfDrawLine( 35,  10, 35, 140 )
PdfDrawText( 36,  11, "Sacado", oPdfFontSizePequeno)
PdfDrawText( 37,  11, "EMPRESA CLIENTE CNPJ 00.000.000/0000-00", oPdfFontSizeNormal)
PdfDrawText( 38,  11, "ENDERECO CLIENTE", oPdfFontSizeNormal)
PdfDrawText( 39,  11, "CEP BAIRRO CIDADE UF", oPdfFontSizeNormal)
PdfDrawText( 40,  11, "SACADOR/AVALISTA", oPdfFontSizePequeno)
PdfDrawText( 40,  30, "EMPRESA SACADO CNPJ", oPdfFontSizeNormal)
PdfDrawLine( 41,  10, 41, 140 )
PdfDrawText( 42, 100, "Autenticacao Mecânica - Ficha de Compensacao", oPdfFontSizePequeno)
PdfDrawText( 43, 100, "Papelete Processada e impressa pelo cedente", oPdfFontSizePequeno)
PdfDrawLine( 50,  10, 50, 140 )

PdfDrawLine(  3, 100, 35, 100 )

e o resultado disso é este, já o PDF aberto:
Obs. Como já devo ter falado no grupo, não tenho muita afinidade com visual

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

Harupdf e boleto

Mensagem por HASA »

:))
Boa tarde Jose, acho que acertei na trave, peguei seu exemplo e implementei um pouquinho, compilei em Xharbour + BCC55 ok.
Creio que falta muito pouco agora, veja o pdf,
:)Pos
Hasa
Anexos
Teste_harupdf.zip
(81.37 KiB) Baixado 457 vezes
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 que acrescentou na linquedição?
Aqui acusa falta de funções pra imagem.

Mas estou ajustando a parte do código de barras assim, baseado em linha/coluna (ainda não consegui testar):
Um detalhe importante: a diferença de 1 pixel na largura é pra não sobrepor uma imagem na outra e deformar.
Resta linqueditar e testar, e torcer pro pdf não deformar o código de barras no redimensionamento.

Código: Selecionar todos

nRowIni  := Int(PdfRow(42))
nColIni  := Int(PdfCol(11))
nLargura := 19
nAltura  := 54

PdfImage( 'CodeStart.jpg', nColIni, nRowIni, nLargura-1, nAltura )
nColIni += ( nLargura )
For nCont = 1 To 44 Step 2
    cImageFile := "CODE" + Substr(cCodBar,nCont,2) + ".JPG"
    PdfImage(cImageFile, nColIni, nRowIni, nLargura-1, nAltura-1)
    nColIni += nLargura
Next
PdfImage( 'CodeStop.jpg', nColIni, nRowIni, nLargura-1, nAltura-1)
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
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 »

Achei png.lib

Agora falta um leitor de código de barras pra testar.
Anexos
boleto.pdf
(27.83 KiB) Baixado 403 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
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 »

A parte do código de barras ficou assim:

Código: Selecionar todos

nRowIni  := Int(PdfRow(42))
nColIni  := Int(PdfCol(11))
nLargura := Int(PdfCol(13)-PdfCol(10))
nAltura  := PdfRow(47)-PdfRow(42)

PdfImage( 'CodeStar.jpg', nColIni, nRowIni, nLargura-1, nAltura )
nColIni += ( nLargura )
For nCont = 1 To 44 Step 2
   cImageFile := "CODE" + Substr(cCodBar,nCont,2) + ".JPG"
   PdfImage(cImageFile, nColIni, nRowIni, nLargura-1, nAltura-1)
   nColIni += nLargura
Next
PdfImage( 'CodeStop.jpg', nColIni, nRowIni, nLargura-1, nAltura-1)

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
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 »

Não achei função pra desenhar retângulo preenchido. Se encontrar, dá pra fazer o código de barras direto sem precisar de foto.
No exemplo da harupdf o retângulo é feito com linha grossa, mas o problema é que a medida da grossura não é proporcional à medida em pixels, e aí complica tudo.
Dá pra reduzir pra 1 imagem ao invés de 101, mas o legal seria não precisar de nenhuma.
A única imagem seria um quadrado preto, já que o branco não precisa de nada.
Após conseguir testar esse código de barras num leitor, vou brincar com uma única foto.
Pelo menos já teremos as proporções que funcionam.
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
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Harupdf e boleto

Mensagem por sygecom »

Parabéns pessoal, está ficando bom...
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
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 »

:))
Beleza, veja o ZIP anexo acho que resolve o problema das barras. Coloquei o novo código, compila mas... não cria o PDF ? se poder disponibilizar o PRG agradeço.

Hasa
Anexos
harupdf_original.zip
(15.05 KiB) Baixado 412 vezes
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 testar o código de barras.
Coisas importantes:

1) Não adianta imprimir qualquer número no código de barras, tem que ser um código válido
2) Não adianta colocar o digitável no código de barras, não tem nada a ver o número de cima com o código de barras
3) Atenção nas imagens: se a foto chama-se "star.jpg", não adianta incluir "start.jpg" que não sai pdf.
4) O mesmo se tentar incluir outras coisas com nome errado. Não tem mensagem de erro pra arquivo não encontrado. O PDF não sai.
5) Por enquanto a parte importante é funcionar o código de barras, o resto já teremos em hbboleto.
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
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

Harupdf e boleto

Mensagem por HASA »

:( , Verdade, mas você poderia ao menos disponibilizar o prg que te enviei com o ajuste efetuado, o restante tá facil gero um boleto para mesmo de 1 real e vou no banco pagar no caixa eletronico, se ler tá testado ok
:)Pos
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 »

Ué, só mudei esse bloco do código de barras.
Só ontem reparei que usei nAltura e nLargura que já existem no fonte.
Tentei pagar mas não reconheceu o código de barras.

Não sei se dá pra usar funções do Harbour pra criar uma imagem do zero.
A melhor opção pra evitar que seja deformado seria criar uma imagem com o código de barras completo, e incluir essa imagem no boleto.
no php é fácil, porque nele é só somar as imagens: Barras.jpg=barrafina.jpg+barragrossa.jpg+barrafina.jpg
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 »

Usei para testar boleto do itaú:

http://www.borboleto.com.br/borboleto/d ... o-itau.php

.
Editado pela última vez por Pablo César em 09 Nov 2012 08:25, em um total de 2 vezes.
Razão: Mensagem re-editada. Favor utilizar as tags URL para que os links não se percam.
►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)
Responder