Diogo Besson :: tecnologia

mPDF e PHP – A saga continua (ou “Este Comentário vale um post!”)

mPDF e PHP – A saga continua (ou “Este Comentário vale um post!”)

mPDF e PHP – A saga continua (ou “Este Comentário vale um post!”) esclarece alguns pontos sobre o mpdf e este website. Por favor, leia.

Pessoal,

Agora que atingimos mais de 1200 visitas ao post “mPDF PHP e PDF“, percebo que devo apontar dois fatos importantes:

1º – Não fiz a classe, não participei do projeto, não sou responsável por ela e não tenho conhecimentos de percepção extra-sensorial sobre o fato dela não funcionar corretamente em alguns (MUITOS) casos.

2º – As pessoas, na maioria das vezes, (e isso pode ser culpa da educação, da sociedade, da cultura, etc…) fazem perguntas sobre essa classe sem ao menos se darem o trabalho de ler as dúvidas que já foram respondidas.

Este segundo tópico é o que gerou este post.

No dia 14/04/2010, o Vilson encaminhou uma dúvida interessante. O PDF dele era gerado em branco. Segue abaixo o comentário:

“Bom dia Diogo…
Sou iniciante em php… e estou tentando gerar um pdf…
O sistema gera uma página html e salva em uma pasta temporária e passava o endereço desta e era gerado o pdf, eu estava usando dompdf…
agora com o mPdf não estou conseguindo, ele gera o pdf e mostra porém não carrega as informações…
tem como me dar uma mãozinha?”

Respondi ao mesmo via email, re-codificando a aplicação e convertendo tudo para UTF8, que, segundo a documentação oficial do site da classe mPDF PHP, é o aceitável ao mPDF.

Após algumas outras pessoas encaminharem a mesma dúvida, discuti intensamente com a  Ana Paula sobre a geração de PDFs em branco, ressaltando a necessidade de conversão para UTF8 do conteúdo passado ao PDF, porém hoje (27/08/2010) recebi um comentário do Inácio com a mesma dúvida:

“Sou iniciante em php, estou com o mesmo problema do Vilson, ele gera o pdf e mostra, porem não carrega as informações (abre uma pagina em branco, aparece apenas o rodapé), pode me ajudar?”

Minha resposta é composta de perguntas, que podem ajudar a todos que estão tendo problemas com essa classe, então lá vai:

1-) O mais importante de todos, principalmente se você é mesmo um iniciante na linguagem:

Você leu as outras dúvidas e as outras respostas do post que está visitando?

Procurou casos parecidos no google?

O processo de “fuçar” na internet é o que faz de você um pesquisador competente. Mostra interesse, independência, vontade de construir uma opinião própria e um perfil de iniciativa que chama a atenção dos colegas da área!

2-) O mais comum de todos, que acontece a todo momento no caso de “páginas em branco” no mPDF PHP:

Você tentou codificar convertendo para utf8? é tão fácil… $html = utf8_encode($html); só isso!!!!

3-) O mais absurdo de todos:

Você ajustou a memória da sua aplicação? (Ex: ini_set(“memory_limit”,”1G”);)

ver ini_set();

Nem tudo no PHP funciona de forma mágica e automatizada… Às vezes seu relatório tem tantas páginas que o servidor abre o bico e não avisa… Lembra que eu tive que alocar DOIS GIGAS pra um relatório de 22 páginas? odeio quando isso acontece tanto quanto você, mas essas situações fazem parte da vida…

4-) O mais desesperador de todos:

Você já simplificou o código realizando testes sem css, tabelas, divs, imagens e etc? Conselho do mestre Albano Mouta: “Simplicidade é tudo”.

5-) O mais barulhento de todos:

Você já procurou ajuda no grupo de discussão Lista PHP – Google? Nossa comunidade, junto com os Java Jedis da DFJug, é uma das mais colaborativas de todas. Aproveite essa oportunidade que a humanidade te oferece.

Caso nenhuma dessas coisas ajude, sugiro a leitura (COM ATENÇÃO) da documentação que encontra-se no site do mPDF PHP e, em último caso, a contratação de uma consultoria de alguém que seja mais familiarizado à essa classe do que eu, pois apesar de todas as dicas, meus conhecimentos não serão suficientes pra resolver isso 🙂

um abraço ao visitante,

10 Comments

  1. diegorafaelss

    Ótimo post. Somente com o uso de seus posts anteriores e o manual do mPDF, estou gerando relatórios com muita facilidade e com excelente qualidade no layout das páginas, empregando bem o uso do CSS.

    Alguns usuários podem ter tido problemas com o tempo de execução dos scripts para gerar algum tipo relatório, devido a quantidade de registros na base de dados consultada e o tempo para localizar as informações desejadas, o PHP pode demorar um pouco parando a execução do script. Para solucionar este problema eleve o tempo de execução dos scripts PHP adicionado “ini_set(‘max_execution_time’, ‘1200’);” ao topo do seu código ou alterando o “max_execution_time” em seu arquivo “PHP.INI”, no caso deste exemplo o tempo é de 1200 segundos que equivalem a 20 minutos, acredito que seja tempo de sobra para criar seu documento PDF.

    Manual do mPDF: http://mpdf1.com/manual/

  2. diogobesson

    Muito Boa Dica, Diego!!!

    Agradeço pelos elogios, observações e etc.

    Volte sempre.

  3. charlesfrancaCharles

    ola pessoal gostaria de fazer uma pergunta.
    o mpdf tem um metodo chamado SetFooter, gostaria de saber com faço para incluir uma imagem nele, pq eu coloco a tag img com seus atributos e ele simplesmente escreve isso no pdf em formato de texto se alguem puder me ajudar eu agradeço.

    desde ja mto obrigado

  4. diogobesson

    Oi Charles,

    Existe uma diferença entre SetFooter (http://mpdf1.com/manual/index.php?tid=151) e SetHTMLFooter (http://mpdf1.com/manual/index.php?tid=152).

    Acho que você está querendo a obção “B”.

    Dá uma olhada na documentação que tenho uma impressão de que vai funcionar.

    abraço,

    Diogo Besson

  5. marco tulio

    Lá no post no seu segundo exemplo parace ter um errinho que ta conduzindo a galera a loucura ai…

    na sua linha 10 deveria ter o $html = ob_get_clean();

    vc so ta dando o end.. e a variavel $html nao é inicializada

    ai nao sai nada na tela nem mesmo nada kkkkk

    ai o povo que copia e cola e ainda acha ruim de nao dar certo fica chiando como se tivessem razão, kkkk

  6. Diogo Besson

    Valeu pela observação pontual, Marco!

    Em algum momento o código funcionava… Esse post é de 1500, qdo o Cabral descobriu o PHP… Mas precisa ser atualizado MESMO! rs

    Eu também espero que o pessoal algum dia perca a preguiça de ler os comentários antes de sair buzinando. hehehe

    Obrigado e um abraço!

  7. Carlos

    Pessoal, em meu arquivo que vou imprimir em mPDF, tem um laço de repetição, mas queria que cada registro saísse em uma página diferente. Alguém sabe como?

  8. Diogo Besson

    ja tentou usar pagebreak?

    <p style=”page-break-before: always”> </p>

    ou

    <div style=”page-break-after:always”></div>

    ou

    <pagebreak />

    http://mpdf1.com/manual/index.php?tid=108

  9. adriano

    queria uma ajudar ..eu criei o pdf usando o mpdf, mas quando a quantidade de registro é grande ele simplesmente não gera o pdf . o q fazer?

  10. Diogo Besson

    oi adriano.
    vc tem varias alternativas
    1- filtrar mais
    2- aumentar a memória do servidor e configurar tudo (mpdf, php, apache, etc…) pra aumentar o timeout e usar mais memória
    3- paginar, salvando vários arquivos separadamente e indicando pro usuário fazer o download por http ou ftp
    abraço

Leave a Comment

O seu endereço de e-mail não será publicado.