Gerando documento PDF em PHP
Autor: Fernando S.Costa | Publicado: 2009-01-14T07:36:00-08:00

Neste artigo estarei mostrando como gerar documentos no formato PDF em PHP com consulta em banco de dados. A idéia é mostrar um pouco do que é possível se fazer com esta API e não gerar um relatório bonito, pois isso ficará a encargo de cada um.1 - Baixando os arquivos necessários:Existem diversas classes na internet que possibilitam a geração de arquivos PDF. A mais famosa delas e a PDFlib, a qual é recomendada pela documentação do PHP.Porém ela não é a mais simples. Uma boa alternativa é a R&amp;OS PDF Class, disponível em "http://www.ros.co.nz/pdf/.Neste endereço você encontra diversas informações úteis, inclusive um FAQ com exemplos prontos.Porém, o download em si é feito por meio do SourceForge. O endereço é:http://sourceforge.net/projects/pdf-php/Escolha a opção que já vem com as fontes, pois isto facilita a criação do PDF."Por Tony Cavalheiro - Revista W (Junho/2004)Bem, agora descompacte o arquivo no diretório onde será criado o script que irá gerar o PDF, neste artigo será usado o diretório /var/www/html.Eu renomeei o diretório com as classes para GeraPDF, dentro desse diretório estão os arquivos que são as duas classes necessárias para gerar o documento e um diretório com as fontes.Agora iremos gerar um arquivo em formato PDF com a mais conhecida frase no mundo dos programadores, o 'Hello World', para isso abra seu editor de php favorito e vamos lá:selectFont('GeraPDF/fonts/Helvetica.afm');// chama o método ezText e passa o texto que deverá ser apresentado no documento//o numero após o texto se refere ao tamanho da fonte$pdf->ezText('Hello World!',100);// gera o PDF$pdf->ezStream();?>Esse é um exemplo simples, mas é possível trazer dados de um consulta SQL como mostrarei na seqüência. Utilizarei MySQL como database.Gerando PDF a partir de consulta SQLAgora o script que busca os dados em nossa tabela e gera o arquivo PDF com estes dados. O script está todo comentado, o que facilita o entendimento de cada parte de sua composição.Eu chamei esse script de relatorio.php:selectFont('GeraPDF/fonts/Courier.afm');$conexao = mysql_connect('host','user','password');mysql_select_db('Estudo',$conexao);$sql = 'SELECT * FROM estudo ORDER BY nome';$res = mysql_query($sql, $conexao);//seta os cabeçalhos da tabela que será mostrada, serão os nomes dos campos de nossa tabela$cols = array(Nome, Endereço, Telefone);$optionsText = array(justification=>'center', spacing=>1.0);/*justification=> seta a posição de um label, pode ser center, right, left, aright, ou aleftleading = > define o tamanho que cada linha usará para se mostrada, deverá ser um intspacing => define o espaçamento entrelinhas, deverá ser um floatvocê pode usar apenas leading ou apenas spacing, nunca os dois*/$optionsTable = array(showLines=>1, showHeadings=>1, shaded=>2, textCol=>array(0.1, 0.1, 1), shadeCol=>array(1, 0.1, 0.1), shadeCol2=>array(0.1, 1, 0.1), fontSize=>12, titleFontSize=>12, rowGap=>5, colGap=>5, lineCol=>array(0, 0 ,1), xPos=>'center', width=>400);/*showlines => define se haverá¡ bordas na tabela, 0 = sem bordas, 1 = (padrão) com bordas laterais e por colunas, 2 = separa cada célula da tabela com linhasshowHeadings => define se irá mostrar o cabeçalho, 0 = não mostra, 1 = mostrashaded => define como será sombreada as linhas, 0 = sem sombra, 1 = (padrão) mostra sombra de modo alternado, 2 = mostra sombra em todos com tons alternadostextCol => define a cor do texto no documento, a cor está no formato RGBshadeCol => define a primeira cor do sombreado na tabela, formato RGBshadeCol2 => define a segunda cor do sombreado na tabela, formato RGBfontSize => define o tamanho da fonte nos dados da tabelatitleFontSize => define o tamanho da fonte do título da tabelarowGap => equivalente ao cellspacing do htmlcolGap => equivalente ao colspacing do htmllineCol => define a cor das linhas da tabela, formato RGBxPos => define a posição da tabela na pagina, padrão é center mas pode ser left,right,center ou centre*/while($linha = mysql_fetch_row($res)){$data[] = array($linha[1], $linha[2], $linha[3]); //Coloca os dados num array// $data[] = array(Nome=>$linha[1], Endereço=>$linha[2], Telefone=>$linha[3]);// Desta forma comentada não se faz necessário o array $cols que seta os cabeçalhos da tabela, assim os cabeçalhos seriam os índices do array}mysql_free_result($res);mysql_close($conexao);// Adiciona um texto ao documento//o número 10 se refere ao tamanho da fonte e o array $optionsText define algumas propriedades como explicado na sua declaração logo acima$pdf->ezText('Lista de endereços com origem em MySQL',10,$optionsText);//$pdf->ezText('Digite seu texto aqui'); //Poderia ser desta forma mais simples$pdf->ezText(''); //Para quebra de linha$pdf->ezTable($data, $cols, 'AGENDA',$optionsTable);/*Chama o método ezTable que espera receber ao menos um array que serão os dados da consulta armazenados no laço anterior.O array $cols define os cabeçalhos da tabela, pode ser omitido este parâmetro mas o array com os dados deverá possuir.Seus índices como sendo os nomes que serão mostrados no cabeçalho da tabela, os índices poderiam ser os nomes dos campos da tabelaAGENDA é o nome da tabela$OptionsTable são algumas propriedades da tabela que foram descritas anteriormente ao serem criadas e que agora são passadas para a tabela para que esta seja formatada de acordo com nossa necessidade, exceto o array $data, os outros parâmetros podem ser omitidos, a tabela será criada com valores default.O array $optionsTable por exemplo pode nem existir para gerar a tabela, ele apenas dão a possibilidade de personalizar nossa tabela*/// $pdf->ezTable($data); //Poderia ser desta forma apenas passando o array// Adiciona uma imagem ao documento, o número 100 se refere ao tamanho da imagem$pdf->ezImage('FreeBSD.jpg',100);// Um exemplo para mostrar a funcionalidade da propriedade spacing definida no array $cols tente trocar o valor 1.0 para 1.5 e veja o que acontece.$pdf->ezNewPage(); //Cria uma nova página$pdf->ezText('This is a simple test about how to',10,$optionsText);$pdf->ezText('create a PDF document using PHP language',11,$optionsText);$pdf->ezText('to generate it with apache help, of course!',12, $optionsText);$pdf->ezStream();?>Bem, espero que possam ter entendido meu artigo, seu objetivo era mostrar algumas funções desta API de modo que o relatório possa ficar com a cara de quem o fez, personalizando-o de acordo com o gosto ou necessidade.Até a próxima!