Diogo Besson :: tecnologia

mPDF PHP e PDF

mPDF PHP e PDF

mPDF PHP e PDF . Classe em PHP chamada mPDF que pode ser a solução da maioria dos problemas comuns e avançados na geração de PDF para a web com PHP

mPDF PHP e PDF. Mais ou menos por volta do dia 21/12, eu estive conversando sobre a geração de documentos portáteis (PDF) com o sr. Janes Roberto da Costa, analista de sistemas da Secretaria de Estado de Educação de Mato Grosso.

Ele comentou que possuía uma experiência significativa com uma classe em PHP chamada mPDF que poderia ser a solução da maioria dos problemas comuns e avançados na geração de PDF para a web.

Assim fomos discutindo e, com alguns exemplos que ele me forneceu, consegui desvendar o funcionamento da classe. Aproveito para compartilhar com vocês alguns desses assuntos neste weblog.

Primeiramente, faça o download da classe.

Os arquivos para download estão em http://mpdf.bpm1.com/download http://www.mpdf1.com/mpdf/download. Este é o website oficial do mPDF.

Sugiro que faça o download do pacote de Core do mPDF e também das Fontes Extras para um melhor aproveitamento futuro, porém somente o Core é realmente necessário para utilizar a classe.

A versão atual do pacote no momento de elaboração deste artigo é a 4.1.1

Já baixei. E agora?

Descompacte o pacote do Core. Se você baixou também as fontes extras, descomprima-as dentro da pasta /unifont/ da estrutura do Core.

Essa pasta com todos os arquivos do Core, que aqui ficou com o nome de /MPDF411/ possui toda a estrutura utilizada pela classe principal (mpdf.php) e deve ser acessível pelo seu sistema web.

No meu modo de ver, não estando trabalhando com MVC, o ideal é que ela fique localizada na raiz do seu sistema ou em uma pasta de trabalho de classes de terceiros, portanto, se você tem uma intranet e a pasta raiz se chama /intranet/, poderá instalar o Core dentro de /intranet/MPDF411/ ou intranet/classes/MPDF411/, porém isso fica a critério livre, lembrando que é muito importante apenas que os arquivos e a estrutura de pastas de dentro da pasta do Core não sejam de maneira alguma modificados.

O manual diz também que você deve certificar-se de obter permissão de escrita na pasta raiz da classe e na pasta de trabalho /graph_cache/

Para ter certeza de que tudo foi feito conforme os trâmites convencionais, vá no browser até a pasta /examples/ da sua instalação e rode o arquivo index.php. Ele contém uma série de exemplos que também servem de testes de funcionamento. Lá você pode obter informações de debug e consertar algumas particularidades como fontes que estão faltando, outras permissões necessárias e etc.

Alo Mundo com mPDF

Vamos então fazer um alô mundo pra começar a brincar com o mPDF

[sourcecode language=”php”]
define('MPDF_PATH', 'classes/mpdf411/');
include(MPDF_PATH.'mpdf.php');
$mpdf=new mPDF();
$mpdf->WriteHTML('Alo Mundo');
$mpdf->Output();
exit();
[/sourcecode]

Bem simples, não?

Na primeira linha você define o caminho da classe e na segunda você inclui.

Na terceira você cria um objeto mPDF

Na quarta você escreve o HTML diretamente no seu arquivo PDF, lembrando que ele só aceita UTF-8, por isso, caso você queira escrever “Alô Mundo”, terá que fazer algo do tipo $mpdf->WriteHTML(utf8_encode(“<p>Alô Mundo</p>'”)); , ok?

As outras duas linhas que seguem são a apresentação do que foi montado via WriteHTML().

Muito fácil.

Vamos avançar um pouco mais

Você pode montar o HTML separadamente e incluir TUDO com WriteHTML() via buffer, usando ob_start().

Vamos testar?

[sourcecode language=”php”]
<?php
ob_start(); //inicia o buffer
?>

<b>Um Html Qualquer</b>
<h1>Título</h1>
<p>Funciona!!! </p>

<?php
$html = ob_get_clean();
// pega o conteudo do buffer, insere na variavel e limpa a memória

$html = utf8_encode($html);
// converte o conteudo para uft-8

define('MPDF_PATH', 'classes/mpdf411/');
include(MPDF_PATH.'mpdf.php');
// inclui a classe

$mpdf = new mPDF();
// cria o objeto

$mpdf->allow_charset_conversion=true;
// permite a conversao (opcional)
$mpdf->charset_in='UTF-8';
// converte todo o PDF para utf-8

$mpdf->WriteHTML($html);
// escreve definitivamente o conteudo no PDF

$mpdf->Output();
// imprime

exit();
// finaliza o codigo

?>

[/sourcecode]

Isso é um pouco mais complicado, porém nada tão assustador assim.

E isso dá margem para várias outras coisas

Você pode bufferizar por exemplo, o resultado de uma consulta do banco de dados, assim seu PDF terá um conteúdo dinâmico.

O sr. Janes havia me fornecido um exemplo com uma consulta bem completa e o PDF gerado tinha o valor de relatório formatado para saída de impressora, mas isso não foi o mais impressionante.

Percebi que, além de incluir as imagens que eram linkadas no html gerado, o relatório tinha o poder de interpretar as folhas de estilo CSS.

Ele fez a seguinte mágica:

[sourcecode language=”php”]
<?php
session_start();
header("Content-type: text/html; charset=iso-8859-1");
ob_start(); // Inicia o fluxo
?>

<!– tables, DIVs, consultas no banco de dados, blablabla, imagens e todo o conteudo PHP com HTML –>

<?php
ob_end_clean(); // Finaliza o fluxo
define('_MPDF_PATH', 'classes/mpdf411/');
include(_MPDF_PATH.'mpdf.php');

// cria um novo container PDF no formato A4 com orientação customizada
$mpdf=new mPDF('pt','A4',3,'',8,8,5,14,9,9,'P');

// muda o charset para aceitar caracteres acentuados iso 8859-1 utilizados por mim no banco de dados e na geracao do conteudo PHP com HTML
$mpdf->allow_charset_conversion=true;
$mpdf->charset_in='iso-8859-1';

//Algumas configurações do PDF
$mpdf->SetDisplayMode('fullpage');
// modo de visualização
$mpdf->SetFooter('{DATE j/m/Y&nbsp; H:i}|{PAGENO}/{nb}|SEDUC / SIGETI');
//bacana este rodape, nao eh mesmo?

// carrega uma folha de estilo – MAGICA!!!
$stylesheet = file_get_contents('./stylesheets/estilosPDF.css');

// incorpora a folha de estilo ao PDF
// O parâmetro 1 diz que este é um css/style e deverá ser interpretado como tal
$mpdf->WriteHTML($stylesheet,1);

// incorpora o corpo ao PDF na posição 2 e deverá ser interpretado como footage. Todo footage é posicao 2 ou 0(padrão).
$mpdf->WriteHTML($html,2);

// define um nome para o arquivo PDF
$arquivo = date("ymdhis").'_projeto_li.pdf';

// gera o relatório
$mpdf->Output($arquivo,'D');

exit();

?>

[/sourcecode]

chorei… Muito bom mesmo!

Quem quiser se aprofundar ainda mais, pode dar uma olhada no Manual do mPDF, que é bem completo e cheio de truques.

Agradeço ao Janes pela dica e vamos continuar estudando essa classe para aprender mais novidades.

um abraço e até a próxima.

229 Comments

  1. Pingback: mPDF-PHP-e-PDF : Sysmaya

  2. Daniel

    Excelente post.

  3. Pingback: Converter HTML para PDF usando mPDF | Daniel Sousa

  4. diogobesson

    Valeu pela visita ao blog, Daniel!
    Esse mPDF é um barato, mesmo.
    abraço!

  5. Pingback: Gerar PDF com PHP | Robson Cruz

  6. Vilson

    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?

  7. Niler Barcelos

    Funcionou perfeitamente!!

    Obrigado pela dica!!!

  8. Marcelo

    cara baixei a versão atual mPDF44 e a partir dai nao precisa baixar o core né?

  9. Marcelo

    ta dando esse erro

    sabe o que ta dando errado

    Fatal error: Call to undefined function: iconv() in /home/cmcarati/public_html/mpdf44/mpdf.php on line 11495

  10. diogobesson

    o arquivo do core da versão 4.4 pode ser baixado aqui:
    http://mpdf1.com/repos/download.php?file=MPDF44

    fontes extras aqui:
    http://mpdf1.com/repos/download.php?file=MPDF41EXTRAFF
    essas fontes devem ser alocadas na pasta /unifont/

    boa sorte!

  11. diogobesson

    Eu que agradeço, Niler!
    volte sempre.
    abraço!

  12. diogobesson

    Vilson, te mandei um email
    Deu certo ai?
    abraço!

  13. Marcelo

    to tetando usar na minha maquina com servidor startado e ta dando esse erro

    Error – mPDF requires mb_string functions. Ensure that PHP is compiled with php_mbstring.dll enabled.

    issu pode ter aver com o que ocorre no servidor real?

    me ajude por favor

  14. diogobesson

    Cara, primeira coisa: dá uma olhada no manual do módulo que contém a função iconv(), vê se ela tá instalada e faz alguns testes mais simples, sem usar o mPDF.
    O link é: http://ca.php.net/manual/en/intro.iconv.php
    depois me conta se deu certo
    abraço!

  15. diogobesson

    vc deve observar se os módulos requiridos estão ativos no php.ini

  16. Marcelo

    onde coloco a versão core do mpdf44, pois as fonts vc disse unicode e o core?

  17. Jefferson

    Diogo
    Parabéns pelo blog e pelo post, o mPdf eh excelente, funcionou perfeitamente no meu ambiente de desenvolvimento, mas está aparcendo uns problemas de formatação no ambiente final do sistema, o meu relatorio ficou comprimido no lado esquerdo do arquivo pdf gerado. Tem alguma deia de como sanar isso?

    Obrigado desde já

  18. diogobesson

    Olá Jefferson,

    Me parece que isso tem a ver com a formatação do layout mesmo.
    Teve uma vez que um amigo estava com um problema parecido e qdo ele montou uma versão sem CSS funcionou melhor, sem problemas de margens.
    Tenta aí e depois me conta pra eu dar um toque no meu amigo tb.

    abraço!

  19. Jefferson

    Obrigado pela dica!
    Consegui resolver o problema tirando o width=”100%” da table. Infelizmente o pdf gerado não está pegando nenhuma formatação css via tag style

    Vlw

  20. Jefferson

    Resolvi tb!
    O mais chato é que o problema só acontece no servidor definitivo. Quando o css possue referencia a #id o mpdf n está identificando.. então formatei o relatorio pela tags mesmo

  21. Paulo

    Show de bola esta dica. Parabéns.
    Estava atras de algo simples e eficiente
    e garimpando no google cai aqui e muito
    bom. fácil instalação e funcionou 100%.
    O mais legal é que o mpdf é recheado de
    recursos, é só ver os exemplos.
    Abraços a todos.

  22. Nolram M.

    Diogo, tudo massa agora com este seu post. Mas eu estou com uma bronca que queria saber se você ou alguem saberia. Estou com uma TABLE, que o mPDF não consegue quebra-la e por em 2 folhas. Ele diminui para caber, mas essa forma não é a minha desejada. Vc que sabe mais do mPDF, ja viu algum caso assim.?? Sabes como resolver????

  23. Nolram M.

    Valeu Diogo, mas já consegui reolver o problema.
    Foi só a formatação da tabela…

  24. diogobesson

    Opa. Fico feliz, Nolram.
    Às vezes é complicado pra eu responder as mensagens.
    Acabo tendo que criar em meu micro um ambiente parecido com o seu (imaginando da minha cabeça doida como seria…) pra reproduzir o mesmo problema em casa e tentar responder. Isso demora um bocado e o tempo está curto.
    A correria dos dias não me permitiu dessa vez. Desculpa se fiquei te devendo essa. 🙂
    Sugiro ao pessoal que tiver dúvidas que necessitem de uma emulação, que entrem no grupo de php do google pra gente discutir melhor. Lá tem phpstas profissionais com milhões de anos de linguagem que podem ajudar tb.
    O link da lista é: http://groups.google.com.br/group/listaphp?hl=pt-BR
    Leiam as regras e façam o subscribe.
    Um abraço a todos.

  25. Lu

    Bom dia Diogo,
    Sou iniciante em php e nunca gerei um pdf na minha vida!
    Tenho testado outras bibliotecas que geram o pdf, so que em branco, e a mpdf nem isso ela da erro de memoria, mas e outro detalhe…
    você pode me ajudar?

    Desde ja, muito obrigada

  26. diogobesson

    Oi Lusyana, qual a mensagem de erro e em qual momento ela se dá?

  27. everton vieira

    Grande Diogo! Cara ha uns 3 meses que procuro uma biblioteca que realmente funcione atendendo as minhas necessidades. Pelo que vi no post, essa deve me servir (vou testar). Ja utilizei uma porrada de biblioteca e todas demoram muito na conversão do html para pdf. me envia um email para trocar-mos ideias. abs.

  28. Lusyana

    Diogo, Cada hora aparece uma coisa…
    Todas as mensagens a respeito da conf. do PHP. Até ai td bm, meu problema é que com alguns dos métodos que usei, o pdf fica em branco e com outros ele nem chega a gerar o arquivo.

    O fato é que preciso converter os relatórios rápido, a quantidade de dado que trafega é muito grande, então nem sei por onde começar denovo, ja que todas as bibliotecas que tentei nao deram o resultado esperado.

    Voce pode me ajudar?

  29. diogobesson

    Olá, Luzyana e outros colegas que me enviaram email solicitando ajuda,

    Tem duas coisas:

    Uma é que o mPDF come uma memória absurda do servidor. Como vc disse que a quantidade de dados é muito grande, talvez seja melhor repensar se a geração de um PDF é mesmo a melhor solução.

    Pra vc ter uma idéia, pra gerar um PDF simples com 20 páginas aqui, eu tive que usar a função ini_set(“memory_limit”,”1G”); , ou seja, aumentar o limite de memória pra UM GIGA!

    Na minha situação, qualquer coisa acima disso seria inviável, pois meu servidor é compartilhado com outras aplicações e às vezes qdo a gente puxa o cobertor pra cobrir a cabeça, acaba descobrindo a b… To errado?! Jamais sacrificaria aplicações que já estão funcionando corretamente para atender a uma vaidade de requisito de quem quer que seja.

    Dois é que na utilização do mPDF eu recomendo que SIMPLIFIQUE O MÁXIMO POSSÍVEL.

    Quando a coisa dá errado, é hora de limar as imagens, o css e qualquer outra FIRULA que possa deixar o relatório mais bonitinho.

    Lembre-se que isso aqui é web e existem limitações de web para uso de web.

    É tentativa, erro e acerto:
    Deu errado? Use utf8_encode().
    Deu errado? Arranca o css.
    Deu errado? Arranca as divs.
    Deu errado? Arranca as opções de dentro das tags.

    Não desafie o difícil antes de ter tentado o fácil.

    Só mais uma coisa. Eu SEMPRE falo aqui da lista de PHP do Google e nunca vi ninguem que assina esse blog por lá.
    Então, entrem!
    http://groups.google.com/group/listaphp

    um abraço,

    Diogo Besson
    .

  30. diogobesson

    Hey! Quem aqui já ouviu falar em AGATA REPORT ?

    http://www.agata.org.br/

  31. diogobesson

    deu certo aí, Everton?

  32. Robson Cruz

    Olá Diogo,

    Já utilizo esta classe desde 2009, porém tive que fazer atualização do meu sistema, e houve a necessidade de no meio do arquivo colocar algumas imagens, até aí tudo bem. No entanto, notei que quando a imagem é grande (largura x altura) o PDF não é gerado, vc já passou por algo semelhante?

  33. diogobesson

    cara… Segundo o site, o mPDF tem as seguintes limitações:

    – Script mais lento que o original FPDF e html2fpsf por causa do unicode.
    – Dimensões somente em milimetros para margens e tamanho de páginas, embora o css possa usar unidades
    – DIV, P (tags de bloco de um modo geral) e listas dentro de tabelas são suportadas, mas somente em partes… Se você quer alguma coisa muito diferente da tag limpa, geralmente para de funcionar
    – Blocos definidos como posição absolute, fixed e float também possuem o mesmo problema… Qualquer frescurinha a mais e tudo para de funcionar.

    Não conheço nenhuma limitação com imagens – até porque não tenho usado o mPDF com frequencia -, mas creio que se a coisa pára de funcionar pode ser devido a 2 problemas comuns: limitações conhecidas ou memória do servidor, como observei nos comentários anteriores.

    abraço!

  34. Josimar Reis

    Olá, cara muiiito boa essa classe, salvou a patria…

    mas vlw mesmo digo por disponibilizar essa informação conosco..
    abraços…

  35. diogobesson

    Eu é que agradeço a tua visita neste blog tão (mal) atualizado. risos.
    To há umas 3 semanas querendo colocar aqui um estudo de caso e não consigo tempo…
    Valeu, camarada! Volte em breve e volte sempre.
    abraço!!!

  36. Ariane

    Tem exemplo pra qm utiliza MVC??

  37. diogobesson

    Olá Ariane,
    Desculpe, mas vou ficar te devendo essa

  38. Ana Paula

    Diogo,
    Baixei o codigom instalei, os exemplos funcionam.
    Mas os códigos que vc colocou só o Alô Mundo funciona, o próximo, que eu mais preciso, não funciona de jeito de nehum. Me ajuda!!!
    Obrigada,
    Ana Paula

  39. Ariane

    ta me devendo essa.. me devendo o cachorro..
    mas td bem ehheheh
    obrigada.

  40. diogobesson

    Oi Ana Paula,

    Você deve considerar um desconto aos códigos de exemplo, pois eles foram feitos bem antes de 28/12/2009. A versão do MPF deve ter mudado e isso pode gerar algumas incompatibilidades e imprevistos.

    Além de não estar mais trabalhando com ele há quase um ano, não sou desenvolvedor nem sponsor desse código, por isso às vezes fico por fora das novidades.

    No mais, diga-me qual é o erro que está dando pra vc e tentaremos ajudar aqui do serviço no que for possível.

    Outra dica (novamente…) é entrar no “LISTA PHP GOOGLE” (http://groups.google.com/group/listaphp?hl=pt-BR) e jogar a dúvida no fórum. É um lugar excelente pra fazer amigos, contatos profissionais e dedilhar códigos interessantes.

    um abraço!

  41. diogobesson

    😀
    Encontraram dois filhotinhos de viralatas abandonados aqui na empresa. Vou encaminhar as fotos para seu email.
    Eles estão procurando um lar e vivem dizendo: “Ariane, me adote, por favoooor =0.0= ”
    hehehe
    =*

  42. Ana Paula

    Oi Diogo, antes não aparecia nem msg de erro, mas agora aparece essa “mPDF error: Some data has already been output to browser, can’t send PDF file”.

    Obrigada.

  43. Ana Paula

    Olá Diogo, acho que estou usando o mpdf de forma errada… pois, queria usá-lo para gerar um PDF do artigo que está sendo lido, sem ter que criar dois arquivos, um para o ler e outro para gerar o pdf do artigo. Mas parece que ele não aceita isso. Obrigada.

  44. Ariane

    vc já utilizou com .classname???
    se sim manda um exemplo q eu to me quebrando aqui

  45. diogobesson

    Ah sim, Ana! Com certeza!!!
    Para utilizar essa classe, você deve ter um arquivo separado justamente para a geração do pdf.
    Como a Ariane havia comentado, esta seria a parte view do seu sistema, que, inevitavelmente, se misturaria com uma boa parte de programação bruta… Um probleminha chato pra quem gosta de ARQUITETURA de software.
    =*

  46. diogobesson

    Mais especificamente, esse .classname é o que?

    Procurando aqui nas bibliotecas dos analistas de sistemas, encontrei bastante disso em javascript, mas não entendi bem o teu questionamento.

    Por um acaso teria a ver com Reflection? http://www.php.net/manual/en/book.reflection.php

    =*

  47. Ana Paula

    Olá Diogo, voltei…rs
    Bom, agora estou utilizando o mPDF para gerar relatórios. Porém são todos de consulta ao banco, mas o PDF gerado sai em branco. Poderia ajudar?
    Obrigada.

  48. diogobesson

    geralmente é problema de encode… vc tem que passar tudo pra UTF8 e deixar a apresentação mais simples possível. Comece eliminando css, imagens e etc e depois vá acrescentando as estruturas complicadas aos poucos para ver o que está comprometendo a geração. No mais, creio que o utf8_encode() já vai te ajudar.

  49. Ana Paula

    Estou usando igual ao seu exemplo:

    $mpdf->allow_charset_conversion=true;
    $mpdf->charset_in=’iso-8859-1′;

    Não é isso?

  50. diogobesson

    Na versão 4.1.1 funcionava através do uso de fluxo. Como o mPDF já está na 4.6, não creio que seja totalmente igual.

    Mas, de qualquer forma, acho que vc deve tentar passar tudo pra utf8 pra ver se funciona independentemente do charset do pdf que vc quer gerar.

    depois do buffer, vc guarda o conteúdo numa variável html, lembra?
    (pega o conteudo do buffer, insere na variavel e limpa a memória)
    $html = ob_get_clean();

    após guardar, vc tem que encodar pra utf8:
    $html = utf8_encode($html);

    se der problema de acentuação, aí já é outra história… teríamos que ler a documentação e ver o que dá pra ser feito.

    Em problemas assim, simplificar é sempre a melhor maneira de encontrar a falha. Meu mestre Albano Mouta diria que “simplicidade é tudo” e a cada dia que passa eu vejo mais verdade nessa ilação.
    🙂

  51. Oswaldo Acauan

    Boa tarde!

    Estou usando o mPDF, e tenho algumas duvidas:

    – Quando baixo o PDF, ele vem “corrompido”, dando a mensagem “Format erro: not a PDF or corrupted”

    – Preciso gerar esse PDF (com conteúdo dinâmico) e envia-lo por e-mail. Teria algum exemplo? Ou sabe se isso é possível?

    Grato desde já,

    Oswaldo Acauan

  52. diogobesson

    primeira dúvida (é claro): alguma coisa está impedindo o pdf de ser formatado corretamente e isso pode incluir zilhões de variáveis… debuga a geração e vc vai encontrar o problema.

    segunda duvida: gera o pdf, salva ele numa pasta do servidor, anexa ele à uma mensagem e envie! não tem segredo ¬¬ Não entendi a sua dificuldade, mas se for quanto ao envio, eu recomendo a classe PhpMailer pra fazer isso: http://phpmailer.worxware.com/

    abraço.

  53. Oswaldo Acauan

    Grato, porem estou passando apenas uma palavra ao conteudo do PDF. Segue o codigo:

    define(‘MPDF_PATH’, ‘../../classes/MPDF45/’);
    include(MPDF_PATH.’mpdf.php’);
    // cria um novo container PDF no formato A4 com orientação paisagem
    $mpdf=new mPDF(‘pt’,’A4′,3,”,15,15,16,16,9,9,’L’);
    // muda o charset para aceitar caracteres acentoados
    $mpdf->allow_charset_conversion=true;
    $mpdf->charset_in=’iso-8859-1′;
    //Algumas configurações do PDF
    $mpdf->SetDisplayMode(‘fullpage’); // modo de visualização
    $mpdf->SetFooter(‘{DATE j/m/Y}|{PAGENO}/{nb}|Certificado – Encontro Gaúcho do Terceiro Setor’);
    $mpdf->use_kwt = true;
    $showImageErrors = true;
    // carrega uam folha de estilo
    //$stylesheet = file_get_contents(‘./stylesheets/stylePDF.css’);
    // incorpora a folha de estilo ao PDF
    // O parâmetro 1 diz que este é um css/style
    //$mpdf->WriteHTML($stylesheet,1);
    // incorpora cabeçalho
    $mpdf->SetHTMLHeader(‘teste’);
    // incorpora o corpo ao PDF
    $mpdf->WriteHTML(‘teste’,2);
    // define um nome para o arquivo PDF
    $arquivo = ‘certificado_’.friendly_url($ds_nome_participante).’.pdf’;
    // gera o relatório
    $mpdf->Output($arquivo,’I’);
    exit;

  54. Oswaldo Acauan

    Mesmo utilizando o código basico “$mpdf=new mPDF();
    $mpdf->WriteHTML(‘Alo Mundo’);
    $mpdf->Output();
    exit();”

    O arquivo gerado vem corrompido.

  55. diogobesson

    Como eu já havia dito, este código foi feito para a versão 4.1.1

    com a versão que vc está usando (450) eu consegui gerar o PDF com a seguinte codificação (espero que o wordpress entenda isso aqui):

    <?php

    session_start();
    header("Content-type: text/html; charset=iso-8859-1");
    ob_start(); // Inicia o fluxo
    ?>

    <!– tables, DIVs, consultas no banco de dados, blablabla, imagens e todo o conteudo PHP com HTML –>

    <h1>TESTE</h1>

    <?php
    $html = ob_get_clean(); // Finaliza o fluxo
    define(‘_MPDF_PATH’, ‘mpdf450/MPDF45/’);
    include(_MPDF_PATH.’mpdf.php’);

    // cria um novo container PDF no formato A4 com orientação customizada
    $mpdf=new mPDF(‘pt’,’A4′,3,”,8,8,5,14,9,9,’P’);

    // muda o charset para aceitar caracteres acentuados iso 8859-1 utilizados por mim no banco de dados e na geracao do conteudo PHP com HTML
    $mpdf->allow_charset_conversion=true;
    $mpdf->charset_in=’iso-8859-1′;

    //Algumas configurações do PDF
    $mpdf->SetDisplayMode(‘fullpage’);

    // modo de visualização
    // passa html para utf8
    $html = utf8_encode($html);

    // incorpora o corpo ao PDF na posição 2 e deverá ser interpretado como footage. Todo footage é posicao 2 ou 0(padrão).
    $mpdf->WriteHTML($html,2);

    // define um nome para o arquivo PDF
    $arquivo = date("ymdhis").’_projeto_li.pdf’;

    // gera o relatório
    $mpdf->Output($arquivo,’D’);

    exit();

    ?>

  56. Ana Paula

    Oi Diogo, deu certo!!! :o)

    Porém, estou com problemas de acentuação e formatação.

    Obrigada!

  57. diogobesson

    Ana, dá uma olhada nesse ultimo exemplo que eu enviei ao Oswaldo.
    Ele baixou a biblioteca novamente e resolveu o pepino.
    Vou te encaminhar o arquivo dele por email.
    Não sei qual é a mágica, mas aqui deu certo.
    Não custa tentar. abraço!!

  58. diogobesson

    A Ana teve uma dúvida sobre a formatação da página.

    Sugiro aos visitantes uma olhadinha na documentação:

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

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

    abraço!

  59. Inacio

    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?

  60. diogobesson

    Salve Inácio!

    Hj estou me sentindo o Bozo! (http://www.bozometro.com.br) Deve ser pq fiz aniversário dia 25 e ainda sinto reflexos dos meus 28 anos de experiência… risos!
    Fico feliz em saber que o php tá bem cotado! Já estamos com mais de 1200 visitas a este único post.

    Sobre o problema, eu tenho algumas perguntas a fazer, tanto a você como a outros visitantes que constantemente estão me enviando as mesmíssimas dúvidas recorrentes e repetitivas, que podem auxiliar bastante no processo do “aprendizado” e da “debugagem”:

    1-) O mais importante de todos, principalmente se você é mesmo um iniciante na linguagem: Leu as outras dúvidas e as outras respostas? 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”: Tentou codificar convertendo para utf8? é tão fácil… $html = utf8_encode($html); só isso!!!!
    3-) O mais absurdo de todos: Ajustou a memória? à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? um lixo!!!
    4-) O mais desesperador de todos: 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: Procurou ajuda no grupo de discussão PHP Google? Nossa comunidade, junto com os Jedis, é uma das mais colaborativas de todas. Aproveite essa oportunidade que a humanidade te oferece.

    Caso nenhuma dessas coisas ajude, sugiro a leitura da documentação que encontra-se no site do mPDF e, em último caso, a contratação de uma consultoria de alguém que seja mais familiarizado à essa classe do que eu, pois meus conhecimentos não serão suficientes pra isso 🙂

    abraço!
    Dio
    .

  61. Pingback: mPDF e PHP – A saga continua (ou “Este Comentário vale um post!”) « Diogo Besson :: web tecno log

  62. Daniel

    como é que eu devo fazer para um arquivo .php que tem uma consulta no banco de dados?

  63. diogobesson

    usando buffer, oras bolas!
    qual parte da mágica que você não entendeu?
    leia o artigo de novo, principalmente na parte que diz em letras garrafais: “E isso dá margem para várias outras coisas”. Tenho certeza que você vai entender.

  64. Nolram M.

    Diogo, todos estão fazendo de vc o GURU do mPdf. kkk.
    Olá cara, alguem por ai, já viu se há algum bug no mPdf que não gera no Win7 ???

  65. diogobesson

    Uma excelente pergunta! Vou testar no final de semana e te conto.

    Se não funcionar temos que ver o ambiente.

    No XP eu testo com o xampp, mas no windows 7 só dá pra testar com o IIS… Dá medo só de imaginar…

    abraço!

  66. diogobesson

    Em tempo… O guru é o sr. Janes! hehehe
    Ele que começou essa história.

  67. Uermeson Pinto da Silva

    Olá Diogo,

    Faz um tempo que achei essa sua solução aqui e passei a usa-la como base para todos os meu os projetos que necessitassem de uso da conversão HTML to PDF, ja fiz diversos projetos aprendi muito com o uso da classe e realmente concordo com tudo que você relatou sobre a prória, mas esta semana ao finalizar um ERP para um cliente, e este envolve NF-e, Relatórios e muito mais, deparei-me com um erro que sinceramente esta me comendo o juízo, o que procede:
    è uma tabela de preços, pelo usuário estar habituado com o uso de seu Sistema Client-Side fiz uma adpatação no Programa dele em Delphi(Não sei quase nada e o que sei só deu pra fazer dessa forma) consegui manipular os dados dele para que todos os produtos fossem enviados via FTP para o server onde fica o ERP que estou desenvolvendo, quando isso é feito o php checa a pasta onde estão os arquivos enviados pelo programa abre-os e depois insere todos estes dados na tabela onde ficam gravados os produtos, até ai tranquilo, blzinha, para finalizar o serviço ele me pediu uma tabela de preços que fosse gerada a partir dos produtos que ele cadastra no sistema dele, ate aí tranquilo, fiz todo o processo e para imprimir a tabela no final ia usar como de costume a MPDF, mas aí veio meu problema, até então nao tinha forçado a classe a usar laços gigantes, neste caso o laço chega a pegar 15.000 itens, como funciona a lógica das rotinas que utilizei:
    Como os produtos são dividos por categoria e por linha, criei uma tabela com a identificação para relacionar os produtos e a linha, a categoria já esta relacionada a linha para que uma automaticamente mostre a outra, neste caso seleciono a categoria e exibo as linhas.

    Categorias -> Linhas

    Tabela de Preços – > Categorias->Linhas->Produtos,

    quando vou gerar o pdf mando a id da tabela de preços por sessão, no arquivo de conversão pego a id da tabela e começo as buscas,

    inicialmente pego os dados da tabela de preços que estão no bd e depois venho fazendo as buscas:

    Executo a Query que seleciona todas as categorias.
    Jogo os dados em Array
    Executo a query que verifica pela id das categorias quais categorias tem uma linha relacionada.
    se tiver ele permite a impressão do nome da categoria após isso faço o laço para imprimir todas as linhas relacionadas com a categoria em que o indexador for diferente de 0

    após isso executo uma nova query para buscar os produtos pela id da categoria e pela id da linha e pela id da tabela, dessa forma esse laço so mostrará os produtos que tiverem em comum a id da tabela, a id da linha e a id da categoria, sempre que o indexador for diferente de 0,

    UFA.. chequei ao problema, quando em html tudo funciona perfeitamente bem, agora quando mando processar o script , jogar no buffer e depois recuparar simplesmente ele não retorna nada, página em branco, para usar o buffer de saida uso a função ob_start(){ Proceso o php bem como o html}pego tudo de volta com a ob_get_clean()pego os dados e depois limpo o buffer, depois disso jogo o html gerando numa variavel: $html=ob_get_clean();
    depois uso a função WriteHTML($html) da classe, bom se errei não sei onde, acho que fiz tudo certo já que quando tiro o loop que mostra os produtos o html é gerado perfeitamente, já aumentei a memória temporária do php com a ini_set, e só da pau quando incluo o loop dos produtos, quando gero a tabela por html fica blz só o problema são so cabeçalhos e rodapés, que não consigo incluir em todas as páginas.

    Bom se você não entendeu, não te culpo, mas se entendeu e tiver um luz para me mostrar te agradeço, se eu conseguir resolver antes, posto todo o código aqui com a solução para ajudar outros que tenham um problema parecido.

    PS: Ando dormindo com o google atrás de alguma solução para isso.

    abraços e parabéns pelo site.

    Atenciosamente
    Uermeson Pinto

  68. diogobesson

    Hey Uemerson!
    Que bom saber que esse blog está ajudando em projetos tão grandes! rs

    Seguinte… Se não tiver em utf8, vai imprimir um pdf em branco.

    então:

    $html = utf8_encode($html);
    WriteHTML($html);

    tenta aí e me conta.

    abraço!

  69. Agamenon Pereira

    Diogo, bom dia, parabéns pela ajuda prestada e pelo post. É bom saber que existem pessoas que tem prazer em ajudar outras pessoas. Deus se alegra com isto.

    Estou com problemas para gerar o pdf com uma imagem (Ela não é mostrada no PDF). VOcê sabe como devo proceder para resolver?

    Grato,

    Agamenon

  70. diogobesson

    Olá Agamenon,

    Para colocar uma imagem no PDF eu uso a tag img do html.

    Devo lembrar que o mPDF aceita somente utf8, e além disso algumas recomendações são importantes quando falamos de imagem no pdf gerado:

    – sempre usei caminhos relativos. funcionou perfeitamente até hoje.
    – o nome do arquivo de imagem deve ser simples. Use apenas letras e números, sem caracteres especiais, ok?
    – use somente jpg ou gif. Ainda não testei qual é a reação do mPDF para os diferentes renders de png, portanto ainda não posso recomendar.
    – a tag img aceita somente 3 parâmetros: width, height e rotate (90, -90 e 180) qualquer coisa diferente disso pode dar problema.
    – se mesmo padronizando assim você não conseguir, tente setar a variável do seu objeto mPDF que mostra erros de imagens como TRUE (ex.: $mpdf->showImageErrors = true)

    Em todo caso, a documentação pode proporcionar uma variedade maior de situações, como o uso de file_get_contents() e etc…
    A página de referência é http://mpdf1.com/manual/index.php?tid=245

    boa sorte!

  71. André Luis

    Boa tarde Diogo,

    Encontrei seu blog em uma busca ávida por uma biblioteca que funcionasse melhor que o DOMPDF e ainda bem que encontrei, a mPDF se apresentou melhor em muitos aspectos, porém estou tendo um problema com “colspan”, simplesmente a que possui o atributo não se extende através da tabela, ela está adotando o tamanho da primeira coluna da linha posterior.
    Pelo que já li nos outros posts você não mexe com a biblioteca a um bom tempo já, mas como não custa tentar, você teria idéia do que pode ser? Não encontrei muita ajuda pela documentação.

    Baixei a última versão que é 5.0.

    Obrigado.

  72. diogobesson

    pelo que eu vejo aqui na documentação, as tags

    e

    suportam colspan numa boa, desde que o valor seja um INTEGER.
    realmente é muito estranho.
    Vou te enviar um email e você me passa uma parte do código pra eu tentar debugar qdo tiver um tempinho, ok?
    valeu pelo toque da table
    abraço!
  73. André Luis

    Descobri qual era o problema!!!

    Vou resumir a história: O HTML que deve ser convertido para PDF é a resposta de uma consulta que o cliente faz no sistema e, para não ter que refazer a consulta, uma vez que ela é cobrada por terceiros, a cada vez que fosse gerar o PDF, eu armazeno o resultado em um campo input hidden através do javascript e envio para a página de geração do documento via POST. Era aí que estava o problema o POST estava indo “escapado” automaticamente pelo PHP e isso estava fazendo com que o mPDF se perdesse!
    Para descobrir converti os elementos por [ e ] antes de gerar o PDF e assim ele me mostrou o HTML que estava recuperando e quando vi lá estavam as benditas “”.
    Daí foi só utilizar o stripslashes antes e.. tadá.. funcionou!!

  74. diogobesson

    E não foi só isso:

    O André descobriu hoje também que a biblioteca se perde caso as tags estejam em maiúsculo, por exemplo “DIV” ela não encontra, tem que utilizar “div”.

    Boa dica!

    valeu.

  75. sidnei

    diogo estou com um probleminha, tô tentando exibir uma imagem no pdf só q a imagem ñ carrega, busco ela através de uma consulta no BD, se vc puder me ajudar agradeço.

    ps: mpdf é melhor q fpdf.

  76. diogobesson

    Hei Sidnei,
    Procure ver se a imagem aparece em um html normal, ou seja, ANTES da geração do PDF.
    Isso me parece caminho errado para a imagem – caso seja caminho armazenado no banco; Ou imagem corrompida – caso ela esteja completamente armazenada em binário no banco.

  77. Charles

    Diogo

    Achei ótima a mPDF porém eu não consigo fazer aparecer imagem no PDF.

    Tenho a seguinte situação:

    Na pasta raiz do sistema, tenho a pasta “mpdf50”, “images” e “cadastro”.

    De dentro da pasta “cadastro”, eu invoco o mPDF usando um conteúdo de HTML que possui a tag “img src”, justamente essa tag está apontando para a pasta “images”, (estou usando img src=”../images/imagem.jpg” dentro do HTML). O mPDF não acha esse arquivo, e o pior é que eu já tentei de várias formas, inclusive colocando um img src=http://www.meusite.com/images/imagem.jpg (que no browser funciona normal) e mesmo assim o mPDF dá erro de “Cannot find the image”.

    Eu não achei nenhum exemplo desse tipo, mostrando como se usa caminhos relativos para imagens. Só tem exemplo de utilização mais simples..com a imagem estando no mesmo diretório do mPDF.

    Se puder me ajudar, ficarei muito grato!

    Obrigado desde já!

  78. diogobesson

    Você já tentou importar os dados da imagem como variável?

    Dá uma olhada em “Image data as a Variable” na página “http://mpdf1.com/manual/index.php?tid=245” da documentação do mPDF.

    abraço.

  79. Charles

    Olá Diogo

    Vou até tentar usar como variável, mas, não vai resolver meu problema, pois a minha funcionalidade é assim:

    -Na tela de “cadastro” tenho um editor HTML (aqueles do typo WYSIWYG) onde o usuário “monta” o HTML dinamicamente, usando quaisquer imagens que ele queira.

    Inserir imagem no PDF é algo básico. Deve haver uma forma de usar o “img src” que funcione! Isso é básico!

    Você disse que usa o “img src” com caminho relativo né? Como vc coloca isso no HTML? Seria algo como ?

    Abraço!

  80. diogobesson

    Algo exatamente como vc colocou no seu exemplo. Por isso estou estranhando o não funcionamento.
    Se funciona no mesmo HTML que você usa pra gerar o PDF, deveria funcionar no pdf tb (desde que tudo esteja convertido pra UTF8, claro…).

  81. Ricardo

    Cara,
    Gostei do post mas não consegui fazer nada funcionar aqui, sou bem leigo no assunto. Vou te falar oq fiz:
    baixei o pacote Core do mPDF (criou a pasta MPDF411) e as fontes, queria ver como funcionava e coloquei dentro do servidor essa pasta e tentei rodar o exemplo na qual vc se refere neste post (MPDF411/examples/index.php), porém quando clico nos links de exemplos, nada acontece.
    por favor, você poderia me ajudar???

    Grato,

    Ricardo

  82. diogobesson

    Alô Ricardo.

    A primeira coisa a fazer é baixar a versão mais atual – no caso de hoje, 25/02/2011 é a 5.0 – e seguir essas instruções aqui:

    http://mpdf1.com/manual/index.php?tid=33 – instalação

    http://mpdf1.com/manual/index.php?tid=331 – debug

    o debug vai te mostrar se é um erro de biblioteca ou de script.

    abraço e boa sorte!

  83. Charles

    Diogo, achei a solução:

    Eu estava pegando o conteúdo HTML diretamente do Editor HTML, que estava substituindo as aspas pelo código " e com isso o mPDF não encontrava o arquivo de imagem!

    A solução que usei foi essa:

    $mpdf->WriteHTML(htmlspecialchars_decode($_POST[“contrato”]));

    Agora ficou show!

    Obrigado!
    Abraço

  84. Ricardo

    Diogo,

    Deu certo,

    Valeu…

  85. clifhanger

    Boa noite a todos.

    Diogo, achei muito legel o codigo, porem, estou com um problema de adiocionar fotos. Eu ja tentei de todo jeito adicionar uma foto e não consigo. Importar dados do banco de dados para pdf tudo bem, mais quando eu adiciono uma foto, não da certo, não aparece erro, simplesmente não aparece nada.
    segue abaixo o codigo que estou utilizando.

    A respeito da solução da foto do colega acima

    estou usando ela assim:
    $mpdf->WriteHTML(htmlspecialchars_decode($html,2));

    Você poderia me da uma ajuda

    segue abaixo o codigo que estou utilizando

    Teste

    allow_charset_conversion=true;

    $mpdf->charset_in=’iso-8859-1′;

    $html = utf8_encode($html);

    //Algumas configurações do PDF

    $mpdf->SetDisplayMode(‘fullpage’);

    // modo de visualização

    $mpdf->SetFooter(‘{DATE j/m/Y  H:i}|{PAGENO}/{nb}|SEDUC / SIGETI’);

    //bacana este rodape, nao eh mesmo?

    $mpdf->use_kwt = true;
    $showImageErrors = true;

    // carrega uma folha de estilo – MAGICA!!!

    $stylesheet = file_get_contents(‘estilo.css’);

    // incorpora a folha de estilo ao PDF

    // O parâmetro 1 diz que este é um css/style e deverá ser interpretado como tal

    $mpdf->WriteHTML($stylesheet,1);

    // incorpora o corpo ao PDF na posição 2 e deverá ser interpretado como footage. Todo footage é posicao 2 ou 0(padrão).

    $mpdf->WriteHTML(htmlspecialchars_decode($html,2));
    // define um nome para o arquivo PDF

    $arquivo = date(“ymdhis”).’_projeto_li.pdf’;
    // gera o relatório
    $mpdf->Output($arquivo,’D’);
    exit();

    ?>

  86. clifhanger

    Achei a solução..

    utilizei o mesmo codigo original proposto pelo diogo, no entando peguei a versão 5 do mpdf e funcionou.

    A versão 411 não tava aceitando acrescentar foto.

    Agora ta show de bola.

    Excelente código cara. Parabéns!

  87. diogobesson

    Opa!
    As novas versões são muito melhores mesmo.
    Vários problemas são evitados com uma simples atualização.
    abraço!

  88. Guga

    Ola Diogo,
    O post é muito legal e comecei a utilizar normalmente. Fiz uns testes e consegui gerar o PDF, certinho e todo padronizado, mas hoje, de uma hora para outra so gera o PDF em branco.
    Poderia me dar uma luz….
    Obrigado,
    Guga

  89. diogobesson

    de uma hora pra outra não, né? algo mudou… dá uma perguntada pra sua gerência de configuração que com certeza teve um impacto.

    no mais, você tem dentre os comentários deste post, muitas pessoas com casos parecidos com o seu.

    Dá uma lida e tenta de tudo. Sempre anotando essas alterações pra acompanhar

    abs!

  90. Guga

    Poxa Diogo! Nao consigo resolver mesmo!
    O que estou tentando converter é um html que vai por email, que tem tabela e estilos e o link do PDF que é gerado. Como te disse fiz todos os testes e funcionou, mas hoje ja estava gerando em branco. Agora atualizei para a versao 5.1 e nada, somente folha em branco. Se coloco uma variavel simples no WriteHTML gera normalmente, mas o html cheio de variáveis nao mais. Será alguma atualizaçao de PHP onde o site está hospedado? Ah.. tentei me inscrever na lista php mas nao acho onde, qual o caminho para inscriçao? Abraço
    guga

  91. Guga

    Outro problema… converti tudo em UTF-8, beleza.. eliminei a tabela e os estilos, mas se uso um por exemplo, aparecem as mensagens:

    Warning: Wrong parameter count for class_exists() in D:Domainsstefaniseguros.com.brwwwrootmpdfmpdf.php on line 7934

    Warning: Wrong parameter count for class_exists() in D:Domainsstefaniseguros.com.brwwwrootmpdfmpdf.php on line 7934

    Fatal error: Cannot redeclare class ttfontfile in D:Domainsstefaniseguros.com.brwwwrootmpdfclassesttfontsuni.php on line 39

    And now?
    Abraço, Guga

  92. diogobesson

    Guga-san,

    Faz o seguinte… Gera um arquivo em HTML simples e me envia o código gerado por email. Vou ver o que dá pra fazer qdo tiver um tempinho.

    abraço!

  93. Marcelo

    Simplesmente a melhor das que já ultilizei, parabéns.!!

    []’s

  94. Márcio Simão

    Estava precisando justamente de uma classe assim para gerar orçamentos em PHP! Vou baixar e testar, parabéns pelo post Diogo! Valeu!

  95. sostenesgomes

    Besson, muito bom seu post, já estou usando mpdf e curti bastante, estou querendo inserir uma quebra de página no pdf gerado, sabe como fazer ?
    Abraço, e até!

  96. diogobesson

    Oi Sostenesgomes,

    A ferramenta está na versão 5.2.

    Você pode criar a quebra de página via PHP ($mpdf->AddPage();) ou HTML mesmo ()

    Qualquer dúvida que tiver, basta dar uma olhada nessa parte da documentação -> http://mpdf1.com/manual/index.php?tid=108

    Abraço!

  97. diogobesson

    não saiu a tag do html (o wordpress arranca tudo…), mas vc pode ver na documentação 😀 #lol

  98. Felipe Girotti

    Cara me ajudou bastante esta dica, vlw.

  99. diogobesson

    Agradeço tua visita, Felipe! grande abraço.

  100. Greenomac Dias

    Amigo achei o mPDF show de bola, porem to tendo grande problema em gerar o pdf no formato paissagem, estou usando a versao 5.3 do mPDF, segue abaixo um teste simples que fiz e nao rodou:

    Ola Mundo
    WriteHTML($html);
    // escreve definitivamente o conteudo no PDF

    $mpdf->Output();
    // imprime

    exit();
    // finaliza o codigo

    ?>

  101. diogobesson

    Olá Dias,

    Seu código chegou incompleto.

    a variável html recebe o valor “Olá Mundo”?

    Posso te enviar um email pra esclarecermos melhor esse código?

    abraço.

  102. Greenomac Dias

    Opa amigo pode sim

  103. Greenomac Dias

    Amigo consegui deixar no formato paissagem da seguinte forma:
    $mpdf=new mPDF(”, array(297,210));
    porem ficou em branco, tem como vc me mandar um email para eu lhe enviar o meu codigo para vc me da uma ajuda.
    abs

  104. Greenomac Dias

    Amigo acho que o problema estar na tabela onde mostra as informações vinda do banco, vou fuçar ak ver se consigo corrigir e compartilhar o conhecimento. abs

  105. diogobesson

    leia todos os comentários deste post e do outro sobre mpdf. geralmente página em branco é problema de charset.
    abs!

  106. Rapha Henrique

    como posso gravar o pdf no mysql sem ele ser exibido na página?! por exemplo! tenho um formulário e o cliente preenche o formulário e ao clicar no submit do form ele gera o pdf e salva em banco de dados?
    o cliente não precisa vizualizar o pdf gerado

  107. diogobesson

    Rapha,

    Grava o arquivo pdf no servidor e o caminho de acesso dele vc coloca em um campo varchar no banco de dados. Nada mais fácil, brow.

    agora… se vc REALMENTE precisar gravar um arquivo inteiro dentro do banco (afe!!!), siga a dica do oxprofessor neste link -> http://scriptbrasil.com.br/forum/index.php?showtopic=117352

    fonte: http://bit.ly/oA9nHY

  108. Rapha Henrique

    e como posso grava-lo no no servidor?

  109. diogobesson

    Acho que isso já vai te ajudar, Rapha.

    Se precisar mais que isso, vou começar a cobrar pela consultoria.

    😀

    abraço.

  110. Rapha Henrique

    Muito obrigado vou ver se consigo! caso sim eu posto aqui

  111. Rapha Henrique

    encontrei a solução e ia postar aqui mas pelo jeito vc ja fez
    hehe
    muitissimo obrigado!
    e ve ai quanto ta a conta da consultoria
    rs
    Valeu cara muito obrigado
    só faltava isso para finalizar o sistema (e a busca né mas isso é tranquilo) abraço

  112. Rapha Henrique

    Boa tarde Diogo
    tem como botão um botão para funcionar o sistema de conversão ou somente com um página mesmo?

  113. diogobesson

    Rapha, os scripts PHP só rodam dentro de páginas php.

    Uma dica de lógica pra isso que vc quer fazer:

    1-) pegue o conteúdo a ser convertido e grave numa variável de sessão.
    2-) crie um botão que direcione você para a mesma página, porém passando por GET um parâmetro de marcação, por exemplo: #?action=imprimirPDF
    3-) faça uma condição na página. Se o parametro passado por GET for igual a imprimirPDF, procede ao script de gravação do PDF utilizando-se do que estiver armazenado na variável de sessão, caso contrário, ignore o script de gravação do PDF.

    certo?

  114. Guga

    Diogo, beleza?
    Carinha.. html para PDF ta perfeito, agora vc teria uma dica para criar o PDF de uma pagina PHP? É uma pagina que traz um select no banco…

    Valeu,
    At.
    Guga

  115. diogobesson

    guga, vc leu lá em cima onde tem o título “E isso dá margem para várias outras coisas”???
    dá pra fazer numa boa com stream usando ob_start();

  116. Adriano

    Diogo, boa tarde.
    Sou desenvolvedor de PHP a algum tempo… e sempre tive problemas qto a impressão de documentos, tanto em web qto em pdf… já usei o fpdf e agora estou usando o mpdf, conforme sua orientação… Só que meus problemas continuam… O problema é que mesmo definindo as margens, sempre da diferente na impressão em diferentes impressoras e diferentes navegadores. Gostaria de saber se existe algum coisa a fazer nesse problema. Minhas impressões são sempre etiquetas, boletos entre outros, onde realmente eu defino as margens e tal…
    Poderia me auxiliar nessa solução.
    Desde já obrigado.

  117. diogobesson

    Isso é estranho, Adriano. O PDF é gerado no servidor e você baixa o arquivo fechado para seu micro via web. Não tem interferência alguma do navegador no processo de geração do PDF pelo interpretador do PHP. Sugiro que você passe esse problema diretamente aos criadores da classe, pois é uma descoberta relevante. abraço!

  118. Eduardo

    Adriano, tente definir o tipo de papel e as margens ao instanciar a classe.

    $mpdf = new mPDF(”, ‘A4’, 0, ‘Arial’, 15, 15, 15, 15, 8, 8);
    Os últimos parâmetros são as margens em milimetros: left-margin, right-margin, top-margin, bottom-margin, header-margin, footer-margin.

    Como o Diogo disse, com o PDF usar navegadores diferentes não faz diferença pois quem gera o PDF é o PHP.

    http://mpdf.bpm1.com/forum/comments.php?DiscussionID=28

  119. Adriano

    Boa tarde Eduardo.
    eu já faço esse procedimento. Veja abaixo:
    $mpdf=new mPDF(‘pt’,’A4′,”,”,31,0,29,10,9,9,’P’);
    Eu não sei se esse problema pode ser na impressora (conf dela mesmo), mas para vc ter uma idéia. Nessa configuração que passei, eu coloquei left-margin 31, e na verdade impresso deu 25mm ou 2,5cm, isso em várias impressoras e em uma saiu tudo fora… então por isso que falo que nao bate. Sempre tenho que chegar no resultado final pelo método de tentativa e erro. Eu realmente gostaria de passar uma configuração e ser feita exatamente como passado, como Por exemplo no Word… ou impressões como sistema Desktop…
    Assim, a geração do PDF aparentemente é igual em ambas máquinas. O problema ocorre somente na impressão… só isso.
    Mas fica aí somando na experiência no conteúdo… realmente fiz o PDF somente com os exemplos do Diogo
    Abraços.

  120. Adriano

    Diogo, volto aqui novamente… Estou com o seguinte problema.
    Fiz a página estática para geração de boleto, até aí normal….. para testar… tudo certinho… quando coloquei a programação para abastercer os campos… o rel agora sai em branco.. Para verificar se existia alguma problema de página, comentei apenas a parte que gerava o boleto, e está sendo impresso (gerado) normal… sem erros… Saberia me dizer o que pode ser?

  121. diogobesson

    Suponho que seja problema de imagem quebrada com caminho ou binário vindo do banco E/OU charset dos dados vindos do banco.

    Se, mesmo depois que você passar tudo pra UTF8, continuar em branco, vc vai ter que fazer debug ítem por ítem até ver qual está retornando um caracter não aceito pela classe.

    Qdo conseguir gerar, dê um retorno pro povo aqui, pois algumas pessoas estão desesperadas pra gerar boleto com mPDF e não estão conseguindo devido à formatação do HTML e CSS. Você poderia dar uma grande ajuda pra nossos colegas com a solução desse problema.

    Abraço,

    Diogo.

  122. Adriano

    consegui resolver o problema. boleto gerado. em pouco tempo posto a solução.

  123. Breno Mol

    Sensacional, perfeito

  124. diogobesson

    Valeu, Breno!
    Ainda to esperando a solução do Adriano por aqui… rs

  125. Mauro

    Ola Diogo, Parabens pelo post! passei a usar o Mpdf. consegui fazer tudo certinho, porem a unica coisa que esta pegando é o seguinte.

    Esta trazendo a acentuação no banco e da pagina certinho, porem tudo que esta acentuado dentro do fica desconfigurado, ja tentei varias coisas utf8_encode, etc. alguem ja passou por isso?

    Obrigado

  126. Mauro

    quis falar “” nao sai no post acima

  127. diogobesson

    então… rs… continua não saindo.
    dentro do pdf?
    bom… geralmente, os problemas principais de encoding são resolvidos nessa página da documentação -> http://mpdf1.com/manual/index.php?tid=293
    tenta postar um exemplo da falha pro pessoal te ajudar.

  128. Mauro

    Ola diego o que nao esta acentuando é o que esta dentro da tag htmlpageheader e htmlpagefooter.

    Vamos ver se agora aparece ai no post… hehe

  129. Mauro

    Diogo consegui resolver. Criei uma variavel pegando todo o conteudo do html que estava dentro da tag htmlpageheader e passei a chamar o cabecalho assim:

    $cabecalho = … codigo html do cabeçalho aqui …

    $mpdf->SetHTMLHeader($cabecalho);

    Agora os acentos aparecem perfeitamente no meu cabecalho e rodape.

    Fica ai a dica para todos!

    Abraços.

  130. diogobesson

    Perfeito!

    O jeito mais simples de setar cabeçalhos e rodapés com HTML dentro do mPDF é usando o método 2

    SetHTMLHeader()
    SetHTMLFooter()

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

    []s!

  131. Eduardo

    Diogo, não sendo repetitivo, mas já sendo… excelente tópico.

    Me permita compartilhar com os demais sobre o “ob_get_contents”. Você comenta sobre mostrar dados do banco na parte “E isso dá margem para várias outras coisas”, cara… pastei pra conseguir entender e, se eu consegui, certamente os outros vão (risos)!

    Não estava conseguindo mostrar os dados do banco, então pesquisei… pesquisei e achei o “ob_get_contents”, ou seja, imprima o seu PHP normalmente, antes do “ob_end_clean()” coloque “$variavel = ob_get_contents()”.

    Quem estiver com dúvidas sobre mostrar dados do banco, leia no manual do PHP sobre essa função, vai ajudar muito.

    Diogo, se ver algo incorreto ou outra forma de mostrar os dados do banco, diz aí.

    falou… valeu.

  132. diogobesson

    eu que agradeço, Eduardo!
    o blog ta meio morto, mas eu não abandonei a causa. rs
    volte sempre!
    abraço!!!

  133. BrenoHM

    E ai galera, alguem sabe como se chama alguma função no mpdf? abraço

  134. BrenoHM

    Fala Diogo blza cara? Dexa eu te falar, quando um fiz um loop na minha tabela:

    <tr bgcolor=>

    ele pulou de página automaticamente. Agora quando coloquei um conteudo estático que ultrapassava uma página ele colocou um por cima do outro? Como vou resolver isso? Abraço

  135. diogobesson

    como todo PHP,
    $objeto->funcao();
    uai!

  136. diogobesson

    como assim, “um por cima do outro” ???
    pulou de página automaticamente ????
    tem alguma coisa errada com seu código, Breno. tr não é tag de mudança de página. Ele não devia se comportar dessa forma.
    Sugiro que você abra uma conta em algum blog e poste os problemas… ou então entre em algum grupo de discussão, como o PHP Google, por exemplo, pro pessoal tentar te ajudar, porque via comentários fica bem difícil de entender a dificuldade.

  137. Herivelto

    Sei que muitos já lhe agradeceram, mas não poderia deixar de fazê-lo também. Parabéns Diogo, muito bom seu texto! Há muito tempo procurava por uma classe para geração de pdf’s que funcionasse dessa forma. Me ajudou muito, estarei a aplicar nos meus projetos. Obrigado.

  138. diogobesson

    essa classe não é perfeita… muita gente encontra problema com ela, mas o pessoal atualiza bastante e resolve 95% dos pepinos. É uma boa programação! eu que agradeço tua visita, Herivelto. Grande abraço!

  139. cleytoneuler

    Cara, este seu post me ajudou muito mesmo. Parabéns por compartilhar.

  140. diogobesson

    Que bom! Fico feliz. Eu é que agradeço sua visita. Volte sempre. abraço.

  141. Tatianne da Costa Negri

    Boa tarde Diego DiOgo, estou tendo esse erro será que pode me ajudar

    Fatal error: Allowed memory size of 100663296 bytes exhausted (tried to allocate 184960 bytes) in /home/rhemaedu/public_html/paineladm/classe/mpdf/mpdf.php on line 13831

  142. diogobesson

    Olá Tatianne,

    O pdf gerado extrapolou o limite de memória da sua aplicação.

    Mensure o total máximo de memória que vc vai precisar usar, depois, se seu servidor tiver memória suficiente pra fazer isso sem explodir, use ini_set(‘memory_limit’,’TAMANHO-DA-MEMORIA-MAXIMA-EM-USO’); // set memory to prevent fatal errors
    Já vou avisando que em alguns servidores, principalmente os compartilhados, esse tipo de recurso é considerado abusivo e não permitido pelo php.
    Mas não custa tentar…

    A Lusyana teve o mesmo problema que você: http://diogobesson.wordpress.com/2009/12/28/mpdf-php-e-pdf/#comment-83

    abraço,

    Diogo

  143. Pingback: Top 5 « Diogo Besson :: web tecno log

  144. diego

    Não conhecia essa classe até ler esse post, fiquei muito satisfeito com os resultados da MPDF.

    Todos os recursos que costumo usar na FPDF acabei encontrando no manual, muito bom mesmo.

    http://mpdf1.com/manual/index.php

  145. diogobesson

    Valeu pela visita, Diego!!
    t+!

  146. Jorge Carvalho

    Olá Diogo!

    Após muita pesquisa e várias tentativas de configuração resolvi te pedir ajuda.
    Tenho um relatório que gera uma tabela de inscritos em determinados cursos. O PDF fica OK quando cabe em uma única página, mas quando precisa ser feita uma quebra, sendo que apenas duas páginas seriam o suficiente para o relatório, é gerado um arquivo com mais de 40 páginas, a maioria com uma ou duas linhas da tabela e a penúltima totalmente preenchida e a última em branco. Você tem alguma sugestão para corrigir esse problema?

  147. marco tulio

    Gostei vou testar agora

  148. Jander

    Diogo, gostaria de saber como que eu faço pra converter um while que está trazendo informações do banco ???

  149. Nickollas

    @Jorge, tente utilizar o css:
    table {
    page-break-inside: avoid;
    }

    e onde você quer quebrar a página você usa a seguinte tag.
    style='page-break-before: always'

  150. Diogo Besson

    “converter um while” é um termo vago.
    desenvolve melhor a pergunta que aqui a gente converte até o capeta.
    😀
    []s,
    Diogo

  151. Diogo Besson

    Valeu Nickollas,

    Desculpa a demora pra aprovar o comentário, mas a correria aqui tá grande.

    Já avisei o Jorge da tua interação.

    Grande abraço,

    Diogo

  152. Diego

    Cara, ficou em branco no seu último exemplo.

    Coloquei uma página que cria conexão com o banco e pesquisa em tabela e tals, não funcionou.

  153. Nuno

    Já testei e adorei.

    Existe a possibilidade de aumentar a resolução final do PDF?

    Obrigado,

    Nuno (Portugal)

  154. diogobesson

    hey Nuno, dá uma olhada na configuração do DPI (http://mpdf1.com/manual/index.php?tid=449&searchstring=dpi) e do IMG_DPI (http://mpdf1.com/manual/index.php?tid=148) pra ver se é isso que você queria

  155. Lucas

    Galera, sou novo com mpdf, estou tentanto setar um cabeçalho legal, com imagens e tal … porém o texto esta sobrepondo meu cabeçalho, como faço pra que o texto só começe apos o termino do cabeçalho?
    Obrigado.

  156. Diogo Besson

    Oi Lucas, vc já tentou usar margins? -> http://mpdf1.com/manual/index.php?tid=411

  157. Jean

    Parabéns e muito obrigado pelo tutorial, resolveu meus problemas, já usei dompdf, fpdf, e essa resolveu o trabalho de css inline. gostaria de saber quais arquivos realmente devo subir para o servidor, pois a pasta de fontes é enorme.

  158. Diogo Besson

    Oi Jean,

    Antigamente o mpdf tinha uma versão mínima, mas nessa 5.4 só disponibilizaram a full instalation (que é grande mesmo). E se você quiser deixar ela ainda maior, pode acoplar a classe de qrcode no pacote. KkKkKk

    A versão full -> http://mpdf1.com/repos/MPDF54.zip
    O update da 5.3 para 5.4 -> http://mpdf1.com/repos/MPDF54UPGRADE53.zip
    A QRcode experimental -> http://mpdf1.com/repos/qrcode.zip

    🙂

    Sinto não poder te ajudar nessa!

    abraço!

  159. Daniel

    olá , estou tentando colocar a folha em modo paisagem:
    $mpdf = new mPDF(”, ‘A4′, 0, ‘Arial’, 15, 15, 15, 15, 8, 8,’L');
    ou
    $mpdf = new mPDF(”, ‘A4′, 0, ‘Arial’, 15, 15, 15, 15, 8, 8,’l');
    ou
    $mpdf = new mPDF(”, ‘A4′, 0, ‘Arial’, 15, 15, 15, 15, 8, 8,’landscape’);
    porem não estou conseguindo alguém poderia me ajudar?

    valews

  160. Diogo Besson

    aquelas dicas não deram certo, Daniel?

  161. Diogo Besson

    só pra constar aqui nessa página tb:

    tentou: $mpdf=new mPDF(‘utf-8′, ‘A4-L’); ?
    tentou: $mpdf=new mPDF(”,”, 0, ‘Arial, Helvetica,Sans-Serif’, 15, 15, 15, 15, 8, 8, ‘L’); ?

    page sizing -> http://mpdf1.com/manual/index.php?tid=306

    constructor -> http://mpdf1.com/manual/index.php?tid=184

    []s!

    Essa história de blog duplicado é um pé… rs rs rs

    vlw!

  162. Daniel

    Opa, funcionou sim Diogo.. Valew pela ajuda..

  163. Fredi

    Olá. Então, estou fazendo um sistema em php em que os daados são inseridos dinamicamente em uma tabela. Porém, já olhei em todo lugar, E não encontrei nada respondendo a minha curiosidade. Bem, ao final, ele gera tudo certo, mas em uma única página! E os dados são muitos, às vezes redimensionar em uma única folha fica tudo minúsculo. Como o Mpdf pode quebrar as páginas sendo que o conteúdo é preenchido dinâmicamente? Obrigado.

  164. Diogo Besson

    é só inserir dinamicamente um pagebreak.

  165. Diogo Besson

    Obrigado pelo retorno, Daniel. Precisando, estamos aqui.
    abraço!

  166. @undefined

    Olá. Gostaria de saber se alguém tem o mesmo problema que eu: eu não preciso usar o cabeçalho, mas mesmo assim ele ocupa um espaço enorme no topo da página e eu não encontrei um meio de reduzir ou eliminar. Alguém sabe?

  167. Diogo Besson

    Norberto, você tentou usar o top-margin ou o header-margin?
    http://mpdf1.com/manual/index.php?tid=411

    []s!

  168. Bruno Koga

    Diogo, boa tarde, estou com um problema na hora de imprimir arquivo, da o Output() ele me gera um erro.

    Segue Erro,
    TTF file "/var/www/eletrica/sistema/includes/MPDF54/ttfonts/DejaVuSansCondensed.ttf": invalid checksum 259f452da table: FFTM (expected 59f452da)

    Att,
    Bruno Koga

  169. Diogo Besson

    tente baixar o pacote do mpdf novo e atualizado. apague tudo na pasta da classe do servidor e suba a nova versão.
    o erro diz que a fonte em questão aparentemente está corrompida. ele falhou na verificação do hash e paulou teu script. acontece… abraço!

  170. Eduardo Sato

    Olá Diogo, estou iniciando o uso do mPDF após usar por muito tempo o FPDF, cara muito mais simples…
    gostaria de entender melhor a instalação do pacote…
    quais arquivos são necessário pra ficar no sistema e quais são descartaveis?

    Desde já Obrigado

  171. Diogo Besson

    Eduardo, essa versão nova (5.4) não veio com um link para o kit da instalação mínima. Suponho que seja melhor instalar a versão full e seguir as orientações do manual de instalação (http://mpdf1.com/manual/index.php?tid=452).
    Uma coisa interessante é usar os truques para minimizar o uso de RAM do servidor com essas dicas aqui -> http://mpdf1.com/manual/index.php?tid=406
    Não pude ajudar dessa vez. Malz! rs
    abraço,
    Diogo

  172. Eduardo Sato

    Obrigado, mesmo assim…
    Existe manual em portugues?

    Vi que muitos tem duvidas em quebra de página, não tive esse problema ainda, pois quando determinado o tamanho da folha, A4 por exemplo, a quebra é automatica…

    Mas tenho uma dúvida…como fazer com que apareça em todas as página uma borda com medida determinada…

    Muito boa sua iniciativa, parabens…

  173. Carlos

    Jean, tu já utilizou o fpdf? O que vc achou de diferente?
    carlosantoliv@hotmail.com

  174. Carlos

    Diogo, tranquilo? Como coloco em paisagem mesmo? Esquecii! Você teria algum exemplo com banco de dados? Utilizo FPDF, mas me parece que MPDF resolve várias icógnitas em relação ao CSS.

    Se puder ajudar o colega aí, serei mais um a sorrir..

    Abraço…

  175. Carlos

    Agora lembrei o que ia perguntar: como faço para abrir o arquivo em PDF no próprio Browser ao invés de baixá-lo para a máquina?

  176. Carlos

    Mensagem: mPDF error: Text contains invalid UTF-8 character(s)

    Sendo que tudo, relativamente, está correto.

    O que será que pode ser?

  177. Lucas

    Olá Diogo, tenho o seguinte problema, estou criando uma opção de relatórios personalizados, onde o usuário seleciona os campos que ele quer que sejam exibidos horizontalmente na página.
    Ex: Nome, RG, CPF, Cert. Nasc. Email, Endereço, etc.
    O usuário seleciona quais os campos que ele quer que sejam imprimidos com os dados vindos do mysql.
    Eis a questão, quando ele selecione uma quantidade de campos que "estoura" a página, ele simplesmente diminui as letras afim de adequar a tabela a página. Sabe me dizer se é possivel manter as dimensões, passando esses campos pré selecionados pelo usuário para uma outra página?
    Ex: Colocar as folhas A4-L impressas uma ao lado da outra, montando a grande tabela.

    Obrigado.

  178. Diogo Besson

    Cara, quebrar páginas usando blocos div e tabelas sempre foram um problema do mal.

    Sugiro que você dê uma lida nesses dois links da documentação:

    -> http://mpdf1.com/manual/index.php?tid=108
    e
    -> http://mpdf1.com/manual/index.php?tid=446

    Eles ensinam alguns truques pra manipular a quebra de página e o resize automatico das tabelas, mas já adianto que mesmo que você force um CSS page-break-inside:inherit e defina o valor no elemento pai, tem um limite pra segurar o tamanho da table.

    O ideal é sempre fazer a contagem dos elementos “echoados” dentro da tabela que vai para o pdf. Se estourar um número X de elementos definidos por vc por tentativa, erro, acerto, você insere um pagebreak manual 😉
    Não fica muito elegante, mas resolve seu problema.

    abraço.

  179. Diogo Besson

    aqui, man -> http://mpdf1.com/manual/index.php?tid=306

    basicamente: $mpdf=new mPDF(‘utf-8’, ‘A4-L’);

    []s!

  180. Diogo Besson

    isso vai do navegador do cliente. Se o browser suportar a leitura de PDF, irá abrir, caso contrário tentará forçar um download.
    Lembrando que mesmo abrindo no browser sempre haverá download do documento (pasta temporaria de internet) na máquina do cidadão.

  181. Diogo Besson

    o texto contém caracteres UTF-8 inválidos. Você deve revisar o charset do código echoado. []s!

  182. Regis Andrade

    Boa tarde pessoal, alguém já utilizou esta biblioteca para gerar mais de 1000 pdfs? Aqui na minha empresa temos situações que gera um arquivo com mais ou próximo de 1000 pdfs, valeu.

  183. francisco

    Muuuuuito legal essa biblioteca

    Só nao consegui gerar mais de um PDF que é a minha necessidade atual

    valew

  184. Diogo Besson

    faz um de cada vez, francisco.
    se você deseja varios, vai instanciando as classes, salvando os pdfs gerados no disco do servidor e destruindo as instâncias pra liberar ram.
    ao final do processo, basta exibir uma lista dos pdfs gerados para download.
    não deve ser tão difícil assim, certo?
    abraço!

  185. hellisonbr

    Diogo, estou tentando utilizar a classe MPDF para gerar relatórios em um projeto.
    Você conseguiu que algum relatório fosse gerado de maneira rápida? Ou ao menos satisfatória?

    Em alguns testes demorou em torno de 15 segundos para gerar um relatório com resultado de 50 registros do Banco de Dados.

    "O sr. Janes havia me fornecido um exemplo com uma consulta bem completa e o PDF gerado tinha o valor de relatório formatado para saída de impressora"

    Poderia me mostrar algum exemplo? Disponibilizar algum link para download?

    Outra dúvida, sabe se é possível que os resultados/tabelas sejam montados enquanto a página abre? Sem ter que esperar toda a montagem do pdf?

  186. Diogo Besson

    olá Hellison,
    primeiro, desculpe a demora pra responder.

    bom… quanto à performance, nunca tive problemas. Mesmo com uma latência ridícula eu conseguia gerar bons relatorios rapidamente.

    os exemplos de relatorios grandes sendo gerados rapidamente eu tenho sim.
    são vários, mas são privados e não posso disponibilizar. espero que entenda.

    não entendi essa outra dúvida. você quer que os resultados sejam mostrados antes do pdf?
    você pode mostra-los em html e inserir um botão de gerar pdf no relatorio caso a pessoa queira o documento portatil, nao?

  187. hellisonbr

    Olá Diogo, obrigado pela resposta.

    Vou fazer um resumo de como criei um relatório.
    Em um arquivo html eu faço os filtros, como por exemplo datas, clientes etc, envio estes valores para um arquivo php onde uso ob_start() , monto o select e com um laço crio uma table dando echo em cada resultado dentro de uma tr/td.

    Ao terminar de montar o html, uso
    "$html = ob_get_clean();
    utf8_encode($html);"

    Incluo a classe mpdf57, css, e finalmente uso o $mpdf->output();

    Você também usa este método, certo?

    Também tentei criar o mesmo relatório concatenando todos os valores dentro de uma variável e dando output da mesma, porém demorou entre 5-10 segundos a mais.

    Ou eu devo estar fazendo algo errado, ou o select está muito complexo. Chegou um momento que o php simplesmente parou de executar. Usei set_time_limit(0); e ini_set('memory_limit', '256M'); e nada.

    Ou seja, esta lento e dependendo da qtidade de resultados, ele nem termina a execução.

    Entendo que os dados são privados, sem problemas. Mas se tiver alguma parte do código que vc possa compartilhar.Digo, algo mais complexo que o exemplo que vc já postou. Isso está me dando muita dor de cabeça. Já li a documentação inteira do mpdf… rs

    De toda maneira, muito obrigado.

  188. Diogo Besson

    acho que vc matou a charada. tenho select aqui que usa tanto join e subquery que acaba ficando com mais de 20 segundos "pensando". Nisso o mpdf nao influencia muito.
    sugestao:
    desabilite todo o esquema do mpdf output e mande um echo de $html na tela pra ver quanto tempo de diferença você tem entre subir o html pra memoria do servidor e gerar o pdf com a classe

  189. Francisco Alencar

    Caro,

    Diogo gostaria de saber como faço para gerar o documento pdf direto no arquivo para fazer o download

    agradeço pela atenção

    Francisco Alencar

  190. Diogo Besson

    Oi Francisco,

    Já falei sobre isso em algum momento, mas não estou encontrando, então vou falar de novo:

    Pra gerar um documento pdf a função é Output(); (http://mpdf1.com/manual/index.php?tid=125)

    Acontece que ela tem uns parâmetros que flexibilizam o jeito que você gera esse pdf e o que você vai fazer com ele.

    Então,

    – Se você usar Output(“doc.pdf”, “I”); vai gerar e enviar para o browser do usuário (inline);
    – Se você usar Output(“doc.pdf”, “D”); vai gerar e forçar o download;
    – Se você usar Output(“/var/www/meusite.com/httpdocs/pdfs/doc.pdf”, “F”); vai gerar e salvar localmente no caminho fornecido;
    – Se você usar $pdf = Output(“”, “S”); vai gerar e a variavel $pdf recebe o valor de Output() como String.

    Ajudou?

    abraço!

  191. Gustavo

    no meu está dando erro na hora de abrir
    alguma coisa q nao suporta o tipo do arquivo
    voce pode me ajudar??

  192. Diogo Besson

    oi gustavo, “alguma coisa q nao suporta o tipo do arquivo” não é muito específico pra eu conseguir te ajudar.
    pelo que você disse, estou achando que vc não tem leitor de pdf na estação. Nesse caso, get Reader -> get.adobe.com/reader/‎
    abraço!

  193. Jose Pereira

    Bem, como o Diogo diz é verdade fica aqui um problema que me tem dado muita dor de cabeça, e que pode servir para outros, testei em localhost todos os scripts para gerar documentos em pdf, até aqui tudo bem perfeito só temos que ter é muita imaginação mas na realidade o mPDF era o que estava mesmo a precisar, no entanto ando à cerca de 2 dois com um problemazito, provavelmente simples, ou seja quando coloquei o mPDF de baixo do meu servidor de web e comecei a testar os ficheiros, nada surgia, ecrã em branco, sem qualquer erro, alguma coisa está mal, o que muitas voltas mas o Diogo deu uma ajuda a qual ainda não testei, de qualquer modo se já surgiu com alguém este problema diga qualquer coisa, como o resolveu.

    Um obrigado a todos em especial ao Diogo

  194. Jose Pereira

    Já agora em relação aos gerar os ficheiros em branco, posso dizer que até os ficheiros de exemplos que vem no mPDF, nenhum é gerido.

  195. Diogo Besson

    nossa! agora complicou!
    apaga essa biblioteca do mpdf que você tem aí e instala uma nova, José!
    a url pra baixar é
    mPDF v5.7 Full installation – Download (.ZIP file 12.8MB) -> http://mpdf1.com/repos/MPDF57.zip
    mPDF v5.7.1 Upgrade from v5.7 – Download (.ZIP file 280kB) -> http://mpdf1.com/repos/MPDF571UPGRADE57.zip

  196. Diogo Besson

    Acho que o primeiro passo é ativar o debug, como a documentação manda: http://mpdf1.com/manual/index.php?tid=331&searchs

    Se o debug não ajudar, o segundo passo é validar o que for printado.
    Ao invés de criar um PDF, imprima tudo na tela, copie o codigo fonte e valide em http://validator.w3.org/#validate_by_input

    Se isso também não der boas, use utf8_encode pra arrumar o charset de tudo que vier do banco.

    abração e obrigado por ter seguido o esquema do compartilhamento desse conhecimento.

  197. Gustavo

    vlw Diogo, ja consegui resolver esse problema estava faltando o seguinte comando:
    $html=ob_get_clean();

  198. Reinaldo

    Estou com problema com muitos dados, mais de. 5000 linhas, alguém pode me ajudar?

  199. Diogo Besson

    tem que estar tudo dentro de um documento só?
    pra não enviar direto ao usuário, você pode subdividir em diversos documentos, salvando no disco, no servidor, e disponibilizando o link dos arquivos para download.

  200. Mauro

    Utilizo o MPDF56 a algum tempo e de uma hora pra outra a impressão do PDF apresenta a seguinte msg: HTML contains invalid UTF-8 character(s).

    Será que pode ter algo relacionado com a versão do leitor de pdf da estação?

  201. Diogo Besson

    acho difícil.
    mais fácil verificar se o uso de utf8_encode() nas variaveis poderia resolver o problema

  202. Sindy

    Ola, estou fazendo testes com mPDF para poder migra-lo, utilizo FPDF e TCPDF. Estou tentando inserir a fonte spranq_eco_sans, já salvei o arquivo.php na pasta /font e o arquivo.ttf na pasta /ttfonts, e não estou conseguindo fazer o Add da nova fonte no meu PDF, alguém pode me ajudar?
    att
    Sindy

  203. Diogo Besson

    Alô Sindy,
    Trocar as fontes padrão é sempre um procedimento chato.
    Você já tentou seguir o passo a passo de http://mpdf1.com/manual/index.php?tid=453 ? Lá tem instruções para editar um arquivo de configuração bem específico sobre isso.
    Não esquecendo de parametrizar corretamente o __construct e etc (http://mpdf1.com/manual/index.php?tid=329).
    se conseguir, posta a solução aqui pra ajudar a galera, ok?
    abraço!

  204. Ronaldo

    Olá Diogo,
    Muito bom mesmo!
    Consigo gerar PDFs direitinho. Porém, Estou tendo problemas quando tenho loops while dentro de while. No html normal funciona normalmente, mas na hora de gerar o PDF eu acho que só vai até o 2º loop e pára.
    São 4 while.
    1º while: pega os professores
    2º while: pega as turmas de cada professor
    3º while: pega as questões respondidas de cada turma desse professor
    4º while: pega as respostas de cada questão
    Professor 1
    Turma 1
    Questão 1
    resp 1
    resp 2

    Questão 2
    resp 1
    resp 2

  205. Diogo Besson

    Brother, se tá gerando HTML, mas não tá gerando PDF, esse código fica muito suspeito. Provavelmente está apresentando algum conflito de charset.
    Outra coisa importante: você revisou esse HTML na validação W3C antes de gerar o PDF?
    O endereço pra validar é http://validator.w3.org/
    Boa sorte aí!
    abraço

  206. Ronaldo

    Valeu Diogo. Vou verificar mais um pouco aqui.

  207. Leloo

    Alguém sabe dizer porque não consigo fazer mostrar mais de uma pagina? Estou tentando gerar boletos, e meus dados geram quinze paginas por exemplo só que só mostra uma… Alguem sabe porque?

  208. Diogo Besson (Post author)

    Leloo, pode ser tanta coisa…
    Precisaríamos ver esse código pra analisar.
    abraço

  209. Pingback: Cabeçalhos Diferentes usando mPDF - Diogo BessonDiogo Besson :: Web Tecno Log

  210. Leonardo Silva

    Olá Diogo!

    mPDF é excelente para gerar PDF's. Criei uma lista de funcionários, quando fui criar o pdf para impressão, o mPDF não aceita a formatação de Tabelas em forma de listagem. Sabe alguma solução ?
    Já tentei utilizar as tags: <table> e também não funcionaram.

  211. Diogo Besson (Post author)

    Leonardo,
    Acho que o erro está em outra dimensão do teu script. Talvez ele não aceite a formatação exata do que você consegue gerar em HTML, mas as listas e tabelas, quando usadas independentemente, são suportadas sim: http://mpdf1.com/manual/index.php?tid=34 e http://mpdf1.com/manual/index.php?tid=227&searchs
    veja lá.
    []s!

  212. Paulo Abreu

    Parabéns, seu post é realmente muito útil, no meio de tanta coisa sem sentido encontrar profissionais que sabem o que estão falando e gratificante, além de me ajudar muito, funcionou perfeito, muito obrigado mesmo.

    Paulo Abreu.

  213. Diogo Besson (Post author)

    Grande Paulo!
    Obrigado pela visita e pelo elogio.
    De vez em quando cai uma luz aqui na minha cachola e eu acabo produzindo algum artigo útil! hahaha
    Espero só que essa luz venha mais vezes. 😀
    abraço!

  214. Paulo

    Estou com problema ao gerar PDF usando mPDF, isso aconteceu quando mudei de servidor, a ágina fica carregando sem parar, mas PDF que é bom, nada!!! Alguém já passou por isso?

  215. Matheus Batschauer

    no caso do último exemplo, tem como separar cada página em arquivos diferentes?

  216. Diogo Besson (Post author)

    já tentou fazer um output por pagina?

  217. Matheus Batschauer

    todas as páginas são iguais, a única coisa q muda é o nome q está no banco de dados, por isso está dentro de um while, e o nome do arquivo tá como o nome da pessoa

  218. Diogo Besson (Post author)

    tá mais facil ainda! rs
    a cada fim de laço no while, taca um output()
    depois conta se deu certo
    []s!

  219. Matheus Batschauer

    não kkkk mas faz um tempo q resolvi, só deixei tudo do mpdf dentro do while

  220. Matheus Batschauer

    mas obrigado

  221. Diogo Besson (Post author)

    😀

  222. Anderson

    Boa tarde, estou tendo dificuldade em criar a pagina em modo paisagem, usei o exemplo acima ele só imprimi normal.

  223. Diogo Besson (Post author)

    Salve Anderson,

    cara… só existe dois tipos de parâmetro de orientação: P pra Portrait e L pra Landscape.

    Teoricamente, não tem como errar nisso, mas sugiro que você dê uma olhada em duas páginas da documentação:
    A primeira é sobre o construtor do mPDF -> http://mpdf1.com/manual/index.php?tid=184
    A segunda é sobre tamanho de página e orientação -> http://mpdf1.com/manual/index.php?tid=306

    Depois conta aqui se deu certo.
    Valeu! abraço

    .

  224. JOsé Roberto

    Bom dia,
    preciso de uma grande ajuda.

    Meu cliente pediu que eu faça um envio em série de +- 100 boletos por e-mail com anexo pdf.

    Estou usando o mPDF…

    consigo anexar… e enviar usandoi o phpmailer.

    Coloquei a rotina dentro de um loop…

    mas o que acontece…

    ele dá um display do boleto na tela…

    e isso aborta o loop…

    como faço para ele apenas criar o pdf e não mostrar na tela?

    me ajude por favor…
    sou iniciante em php e o pior… essa rotina é de do outro programador.

  225. Eriuton Charles Granja

    Olá, boa tarde!
    Sou iniciante em PHP e me deparei com a necessidade de gerar relatórios em PDF e esta ferramenta cai com uma luva para o que preciso. Porém estou com um fato curioso. Pelo Mozila Firefox, consigo visualizar meu relatório, por ele funciona perfeitamente, porém pelo Google Chrome não abre o arquivo gerado. A mensagem que retorna é: “Falha ao carregar o documento PDF”, e quando pela opção Download, caso eu abra com meu Leitor padrão do Windows 10, ele abre, caso eu mande abrir com o Microsoft Edge, também abre, porém se eu pedir para abrir com o Adobe PDF ou Foxit Reader dá um erro de “Arquivo Corrompido”.
    Já fiz de tudo. Simplifiquei, deixei apenas um texto, tirei css, tabelas, tudo.. e continua da mesma forma.
    Já baixei as duas versões disponíveis, a 6.0 e a 5.7, também sem êxito.

    Ajuda ai por favor!
    Grato!

  226. Lucas

    Boa tarde William,

    Eu preciso iniciar a contagem de páginas a partir de uma variável ..

    Exemplo: Quero iniciar o documento a partir da numeração 6, 7, 8, 9 … E não da 1, 2, 3, 4 …

    Não consigo de maneira nenhuma fazer o “PAGENO” startar em outra numeração senão 1.

    Se souber vai salvar minha vida.

    Obrigado.

  227. Rodrigo Ferreira

    Quem tiver problemas com a exibição de imagens no pdf, resolvi dando permissão na pasta MPDF60/tmp

Leave a Comment

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