Revista Do Linux
 
  
  
 

OUTRAS SEÇÕES
  Cartas
  Variedades
  Rádio Linux
  Mensagem ao Leitor
  CD do Mês
  Coluna do Augusto
  Dicas e Truques
  Opinião
 

Relatórios livres

Veja como é simples criar relatórios no formato PDF a partir de informações em um banco de dados MySQL, utilizando o PHP e a classe FPDF

O FPDF é uma classe para PHP de grande utilidade no processo de criação de relatórios em formato PDF, utilizando funções simples e poderosas. O FPDF é um Software Livre (e gratuito), o que significa que você poderá utilizá-lo livremente para uso pessoal ou comercial, além de poder modificá-lo e estudar seu código-fonte, ao contrário da PDFlib, que exige o pagamento de licenças para uso comercial. O FPDF possui suporte às principais funções para geração de relatórios, como por exemplo:

~U Formatação de cabeçalho (Header) e rodapé (Footer);
~U Quebra de página automática;
~U Quebra de linha e justificação de texto automática;
~U Suporte a imagens (JPEG e PNG);
~U Suporte a fontes TrueType e Type1;

Instalando o FPDF

Antes de mais nada, acesse o endereço www.fpdf.org/ e faça o download da última versão do FPDF. Depois, descompacte o arquivo (.zip ou .tgz) no diretório em que ficará hospedado seu website.

Primeiros passos

Crie um arquivo com o nome de modelo.php, por exemplo, e adicione as seguintes linhas:

<?php 
define('FPDF_FONTPATH','font/');
require('fpdfxxx/fpdf.php');     //onde xxx é a versão da FPDF
$pdf=new FPDF();
$pdf->Open();
$pdf->AddPage();
$pdf->SetFont('Arial','B',12);
$pdf->Write(4,'Olá Mundo!!');
$pdf->Output();
?>

Agora vamos analisar cada linha:

define('FPDF_FONTPATH','font/');
Aqui você define onde está o diretório font/, criado na instalação do FPDF. Esta linha é obrigatória.
require('sub_diretorio/fpdf.php');
Nesta linha você informa onde está o arquivo fpdf.php. É neste arquivo que estão todas as funções utilizadas neste artigo. Esta linha também é obrigatória.
$pdf=new FPDF();
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() é:
FPDF([String Orientação [,String Unidade [,mixed formato]]]);

O parâmetro Orientação pode ser preenchido com:

~U P: Portrait (Retrato) ou
~U L: Landscape (Paisagem).

Em Unidade podemos informar os valores:

~U pt: para pontos;
~U mm: para milímetros;
~U cm: para centímetros ou
~U in: para polegadas.

E em Formato:

~U A3;
~U A4;
~U A5;
~U Letter;
~U Legal.

$pdf->Open();
Inicia um novo documento PDF.
$pdf->AddPage();
Adiciona uma página ao documento, com o cursor a 1cm de 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:

~U Courier;
~U Helvetica ou Arial;
~U Times;
~U Symbol ou;
~U ZapfDingbats.

Estilo pode receber os valores:

~U Vazio : Normal (sem formatação);
~U B: Negrito;
~U I: Itálico ou
~U U: Sublinhado.

$pdf->Write(4,'Olá Mundo!!');
Imprime algum texto no documento. Neste caso, "Olá Mundo!!". A sintaxe da função Write() é:
Write(float altura_da_linha, string texto [, mixed link]);

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();
Cria o arquivo PDF. Se o navegador tiver o plugin Adobe Acrobat Reader instalado, o documento será aberto pelo próprio navegador. Caso contrário, ele pedirá para fazer o download do PDF gerado.

Criando algo realmente útil

Até agora não foi mostrado nem um pouco do poder do PHP para criar relatórios dinâmicos. A brincadeira começa a ficar interessante quando adicionamos funções relacionadas a banco de dados, e é exatamente isso que vamos fazer agora. Vou mostrar como criar um pdf com dados vindos de uma tabela MySQL. Antes de continuar, crie no MySQL uma tabela chamada vendas com os campos codvendas, produto, quantidade e valorunit. Não esqueça de inserir alguns registros na tabela antes de continuar.

Crie o arquivo modelo2.php com as linhas:

<?php
define('FPDF_FONTPATH','font/');
require('sub_diretorio/fpdf.php');

//bd.php deve conter as funções para se conectar no banco de dados
include("bd.php");
//busca os dados no banco de dados
$busca = mysql_query("SELECT * FROM vendas WHERE Vendedor ='Nivaldo'");
$pdf=new FPDF();
$pdf->Open();
$pdf->AddPage();
$pdf->SetFont('Arial','B',10);
$pdf->Cell(40,5,'Código da Venda');
$pdf->SetX(35);
$pdf->Cell(60,5,'Produto');
$pdf->SetX(50);
$pdf->Cell(40,5,'Quantidade');
$pdf->SetX(77);
$pdf->Cell(40,5,'Valor Unitário');
while($resultado = mysql_fetch_array($busca)){
$pdf->ln();
$pdf->Cell(40,5,$resultado[codvenda]);
$pdf->SetX(35);
$pdf->Cell(60,5,$resultado[produto]);
$pdf->SetX(50);
$pdf->Cell(40,5,$resultado[quantidade]);
$pdf->SetX(77);
$pdf->Cell(40,5,$resultado[valorunit]);
}
$pdf->Output();
?>

Neste exemplo vamos ter como resultado uma tabela sem bordas e com quatro campos: Código da Venda, Produto, Quantidade e Valor Unitário, com todas as vendas realizadas pelo vendedor Nivaldo. Analisando o código, podemos notar que foram usadas três novas funções. São elas:

ln()
Quebra a linha. Sua sintaxe é: ln(float valor);

Onde o "valor", em milímetros, é o tamanho do espaçamento entre as linhas do texto. Se não for especificado um valor, ele pegará o mesmo da última célula impressa.

SetX()
Muda o cursor para a coordenada em x desejada. SetX(float coordenada);

Cell()
Cria uma célula de tamanho, texto, borda e alinhamento configurados pelo programador. Sintaxe:

Cell(float width [, float height [, string texto [, mixed borda [, int ln [, string alinhamento [, int fill [, mixed link]]]]]]])

Onde width é a largura e height, a altura da célula. Além destes parâmetros, em texto informa-se o conteúdo da célula. A opção borda deve ser preenchida com 0, para retirá-la, ou 1 para colocar a borda. ln indica para onde vai o cursor após a chamada da função Cell(), e seus valores podem ser 0 para a direita, 1 para o começo da próxima linha e 2 para baixo. alinhamento pode ser preenchido com L para a esquerda (default), C para centralizado e R para a direita. Em fill, devem-se informar os valores 0 para transparente (default) e 1 para preenchimento de fundo da célula. Em link, novamente poderia se utilizar a URL ou identificador retornado pela função AddLink().

Inserindo imagens no documento

Para inserir imagens no relatório, devemos utilizar a função Image(), explicada a seguir, em conjunto com as demais funções já mostradas.

Image(string arquivo, float x, float y, float w [, float h [, string Tipo [, mixed link]]])

Onde arquivo é o nome do arquivo de imagem, x e y são as coordenadas da imagem no documento, w e h representam o tamanho da imagem em milímetros (se omitido é utilizado o tamanho original da imagem). Tipo informa o formato da imagem (os seguintes formatos são válidos: jpg, jpeg, png). Se não especificado, esse valor será determinado a partir da extensão do arquivo. Exemplo:

$pdf->Image('logo.jpg',4,5,150,70,jpg);

Adicione essa linha dentro do código que gera o pdf, e ele inserirá a imagem logo.jpg nas coordenadas 4 em x e 5 em y, com o tamanho de 150x70mm no documento.

Definindo o Autor, Criador e o Titulo do Relatório

Para definir o autor do documento, utiliza-se a função SetAuthor(), e sua sintaxe é: SetAuthor(string autor); onde autor é o nome do autor do documento.

A função SetCreator() define o criador do documento, com a sintaxe: SetCreator(string valor); onde valor é o nome do criador do documento. Normalmente utiliza-se o nome da ferramenta que o gerou.

Para definir o título do documento criado, deve-se usar a função SetTitle(), com a sintaxe: SetTitle(string nome_t). Onde nome_t é o título do documento.

Com estas informações, já é possível criar um relatório com o texto formatado e dados fornecidos por tabelas de algum banco de dados, com o MySQL, o que torna muito mais prática a criação do relatório, principalmente se ele utilizar uma grande quantidade de dados. Com a inserção de imagens, também é possível criar relatórios personalizados utilizando a logo da empresa ou algum tipo de gráfico, por exemplo.

Exemplo de arquivo gerado com FPDF


Nivaldo Pereira de Arruda Neto - n3tux@bol.com.br

A Revista do Linux é editada pela Conectiva S/A
Todos os Direitos Reservados.

Política de Privacidade
Anuncie na Revista do Linux