Gerando arquivo PDF com PHP usando mPDF
A classe mPDF é muito extensa e bem versátil. É possível criar PDF de várias maneiras, mas nesse script abordei um método que transforma o buffer de saída do PHP em PDF usando um arquivo HTML gravado no servidor. Não sei se isso é usual, mas aqui pra mim foi muito prático, pois eu não precisei ficar configurando o PDF linha por linha. São 3 scripts, na verdade (index.php, gerador.php e style.css), cujos códigos seguem anexados.
Descrição
A classe mPDF é muito extensa e bem versátil. É possível criar PDF de várias maneiras, mas nesse script abordei um método que transforma o buffer de saída do PHP em PDF usando um arquivo HTML gravado no servidor. Não sei se isso é usual, mas aqui pra mim foi muito prático, pois eu não precisei ficar configurando o PDF linha por linha. São 3 scripts, na verdade (index.php, gerador.php e style.css), cujos códigos seguem anexados.
#index.php
<?php
ob_start(); // Ativa o buffer de saida do PHP
function CriaCodigo(){ //Gera numero aleatorio
for ($i = 0; $i < 40; $i++) {
$tempid = strtoupper(uniqid(rand(), true));
$finalid = substr($tempid, -12);
return $finalid;
}
}?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;"/>
<meta name="author" content="Claudio Souza Jr. <claudio@uerr.edu.br>"/>
<meta name="created" content="18/12/2015"/>
<meta name="version" content="1.0"/>
<meta name="changed" content="20/12/2015"/>
<title>Teste mPDF</title>
<link rel='icon' type='image/png' href='favicon.png'>
<!-- Nao defina atributos para a folha de estilos -->
<link rel='stylesheet' href='style.css' type='text/css'>
</head>
<form action="gerador.php" target="_blank">
<input type="submit" value="Salvar em PDF">
</form>
<body>
<h3>
Doc: <?=CriaCodigo()?>
</h3>
<p>O padre Manuel Bernardes pregava, numa das suas Silvas:</p>
<p> "Bem pode haver ira, sem haver pecado: Irascimini, et nolite peccare. E às vezes poderá haver pecado, se não houver ira: porquanto a paciência, e silêncio, fomenta a negligência dos maus, e tenta a perseverança dos bons. Qui cum causa non irascitur, peccat (diz um padre) patientia enim irrationabilis vitia seminat, negligentiam nutrit, et non solum malos, sed etiam bonos invitat ad malum. Nem o irar-se nestes termos é contra a mansidão: porque esta virtude compreende dous atos: um é reprimir a ira, quando é desordenada: outro excitá-la, quando convém. A ira se compara ao cão, que ao ladrão ladra, ao senhor festeja, ao hóspede nem festeja, nem ladra: e sempre faz o seu ofício. E assim quem se agasta nas ocasiões, e contra as pessoas, que convém agastar-se, bem pode, com tudo isso, ser verdadeiramente manso. Qui igitur (disse o Filósofo) ad quae oportet, et quibus oportet, irascitur, laudatur, esse que is mansuetus potest".</p>
<blockquote>
Trecho de "Oração aos moços" de Rui Barbosa.
</blockquote>
</body>
</html>
<?php
/* Captação de dados */
$buffer = ob_get_contents(); // Obtém os dados do buffer interno
$filename = "code.html"; // Nome do arquivo HTML
file_put_contents($filename, $buffer); // Grava os dados do buffer interno no arquivo HTML
?>
#gerador.php
<?php
/* Inclusão da classe mPDF */
include('/usr/share/apache2/mpdf/mpdf.php');
// Extrai os dados do HTML gerado pelo programa PHP
$filename = "code.html";
$html = file_get_contents($filename);
$mpdf = new mPDF('','A4',10,'DejaVuSansCondensed'); // Página, fonte;
/*
* A conversão de caracteres foi necessária aqui, mas pode não ser no seu servidor.
* Certifique-se disso nas configurações globais do PHP.
* Usar codificação errada resulta em travamento.
*/
$mpdf->allow_charset_conversion = true; //Ativa a conversão de caracteres;
$mpdf->charset_in = 'windows-1252'; //Codificação do arquivo '$filename';
/* Propriedades do documento PDF */
$mpdf->SetAuthor('Cláudio'); // Autor
$mpdf->SetSubject("Assunto deste documento"); //Assunto
$mpdf->SetTitle('Titulo do PDF'); //Titulo
$mpdf->SetKeywords('palavras, chave, aqui'); //Palavras chave
$mpdf->SetCreator('Han Solo'); //Criador
/* A proteção para o PDF é opcional */
$mpdf->SetProtection(array('copy','print'), '', '#minhasenha'); // Permite apenas copiar e imprimir
/* Geração do PDF */
$mpdf->WriteHTML($html,0); // Carrega o conteudo do HTML criado;
$mpdf->Output("arquivo.pdf",'D'); // Cria PDF usando 'D' para forçar o download;
unlink($filename); // Apaga o HTML
ob_clean(); // Descarta o buffer;
exit();
?>
#style.css
body, div, p {
font-family: \'DejaVu Sans Condensed\';
font-size: 25pt;
background: #666666;
color: white;
}
h3 {
margin: 1em 0 2em -15mm;
background-color: #EEDDFF;
background-gradient: linear #c7cdde #f0f2ff 0 1 0 0.5;
padding: 1px;
padding-left: 3em;
width: 32%;
font-family:sans;
font-size: 16pt;
font-weight: bold;
border-left: none;
border-radius: 0 1em 1em 0;
box-shadow: 0 0 0.5em 0.5em rgba(255,0,0,1);
text-shadow: 0.05em 0.04em rgba(127,127,127,0.5);
color: black;
}
button, input[type="submit"] {
border-radius: 5px;
padding: 5px;
background: #ffcccc;
}
p{
text-align: justify;
}
Fiz um sript com base no mPDF, e nesse tutorial para gerar uma versao em pdf de minha pagina php, com os resultados:
O PDF e gerado perfeitamente consigo visualiza-lo no navegador corretamente (maquinas MAC, WIN e LIN),
No entanto quando salvo o arquivo para minhas maquinas, ele abre corretamente nas maquinas MAC e DEBIAN,
porem nas maquinas WINDOWS 7 do serviço o arquivo não abre, (apenas consigo visualiza-lo pelo firefox) Uso o Acrobat Reader DC, e aparece a mensagem ( o acrobat reader nao apode abri esse arquivo porque nao ha suporte ou o arquivo foi danificado)
Alguem ja teve esse problema
Como resolveu