eduardocereto / pyboleto

A Python module to create Brazilian "Boletos de Cobrança" for multiple banks
http://pypi.python.org/pypi/pyboleto/
BSD 3-Clause "New" or "Revised" License
166 stars 125 forks source link

Migra pyboleto.pdf para usar xhtml2pdf #7

Closed jdahlin closed 10 years ago

jdahlin commented 12 years ago

xhtml2pdf (http://pypi.python.org/pypi/xhtml2pdf/) é uma biblioteca que utiliza reportlab mas permite você escrever relatórios usando xhtml e css. Com isso seria bem mais fácil modificar o layout, espacamento etc.

eduardocereto commented 12 years ago

Sinceramente eu prefiro usar o reportlab direto.

O que seria legal seria fazer um output do boleto em html além de pdf. Assim o usuário poderia escolher se quer usar html ou se quer usar pdf.

Criar uma classe BoletoHTML com a mesma interface da classe BoletoPDF, essa era minha idéia original mas acabei nunca indo pra frente.

Se ele quiser usar output em html e depois usar o xhtml2pdf eh escolha dele.

eduardocereto commented 12 years ago

Eu tentei começar a fazer um renderer em HTML puro. Assim o usuário teria a opção de usar HTML ou pdf. E no python3 o usuário poderia usar o pyboleto com impressão em HTML enquanto o reportlab/PIL não migram. Mas dei uma travada pra montar a tabela. Você tem algum modelo de boleto em HTML pra eu copiar e transformar num layout?

Eu dei uma olhada no do boletophp mas o código HMTL que eles usam no boleto é horrível. Prefiro adiar pra fazer direito.

jdahlin commented 12 years ago

http://www.boletobancario.com/onlinedemo/samples/boletoCustom.jsp

jdahlin commented 12 years ago

Mas ele não é software livre, deve existir um outro melhor, tem projetos em java/php/c#

jdahlin commented 12 years ago

Para codigo de barra: http://zanstra.com/my/Barcode.html

eduardocereto commented 12 years ago

Não serve pq não implementa o tipo de barcode que o pyboleto precisa "Interleaved 2 of 5" (aka I2of5). Segundo pq eh uma biblioteca Javascript. O boleto em HTML precisa ser estático para ser possível enviar por email por exemplo.

Mas o código de barras é o menor dos problemas. Fácil de fazer com CSS ou até usando 2 iagens, 1 pexel preto e outro pixel branco.

arturfsousa commented 12 years ago

Posso tentar ajudar vocês também! Então como seria? Criar uma classe BoletoHTML dentro do modulo html.py no mesmo nível de pdf.py que implemente métodos semelhantes? Vocês pensam em usar alguma template engine pra isso (jinja, genshi) ou vai ser a montagem direta mesmo? Quanto ao código de barra em css achei legal a idéia, dá pra fazer uma coisa muito bem pensada.

jdahlin commented 12 years ago

Sim seria criar pyboleto/html.py e fazer mesma coisa do que ele faz, com preferencia com mesmo api para poder trocar entre os dois. Eu acho que não precisa jinja/genshi, por que o html vai ser bem pequeno, acredito que seria melhor montar direto para evitar mas dependências. Mas se você está realmente mais produtivo com templates usa eles e gente vê. Sim, CSS seria melhor do que Javascript e imagens, você vai ter todos os dados no mesmo arquivo, menos o logotipo do banco, mas aí não sei se tem como "embutir" sem usar javascript.

eduardocereto commented 12 years ago

Você pode codificar a imagem em base64 para embutir no arquivo. Mas acho que não precisa se preocupar com isso por agora. Tenta apenas gerar um arquivo em HTML com uma código limpo e com a mesma API do pyboleto.pdf. Quanto ao template engine eu concordo com o @jdahlin que quanto menos dependência melhor. Mas se você quiser pra começar usar algum usa o jinja.

arturfsousa commented 12 years ago

Beleza então. Eu acho melhor também deixar o mais independente possível. Vou trabalhar nisso e mando uma pull pra vocês avaliarem ok?

eduardocereto commented 12 years ago

Beleza

jdahlin commented 12 years ago

Massa!

Maxwbh commented 12 years ago

Fiz a implementação do código de Barra usando o base64;

eduardocereto commented 10 years ago

Closing because it was abandoned. I will be happy to merge a html output extension in the future if someone wants to work in this