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.
Agora 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:
<?php
include ('GeraPDF/class.ezpdf.php');
// instancia um novo documento PDF
$pdf = new Cezpdf();
//seta a fonte
$pdf->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 aleft
leading = > define o tamanho que cada linha usará para se mostrada, deverá ser um int
spacing => define o espaçamento entrelinhas, deverá ser um float
você 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 linhas
showHeadings => define se irá mostrar o cabeçalho, 0 = não mostra, 1 = mostra
shaded => define como será sombreada as linhas, 0 = sem sombra, 1 = (padrão) mostra sombra de modo alternado, 2 = mostra sombra em todos com tons alternados
textCol => define a cor do texto no documento, a cor está no formato RGB
shadeCol => define a primeira cor do sombreado na tabela, formato RGB
shadeCol2 => define a segunda cor do sombreado na tabela, formato RGB
fontSize => define o tamanho da fonte nos dados da tabela
titleFontSize => define o tamanho da fonte do título da tabela
rowGap => equivalente ao cellspacing do html
colGap => equivalente ao colspacing do html
lineCol => define a cor das linhas da tabela, formato RGB
xPos => 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 tabela
AGENDA é 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();
?>
[4] Comentário enviado por fagner em 05/11/2004 - 05:26h
Bom estou tentando gerar um pdf a partir de dados gravados em session, tirando as sessions, somente as imagens e textos aparecem segue codigo para analise.:
for($i=0; $i<$_SESSION['total']; $i++)
{
$vlrtot = $_SESSION["qtd[$i]"]*$_SESSION["preco[$i]"];
$pdf->ezTable($_SESSION["produto[$i]"], $cols,'AGENDA',$optionsTable);
$pdf->ezTable($_SESSION["qtd[$i]"], $cols,'AGENDA',$optionsTable);
$pdf->ezTable($_SESSION["preco[$i]"], $cols,'AGENDA',$optionsTable);
$pdf->ezTable($_SESSION["final[$i]"], $cols,'AGENDA',$optionsTable);
}
por favor alguem me de um help.
Fagner M. Vila
fagnervila@hotmail.com
[6] Comentário enviado por villas em 26/10/2005 - 22:54h
Bitcho ... funfou beleza .... só que eu tenho o seguinte do ..while:
do {
echo $row_rsLISTAITENS['detalhe_item'];
echo $row_rsLISTAITENS['detalhe_codpro'];
echo $row_rsLISTAITENS['detalhe_vlr_total'];
$totalP = $row_rsLISTAITENS['detalhe_vlr_total'];
$total += $totalP;
} while ($row_rsLISTAITENS = mysql_fetch_assoc($rsLISTAITENS));
echo 'Total do Pedido',number_format($total, 2, ',', '.');
Só com o While ue vc colocou ai, lista todos os itens da tabela ... como eu poderia adaptar este meu do...while para o pdf ??
[7] Comentário enviado por luiscarlos em 27/10/2005 - 16:28h
Bem o que vc poderia fazer é jogar todos esse valores num array
$data[] = array("Item"=>$row_rsLISTAITENS['detalhe_item'], "Codigo"=>$row_rsLISTAITENS['detalhe_codpro'],"valor"=> $row_rsLISTAITENS['detalhe_vlr_total'],"Total"=>$total);
depois passa para o ezTable esse valor ($data), sem o $cols que tem no exemplo, por que os cabeçalhos seriam já colocados no array, depois vc colcoa no final um campo com o total da compra, se tiver divida manda um email que tentarei fazer um exemplo pra ti, blz? abraços
[10] Comentário enviado por aelsonjr em 31/08/2006 - 11:09h
Olá, estou muito interessado em usar esse recurso, mas gostaria de saber como proceder para gerar um pdf a partir de documento do word gravado no servidor.
[11] Comentário enviado por luiscarlos em 05/09/2006 - 19:27h
priemeiro vc precisa ler o conteudo desse word e jogar para funcao que escreve pdf ou vc pode usar o fop para gerar pdf, vc criaria um xml com o conteudo do word e depois criaria um arquivo xsl para gerar o pdf com base no conteudo do xml, fop é gratuito, da fundacao apache
[12] Comentário enviado por optero em 17/11/2006 - 00:18h
Ola gostaria de saber como eu pego as informações que eu enviei por um form ?
<?php
$_POST[esse];
// chama a classe 'class.ezpdf.php' necessária para se gerar o documento
include "class.ezpdf.php";
// instancia um novo documento com o nome de pdf
$pdf = new Cezpdf();
// seta a fonte que será usada para apresentar os dados
//essas fontes são aquelas dentro do diretório GeraPDF/fonts
$pdf->selectFont('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($esse);
// gera o PDF
$pdf->ezStream();
?>
por favor me ajude!!!
optero@hotmail.com
optero@gmail.com
optero@uggy.com.br
=======================================
Mil desculpas pessoal funcionou era meu global do php que estava off
[15] Comentário enviado por macevidal em 15/10/2007 - 07:55h
Bom estou com problemas de acentuacao ao exportar para pdf, andei pesquisando bastante antes de perguntar, jah estou quebrando a cabeça a alguns dias, se puder me ajudar, agradeço. Os acentos e cedilhas, quando exporto, ficam com caracteres muito loucos. =,.(
Tx desde jah, Mace
[20] Comentário enviado por junior.amadeu em 01/12/2008 - 15:27h
Estou tendo problemas ao gerar pdf.
Com o código abaixo, me é gerado um pdf que os textos estão sobrepostos, ou seja tudo o que eu escrevo fica no mesmo lugar. Quando uso a função addText, o mesmo não acontece.
[21] Comentário enviado por beniltonet em 27/02/2009 - 00:27h
Pessoal boa noite:
Estou com um probleminha sobre geração de pdf a partir de PHP.
Meu atual script esta dando um erro na linha 48. Não entendo o que esta havendo.
Disponho do script para vossa observação. Se alguém souber como indicar o que posso esta alterando, agradeço!
Muito Obrigado: José Benilton...
<?
ob_start();
$type = $_POST[group1];
require('fpdf/fpdf.php');
define('FPDF_FONTPATH','fpdf/font/');
include('../default/a2conectar.php');
if($type == 0)
{
$pdf = new FPDF('P','cm','A4');
$pdf -> AddPage();
$pdf -> SetMargins(1,1,1);
$lin = 1;
$col = 1;
$status = 1;
$cont = 0;
$inicio = $_POST[inicio];
$folhas = $_POST[folhas];
$folhas = $folhas * 10;
$folhas = (($inicio + $folhas) - 1);
$qry= "SELECT vox_espelho,username FROM cc_card WHERE vox_espelho >= $inicio AND vox_espelho <= $folhas AND nbused = 0 GROUP BY vox_espelho ORDER BY vox_espelho";
[24] Comentário enviado por jotacam em 24/05/2009 - 23:55h
Olá, parabéns pelo Viva o Linux!.
Estou procurando um script em php como este apresentado acima pelo Luis Carlos de Brito.
Estou começando a estudar PHP e como sou iniciante, preciso da ajuda destes "Feras".
É o seguinte, mais ou menos como apresenta o script acima,
preciso de um banco de dados que armazene tipo nome e valor on line pelo navegador.
Estes dados serão editados por alguem autorizado em um apágina com opção de serem apagados ou inseridos novos dados. (Ex. abaixo)
____________________________________________________
José da Silva | 1.200,00 | apagar
____________________________________________________
Ana Maria | 800,00 | apagar
....
Botão "Adicionar Novo"
Depois preciso fazer estes dados serem salvos em pdf e que posteriormente
serão exibidos ao clicar em um menu.
Espero ter explicado o que preciso.
Se puderem me ajudar, fico muito agradecido.
No arquivo lib/ezpdf/class.pdf.php por volta da linha 2159 substitua:
function addText($x,$y,$size,$text,$angle=0,$wordSpaceAdjust=0){
if (!$this->numFonts){$this->selectFont(\'./fonts/Helvetica\');}
por
function addText($x,$y,$size,$text,$angle=0,$wordSpaceAdjust=0){
$text = utf8_decode($text);
if (!$this->numFonts){$this->selectFont(\'./fonts/Helvetica\');}
Ou seja acrescente na função a linha
$text = utf8_decode($text);
[27] Comentário enviado por josao_loco em 18/05/2010 - 16:10h
Boa tarde galera, gostei pra caramba desta dica, consegui gerar um relatorio com somente texto que eu estava querendo, mas a duvida é tenho um catalogo em PHP com varias imagens e não faço a minima idéia de como tornar ele em PDF oque seria de grande ajuda pra mim. Será que alguém pode me ajudar, meu email é josao_loco@hotmail.com, desde ja agradeço a todos.. e principalmente ao luis carlos.
body {
background-image: url(img/fundo_cat.jpg);
background-repeat:repeat-y;
}
</style>
</head>
<body>
<div class="fundo">
<table width="200" height="226" border="0" align="right">
<?
$select = mysql_query("SELECT IF(ISNULL(produtos.marca),'',marcas.nome) AS nmarca, produtos.* FROM produtos LEFT JOIN marcas ON marcas.id = produtos.marca");
$coluna=1;
echo "<tr>";
if(mysql_num_rows($select) != 0){
$p = "20";
$sql = mysql_query("SELECT IF(ISNULL(produtos.marca),'',marcas.nome) AS nmarca, produtos.* FROM produtos LEFT JOIN marcas ON marcas.id = produtos.marca WHERE disponivel = '1' order by subdepto , nome asc");
Amigo, no caso se estiver usando o IE 8 assim como eu estava, e tendo o mesmo problema, apague seus arquivos temporários da internet, para forçar o navegador de carregar a página novamente.
Eu fiz isso e bastou.
Se realmente não for só problema com isso, tente usar a função header desta maneira:
[29] Comentário enviado por rizzi em 19/08/2020 - 14:24h
Boa tarde!
Realizei a parametriza usando a biblioteca no Windows com WAMP, tudo funcionado perfeitamente, gerando PDF pegando variável do BD, porem precisei mover aplicação para ambiente com Linux Mint com XAMPP, ao gerar o PDF ele fica vira e rotacional.