AULA 11 PHP AVANÇADO AULA 12 RELATÓRIOS PDF O QUE É UM FORMATO PDF PDF é um formato de arquivo que tem sido muito usado na Internet quando é necessário garantir que a impressão de um texto (com ou sem imagens) saia exatamente como se deseja. Os arquivos PDF podem ser lidos diretamente da Internet (nas versões de navegadores mais recentes), ou gravados em disco (para leitura posterior). O leitor de PDF é o Acrobat Reader, de uso gratuito, fabricado pela Adobe. Podemos criar um relatório PDF utilizando o PHP? Sim, podemos. A partir de uma biblioteca chamada FPDF. O FPDF é uma classe desenvolvida em PHP muito utilizada para confecção de relatórios. O FPDF é um software livre e gratuito. Sendo assim, ao fazer o download, poderemos utilizá-lo e alterá-lo livremente. Para fazer o download da biblioteca, clique em http://www.fpdf.org/. O FPDF possui algumas funções para executarmos relatórios. Seguem alguns exemplos: Formatação de cabeçalho (Header) e rodapé (Footer); Quebra de página automática; Quebra de linha e justificação de texto automática; Suporte a imagens (JPEG e PNG); INSTALANDO O PDF No site de PHP, deixei um link disponível para o download da biblioteca e suas respectivas classes. Seguir os seguintes passos : 1 Fazer o download do arquivo pdf.zip na pasta htdocs e descompactar (usar o extrair aqui). Clique aqui para fazer o download 2 Após a descompactação (usando o extrair aqui), será criada uma pasta chamada pdf, dentro da pasta htdocs. 1
<?php EXEMPLO DE UM RELATÓRIO EM PDF include "pdf/pdf/pdf.php"; # Include da classe pdf (ou mude o caminho se for o caso) $pdf = new PDF('P'); // Criando um relatório em orientação "paisagem" $pdf->open(); // Abre um PDF $pdf->addpage(); // Abre uma página $pdf->setfont('arial', 'B', 12); // Altera o formato e o tamanho da fonte $pdf->cell(25,6,'olá MUNDO!!!',0,1,'L'); //Imprime algum texto no documento $pdf->output('teste.pdf'); // Saída do relatório <a href="teste.pdf">imprimir Relatório</a> Salvar como teste_rel.php (127.0.0.1/teste_rel.php) Entendendo cada linha require('../pdf/pdf.php'): Nesta linha você informa onde está o arquivo pdf.php. É neste arquivo que estão todas as funções utilizadas neste artigo. Esta linha também é obrigatória. $pdf = new PDF('P'): Cria o objeto FPDF. Os valores default para página são: tamanho A4 e no modo Retrato, com as medidas em milímetros (mm). A sintaxe da função FPDF() é: PDF([String Orientação [,String Unidade [,mixed formato]]]); O parâmetro Orientação pode ser preenchido com:. P: Portrait (Retrato) ou;. L: Landscape (Paisagem). Formatos:. A3;. A4;. A5;. Letter;. Legal. $pdf->open(); Inicia um novo documento PDF. $pdf->addpage(); Adiciona uma página ao documento, com o cursor a 1cm de 2
distância da margem esquerda e 1cm de distância da margem superior; $pdf->setfont('arial','b',12); Aqui a Fonte é definida como Arial, tamanho 12 e em negrito. A sintaxe da função SetFont() é: SetFont(string família [,string Estilo [,float tamanho]]); Onde a família pode ser:. Courier;. Helvetica ou Arial;. Times; Estilo pode receber os valores:. Vazio : Normal (sem formatação);. B: Negrito;. I: Itálico ou;. U: Sublinhado. $pdf->cell(25,6,'olá MUNDO!!!',0,1,'L'); Imprime algum texto no documento. Neste caso, "Olá Mundo!!". O parâmetro link deve receber uma URL ou um identificador retornado pela função AddLink(). Não veremos essa função neste artigo, pois o seu propósito é criar relatórios dinâmicos para impressão ou armazenagem. $pdf->output('teste.pdf'); Gera o arquivo PDF no servidor. Para que possamos ler o arquivo gerado, poderemos criar um link em HTML. <a href="teste.pdf">imprimir Relatório</a> </html> EXERCÍCIO 1) Crie um relatório que leia dados de uma array com times de futebol e exporte para pdf. RESOLUÇÃO <?php include "pdf/pdf/pdf.php"; # Include da classe pdf $pdf = new PDF('P'); // Criando um relatório em orientação "paisagem" $pdf->open(); // Abre um PDF $pdf->addpage(); // Abre uma página $pdf->setfont('arial', 'B', 12); // Altera o formato e o tamanho da fonte 3
// array $times[] = "Vasco"; $times[] = "Botafogo"; $times[] = "Santos"; for($i=0; $i<sizeof($times); $i++) { $time = $times[$i]; $pdf->cell(25,6,$time,0,1,'l'); //Imprime algum texto no documento $pdf->output('times.pdf'); // Saída do relatório <a href="times.pdf">imprimir Relatório</a> RELATÓRIO PDF X TABELA DE BANCO DE DADOS Baseada na tabela cursos, vamos criar um relatório em PDF. Os trechos dos códigos estão todos comentados para melhor entendimento: EXEMPLO: <!-- Função javascript para abrir janela popup --> <script language="javascript"> function janela() { window.open("relcurso.pdf", "JANELA", "height = 500, width = 900"); </script> <?php include "pdf/pdf/pdf.php"; # Include da classe pdf include 'class.cursos.php'; # Include da classe cursos $pdf = new PDF('P'); # Instanciando a classe PDF, relatório orientação "paisagem" $pdf->setname("relatório de Cursos","Aula de PHP"); # Cabeçalho do Relatório $pdf->open(); # Abre um PDF $pdf->addpage(); # Abre uma página $pdf->setx($pdf->getx()+10); # Aumenta a coluna em 10 posições $pdf->settextcolor(0,64,128); # Altera a cor da fonte $pdf->setfont('arial', 'B', 9); # Altera o formato e o tamanho da fonte $obj = new Cursos(0, 0); #Instanciando a classe cursos $res = $obj->selecionardados(); # Método que seleciona os dados da tabela for( $i=0; $i < sizeof($res); $i++ ) { # Estrutura de repetição $codigo = $res[$i]['n_codcurso']; $nome = $res[$i]['c_nomecurso']; 4
$pdf->cell(25,6,$codigo,0,0,'l'); #exibe dados $pdf->cell(25,6,$nome,0,1,'l'); #exibe dados $pdf->output('relcurso.pdf'); # Saída do relatório <div><a href="javascript:janela();">imprimir Relatório</a></div> <BR> <div><a href="relatorios.htm">voltar ao menu anterior</a></div> EXERCÍCIO 1) Com base no exemplo acima, desenvolver um relatório de alunos, lendo as informações da tabela alunos. RESOLUÇÃO Acrescentar mais um método na classe Alunos (class.alunos.php), para relacionar os alunos e os respectivos cursos. public function relacionaralunos() { $sql = "SELECT c_matricula,c_nomealuno,c_nomecurso FROM alunos alu LEFT JOIN cursos cur ON alu.n_codcurso=cur.n_codcurso ORDER BY c_nomecurso,c_nomealuno"; $res = pg_query($sql); $all = pg_fetch_all($res); return $all; Montar o relatório PDF <!-- Função javascript para abrir janela popup --> <script language="javascript"> function janela() { window.open("relalunos.pdf", "JANELA", "height = 500, width = 900"); </script> <?php include "pdf/pdf/pdf.php"; # Include da classe pdf include "class.aluno.php"; # Include da classe Alunos $pdf = new PDF('P'); # Instanciando a classe PDF, relatório orientação "paisagem" $pdf->setname("relatório de Alunos","Aula de PHP"); # Cabeçalho do Relatório $pdf->open(); # Abre um PDF $pdf->addpage(); # Abre uma página $pdf->setx($pdf->getx()+10); # Aumenta a coluna em 10 posições $pdf->settextcolor(0,64,128); # Altera a cor da fonte $pdf->setfont('arial', 'B', 9); # Altera o formato e o tamanho da fonte $pdf->cell(25,6,'matricula',0,0,'l'); # Cabeçalho 5
$pdf->cell(80,6,'nome DO ALUNO',0,1,'L'); # Cabeçalho $obj = new Alunos(0,0,0); # Instanciando a classe Alunos $res = $obj->relacionaralunos(); # Método para selecionar os alunos for( $i=0; $i < sizeof($res); $i ) { # estrutura de repetição $nomecurso = $res[$i]['c_nomecurso']; $pdf->setfont('arial', 'B', 10); # Altera o formato e o tamanho da fonte $pdf->cell(0,6,'curso : '.$nomecurso,0,1,'c'); $pdf->setfont('arial', '', 9); # Altera o formato e o tamanho da fonte #Quebra de relatório while ( $nomecurso == $res[$i]['c_nomecurso'] and $i < sizeof( $res ) ) { $matricula = $res[$i]['c_matricula']; $nome = $res[$i]['c_nomealuno']; $pdf->cell(25,6,$matricula,0,0,'l'); $pdf->cell(80,6,$nome,0,1,'l'); $i++; $pdf->output('relalunos.pdf'); # Saída do relatório <div><a href="javascript:janela()">imprimir Relatório</a></div> <BR> <div><a href="relatorios.htm">voltar ao menu anterior</a></div> 6