Geração de Pdfs grandes

193 views
Skip to first unread message

Hugo Tácito

unread,
Sep 22, 2015, 1:06:01 AM9/22/15
to Django Brasil
Olá pessoal alguém tem experiência em gerar relatórios no django com mais de 200 páginas? Todas as soluções que eu encontrei não escalam. Xhtml2pdf, pisa e reportlab são todas lentas. Ainda não testei o Geraldo. Já pensei até em latex mas teria que alterar vários relatórios e eu não queria ter este retrabalho. Alguém tem uma solução fora estas?

Marcos Thomaz

unread,
Sep 22, 2015, 1:23:20 AM9/22/15
to django...@googlegroups.com
Geraldo é baseado no reportlab, portanto, se achar lento, talvez o Geraldo também não te atenda. Uma hipótese seria utilizar o Jasper.  Mesmo sendo em Java dá pra utilizar tranquilo.

Em 21 de setembro de 2015 21:54, Hugo Tácito <hugot...@gmail.com> escreveu:
Olá pessoal alguém tem experiência em gerar relatórios no django com mais de 200 páginas? Todas as soluções que eu encontrei não escalam. Xhtml2pdf, pisa e reportlab são todas lentas. Ainda não testei o Geraldo. Já pensei até em latex mas teria que alterar vários relatórios e eu não queria ter este retrabalho. Alguém tem uma solução fora estas?

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/d/optout.



--


Marcos Thomaz da Silva
Analista de Tecnologia da Informação

Avraham Serour

unread,
Sep 22, 2015, 5:37:02 AM9/22/15
to django...@googlegroups.com
eu ja usei o http://django-easy-pdf.readthedocs.org/en/latest/
ficou mais rapido gerar dinamicamente  na hora do que gerar assincrono usando wkhtmltopdf

mas no meu caso eram pdf com ~10 paginas

se o seu problema e eficiencia eu sugiro aprender a usar o reportlab melhor, ele e meio chato de entender, eu ja vi muito codigo usando ele de forma ineficiente, o truque mais obvio e gerar tudo em memoria

--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Josir

unread,
Sep 22, 2015, 11:21:19 AM9/22/15
to Django Brasil
Olá Hugo, 

também estou enfrentando esse mesmo problema. 

Se você descobrir uma alternativa posta aqui pra gente - mesmo que seja portar para Java ou .NET :( 

Estou pensando até em avaliar o uso do Amazon/Lambda com Java para utilizar uma máquina com um processador porreta só quando precisar de gerar o relatório.

Boa Sorte!
Josir.

Lúcio Corrêa

unread,
Sep 22, 2015, 11:28:57 AM9/22/15
to django...@googlegroups.com
Hugo, o que acontece quando você tenta gerar esses relatórios com mais de 200 páginas? Fica sem RAM? O processo é morto?

2015-09-21 23:54 GMT-03:00 Hugo Tácito <hugot...@gmail.com>:
Olá pessoal alguém tem experiência em gerar relatórios no django com mais de 200 páginas? Todas as soluções que eu encontrei não escalam. Xhtml2pdf, pisa e reportlab são todas lentas. Ainda não testei o Geraldo. Já pensei até em latex mas teria que alterar vários relatórios e eu não queria ter este retrabalho. Alguém tem uma solução fora estas?
--
Você está recebendo esta mensagem porque se inscreveu no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/d/optout.



--
Lúcio Flávio Corrêa
@luciofcorrea

Hugo Tácito

unread,
Sep 22, 2015, 12:06:54 PM9/22/15
to django...@googlegroups.com
Olá Lúcio,

Funciona tudo corretamente, mas você precisa ter paciência para esperar cerca de meia hora para receber o resultado em alguns casos. Para o usuário final de um serviço web isto é problemático. A solução que estou usando atualmente envolve enviar um feedback com a porcentagem da geração do pdf usando threads e ajax. Eu também percebo que o problema é na geração do pdf, pois quando gero o html do pdf, renderiza tudo rapidamente.

--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Hugo Tácito

unread,
Sep 22, 2015, 12:18:23 PM9/22/15
to django...@googlegroups.com
Uma possível solução para meu caso, é utilizar o pypdf2 para realizar o merge de vários pdfs pequenos e gerar um grande concatenando tudo. Mas ainda estou analisando pois é uma alternativa meio orientada a gambiarra. Vou realizar uma analise mais aprofundada e depois informo se vale a pena.

Élysson Mendes Rezende

unread,
Sep 22, 2015, 12:20:52 PM9/22/15
to django...@googlegroups.com
boa tarde, aqui na empresa utilizamos o Weasyprint[1], tinhamos um problema de "stackoverflow" com arquivos grandes usando o xhtml2pdf devido a ele invocar uma função recursiva para processar o CSS. Pessoalmente eu acho o easyprint melhor porque ele trabalha melhor com as Tags HTML.

Não sei se ele é mais rápido, utilizamos tarefas asyncronas para gerar nossos relatórios e também o desempenho não é crucial para nós.

De qualquer forma, dê uma conferida, as vezes pode te ajudar.


--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Élysson MR
elyssonmr.com.br
Talk/Email: elys...@gmail.com
Skype:       elyssonmr
Twitter:       @elyssonmr

Lúcio Corrêa

unread,
Sep 22, 2015, 12:21:26 PM9/22/15
to django...@googlegroups.com

Você já fez um profile, pra saber exatamente quais são as partes que estão demorando mais? Se puder, disponibiliza um desses arquivos html.

Hugo Tácito

unread,
Sep 22, 2015, 12:38:54 PM9/22/15
to django...@googlegroups.com
Desenvolvo um sistema acadêmico e infelizmente não posso disponibilizar o html pois tem dados sensíveis de alunos. Mas posso fazer um profile depois. Quanto ao weasyprint cheguei a dar uma olhada mas acabamos por optar pelo xhtml2pdf (embora não lembre o motivo), estudarei um pouco mais sobre ele num futuro próximo. O meu problema surge principalmente quando gero um pdf de ~ 200 páginas com tabelas com cerca de mil células por página (tipo aqueles diários de professor que tem a presença dos alunos).

Thiago Montenegro

unread,
Sep 22, 2015, 4:14:06 PM9/22/15
to django...@googlegroups.com
Com reportlab puro eu gero pdf com 1700, 2000 páginas contendo boletos normalmente. xhtml2pdf só uso pra documento de 1 ~ 5 páginas. 

Relatórios grandes sempre uso geraldo reports ou uso reportlab puro mesmo. 

Felipe Arenhardt Tomaz

unread,
Sep 22, 2015, 4:23:55 PM9/22/15
to django...@googlegroups.com
Você não tem a possibilidade de processar isso em backgroud e depois enviar por email ou algo assim? Se sim seria interessante pois não fica um processo bloqueante na navegação. A técnica de dividir para conquistar me parece boa também. Gerar as páginas separadas e depois agrupar.

--
Felipe Arenhardt Tomaz
Systems Developer
Curitiba - Paraná

Hugo Tácito

unread,
Sep 22, 2015, 5:32:17 PM9/22/15
to django...@googlegroups.com

Felipe e é exatamente o que eu faço atualmente. Mando um email depois que a Thread termina o processo. Mas queria uma alternativa mais rápida de preferência que ja renderizasse HTML para evitar reescrever todos os relatórios pequenos que eu já emito. Ou então vou acabar usando reportlab puro ou geraldo como o Thiago explicou para estes relatórios mais complexos.

Lúcio Corrêa

unread,
Sep 22, 2015, 5:38:47 PM9/22/15
to django...@googlegroups.com
Acho que vale a pena você dar uma olhada no pdfkit. Como ele usa o webkit por trás, acredito que possa ser bem mais rápido que as outras soluções.
Lúcio Flávio Corrêa
@luciofcorrea

Lúcio Corrêa

unread,
Sep 22, 2015, 5:40:09 PM9/22/15
to django...@googlegroups.com
E você pode fazer o teste de maneira fácil: é só baixar o binário do wkhtmltopdf e testar com o html gerado.

Hugo Tácito

unread,
Sep 22, 2015, 6:30:00 PM9/22/15
to django...@googlegroups.com

Valeu pelas dicas pessoal. Estudarei mais a fundo cada uma delas.

Fred Chevitarese

unread,
Sep 23, 2015, 1:43:53 PM9/23/15
to django...@googlegroups.com
Você pode fazer usando o celery ou django-rq, e aí quando estiver pronto o pdf você envia um email para o usuário, assim, ele não fica lá esperando até dar timeout.

Precisei de algo do tipo mas, para gerar xls. 




"
São os homens que mais me surpreendem na humanidade. Porque perdem a saúde para juntar dinheiro, depois perdem dinheiro para recuperar a saúde. E por pensarem ansiosamente no futuro, esquecem do presente de tal forma que acabam por não viver nem o presente nem o futuro. E vivem como se nunca fossem morrer e morrem como se nunca tivessem vivido” - Dalai Lama.
"

Fred Chevitarese - GNU/Linux


Fabio C. Barrionuevo da Luz

unread,
Sep 23, 2015, 1:56:21 PM9/23/15
to django...@googlegroups.com
Em relação a feedback para o usuário para a execução de tarefas longas, embora eu nunca tenha utilizado, eu achei interessante a proposta do:

Fábio C. Barrionuevo da Luz
Acadêmico de Sistemas de Informação na Faculdade Católica do Tocantins - FACTO
Palmas - Tocantins - Brasil - América do Sul


Blog colaborativo sobre Python e tecnologias Relacionadas, mantido totalmente no https://github.com/pythonclub/pythonclub.github.io .

Todos são livres para publicar. É só fazer fork, escrever sua postagem e mandar o pull-request. Leia mais sobre como publicar em README.md e contributing.md.
Regra básica de postagem:
"Você" acha interessante? É útil para "você"? Pode ser utilizado com Python ou é útil para quem usa Python? Está esperando o que? Publica logo, que estou louco para ler...

Reply all
Reply to author
Forward
0 new messages