Pular para o conteúdo

Gerando documento PDF em PHP

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.
Luis Carlos de Brito luiscarlos
Hits: 172.208 Categoria: PHP Subcategoria: Internet
  • Indicar
  • Impressora
  • Denunciar

Parte 5: Conclusão

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!

Luis.

   1. Baixando os arquivos necessários
   2. Gerando um arquivo simples
   3. Criando um banco para posterior consulta
   4. Gerando PDF a partir de consulta SQL
   5. Conclusão
Nenhum artigo encontrado.

Enganando o proxy Squid (download de arquivos)

O que é o e107

Wordpress: Hospede blogs no seu Linux

Estatísticas para todos

Deixando seu PHPNuke mais 'esperto'

#1 Comentário enviado por Jarnotrulli em 18/10/2004 - 08:40h
Poxa, muito legal esse artigo! Alias, isso vale para outros tipos de exibicao de texto, como o Ghostscript?
#2 Comentário enviado por nhanhu em 18/10/2004 - 16:17h
resultado:

%PDF-1.3 %âãÏÓ 1 0 obj << /Type /Catalog /Outlines 2 0 R /Pages 3 0 R >> endobj 2 0 obj << /Type /Outlines /Count 0 >> endobj 3 0 obj << /Type /Pages /Kids [6 0 R 9 0 R ] /Count 2 /Resources << /ProcSet 4 0 R /Font << /F1 8 0 R >> >> /MediaBox [0.000 0.000 595.280 841.890] >> endobj 4 0 obj [/PDF /Text ] endobj 5 0 obj << /Creator (R and OS php pdf writer, http://www.ros.co.nz) /CreationDate (D:20041018) >> endobj 6 0 obj << /Type /Page /Parent 3 0 R /Contents 7 0 R >> endobj 7 0 obj << /Filter /FlateDecode /Length 105 >> stream xoeOE1@@{§x%ÍúldW+¡¢ÿb?!a4Nì6´)¦TMo/oo*FNZoeK¤´&°CÚdÈH"Y?¸]¯{"Èáä"×_~ü®<ìtÏз xCÍQ8ê?ÁX«OEù¿î7 endstream endobj 8 0 obj << /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >> endobj 9 0 obj << /Type /Page /Parent 3 0 R /Contents 10 0 R >> endobj 10 0 obj << /Filter /FlateDecode /Length 180 >> stream xoeUÎÁªÂ0н_1î$&i1}[QqÙE~ Ök"GmJsf¿o"?TMÕa{ ­+a´D#¥¨* {Åö¤ ¤(û¬¬ %)ܧ?À"î3ÃÇ8®aÿq´<¢©Æ^æ¯`)½SõWS­>É1¬=oep?]¾ÓÈÈ)OE=Ús<Á?}v=ý~;¡ëÆ"§µþsúcrDO#Í/80?=Üä:Oð4Lĺ~çDË7ûf/E_ endstream endobj xref 0 11 0000000000 65535 f 0000000015 00000 n 0000000080 00000 n 0000000126 00000 n 0000000286 00000 n 0000000315 00000 n 0000000420 00000 n 0000000483 00000 n 0000000661 00000 n 0000000768 00000 n 0000000832 00000 n trailer << /Size 11 /Root 1 0 R /Info 5 0 R >> startxref 1086 %%EOF
#3 Comentário enviado por pools em 18/10/2004 - 18:18h
Acredito que faltou setar o contentType para pdf!

A princípio, é muito simpls criar PDF "on the fly" no php. Já no JSP... que horror...
#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
#5 Comentário enviado por jawd em 08/05/2005 - 12:18h
Este erro esta dando no internet explore.

%PDF-1.3 %âãÏÓ 1 0 obj << /Type /Catalog /Outlines 2 0 R /Pages 3 0 R >> endobj 2 0 obj << /Type /Outlines /Count 0 >> endobj 3 0 obj << /Type /Pages /Kids [6 0 R ] /Count 1 /Resources << /ProcSet 4 0 R /Font << /F1 8 0 R >> >> /MediaBox [0.000 0.000 595.280 841.890] >> endobj 4 0 obj [/PDF /Text ] endobj 5 0 obj << /Creator (R and OS php pdf writer, http://www.ros.co.nz) /CreationDate (D:20050508) >> endobj 6 0 obj << /Type /Page /Parent 3 0 R /Contents 7 0 R >> endobj 7 0 obj << /Filter /FlateDecode /Length 74 >> stream xoeãr Q06Ð300P0³4Ó3²4PIQÐw3T04 +"¤)(hx¤æääk*"d)¸+p!4~ZèTMaÕz_""¢Õ,àV endstream endobj 8 0 obj << /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >> endobj xref 0 9 0000000000 65535 f 0000000015 00000 n 0000000080 00000 n 0000000126 00000 n 0000000280 00000 n 0000000309 00000 n 0000000414 00000 n 0000000477 00000 n 0000000623 00000 n trailer << /Size 9 /Root 1 0 R /Info 5 0 R >> startxref 730 %%EOF

Mas no firefox não. Alguem sabe me dizer o que fazer para funcionar nele?
Obrigado a todos que responderem
#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 ??

Obrigado
Villas
villas2@terra.com.br
#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
#8 Comentário enviado por mtavares em 06/06/2006 - 07:34h
Eu experimentei e funcionou numa beleza só que eu queria saber se existe alguma documentação...
#9 Comentário enviado por mtavares em 06/06/2006 - 08:31h
Minha gente isto é maravilhoso faz-se muita coisa e com facilidade...Beleza
#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.

Agradeço qualquer informaçao!!
#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
#13 Comentário enviado por mtavares em 30/04/2007 - 16:28h
alguém já tentou colocar a opção que permite a página ficar na Horizontal
#14 Comentário enviado por removido em 12/07/2007 - 15:56h
Puts cara! valeu mesmo fera! tu tá de parabéns! usei esse exemplo aqui pra eu criar uma aplicação aqui e ficou show de bola! valeu mesmo cara! :)
#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
#16 Comentário enviado por LE750 em 12/02/2008 - 11:27h
Ae alguem sabe como gerar o pdf em modo paisagem

[]s

leandroviana@gmail.com
#17 Comentário enviado por frajolitzz em 12/05/2008 - 11:57h
//mostra em formato paisagem
$pdf = new Cezpdf('a4','landscape');
#18 Comentário enviado por miglaranjeira em 03/06/2008 - 01:41h
Oi
Quando leio de um banco de dados um campo com por exemplo Gonçalves no pdf aparece Hugo Gonçalves,
Alguém pode me ajudar

Miguel
#19 Comentário enviado por comfaa em 28/10/2008 - 13:04h
muito legal !!!
#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.

<?php
include("../pdfClassesAndFonts_009e/class.ezpdf.php");
$pdf = new Cezpdf();
$pdf->ezText("\n\nPQP");
$pdf->ezText("\n\nPQPqqqq");
$pdf->addText(200,200,10,"AA");
$pdf->stream();
?>

Alguem pode me ajudar?

[]s


#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";

$buscar = mysql_query($qry);

while($linha = mysql_fetch_array($buscar))

{

switch($lin)

{
case 1:

if(($lin == 1) and ($col == 1)){$a=3; $b=2; $c=7.5; $d=4.7; $e=1.9; $f=1.9; $col++;} else {

if(($lin == 1) and ($col == 2)){$a=12.5; $b=2; $c=17; $d=4.7; $e=18.7; $f=1.9; $col = 1; $lin++;}}

break;



case 2:

if(($lin == 2) and ($col == 1)){$a=3; $b=7.5; $c=7.5; $d=10.2; $e=1.9; $f=7.1; $col++;} else {

if(($lin == 2) and ($col == 2)){$a=12.5; $b=7.5; $c=17; $d=10.2; $e=18.7; $f=7.1; $col = 1; $lin++;}}}

break;



case 3:

if(($lin == 3) and ($col == 1)){$a=3; $b=13; $c=7.5;$d=15.7; $e=1.9; $f=12.4; $col++;} else {

if(($lin == 3) and ($col == 2)){$a=12.5; $b=13; $c=17; $d=15.7; $e=18.7; $f=12.4; $col = 1; $lin++;}}}}

break;



case 4:

if(($lin == 4) and ($col == 1)){$a=3; $b=18.5; $c=7.5; $d=21.2; $e=1.9; $f=17.6; $col++;} else {

if(($lin == 4) and ($col == 2)){$a=12.5; $b=18.5; $c=17; $d=21.2; $e=18.7; $f=17.6; $lin=1; $col=1;
break;

case 5:

if(($lin == 5) and ($col == 1)){$a=3; $b=24; $c=7.5; $d=26.7; $e=1.9; $f=17.6; $col++;} else {

if(($lin == 5) and ($col == 2)){$a=12.5; $b=24; $c=17; $d=26.7; $e=18.7; $f=17.6; $lin=1; $col=1;{
break;




$status=1;}}}

break;

}



$pdf -> SetFont('Arial','',12);

$pdf -> SetXY($e,$f);

#$pdf -> Cell(1,0.05,'ACCESO LOCAL: 3224 26 22',0,0,'L');



//Codigo PIN

$pdf -> SetFont('Arial','',12);

$pdf -> SetXY($a,$b);

$pdf -> Cell(1,0.05,$linha[1],0,0,'L');



//Numero de serie e codigo de barras

$pdf -> SetFont('Arial','',10);

$pdf -> SetXY($c,$d);

$pdf -> Cell(1,0.05,$linha[0],0,0,'L');



if(($status == 1) and ($_POST[folhas] != $cont)){$pdf -> AddPage(); $status = 0; $cont++;}

}

}



$pdf -> Output('arquivo','I');

include('../default/a2desconectar.php');

?>
#22 Comentário enviado por beniltonet em 27/02/2009 - 11:41h
case 3:

if(($lin == 3) and ($col == 1)){$a=3; $b=13; $c=7.5;$d=15.7; $e=1.9; $f=12.4; $col++;} else {

if(($lin == 3) and ($col == 2)){$a=12.5; $b=13; $c=17; $d=15.7; $e=18.7; $f=12.4; $col = 1; $lin++;}}}

break;

Neste Aqui pra ser mais exato!
#23 Comentário enviado por miqueias3000 em 06/04/2009 - 15:05h
"Acredito que faltou setar o contentType para pdf!"

E como se seta o CONTENT TYPE?

Abraço!
#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.

Abraço,
João Camilo.

#25 Comentário enviado por ehglopes em 16/09/2009 - 12:41h
Ola estou tentando gerar um pdf e fiz os passos mas na hora de rodar apareceu isso:

%PDF-1.3 %âãÏÓ 1 0 obj << /Type /Catalog /Outlines 2 0 R /Pages 3 0 R >> endobj 2 0 obj << /Type /Outlines /Count 0 >> endobj 3 0 obj << /Type /Pages /Kids [6 0 R ] /Count 1 /Resources << /ProcSet 4 0 R >> /MediaBox [0.000 0.000 595.280 841.890] >> endobj 4 0 obj [/PDF /Text ] endobj 5 0 obj << /Creator (R and OS php pdf writer, http://www.ros.co.nz) /CreationDate (D:20090916) >> endobj 6 0 obj << /Type /Page /Parent 3 0 R /Contents 7 0 R >> endobj 7 0 obj << /Filter /FlateDecode /Length 62 >> stream xœãr Q06Ð300P°04Ô³°4PIQÐwS04Š*„¤)(hx¤æää+„çå¤(j*„d)¸†J£ & endstream endobj xref 0 8 0000000000 65535 f 0000000015 00000 n 0000000080 00000 n 0000000126 00000 n 0000000257 00000 n 0000000286 00000 n 0000000391 00000 n 0000000454 00000 n trailer << /Size 8 /Root 1 0 R /Info 5 0 R >> startxref 588 %%EOF


O que devo fazer??

Grato

Eduardo
Skape = du.tigrosa
#26 Comentário enviado por paulocamboim em 27/04/2010 - 23:29h
Para resolver o problema com acentuação basta fazer o seguinte:
(retirado de: http://listas.softwarelivre.org/pipermail/dotproject-br/2008-May/002350.html)

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);

até mais...
#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.

vou postar o codigo fonte aqui:

<?
include("admin/includes/header.php");
include_once("admin/includes/conexao.php");
include_once("configuracoes.php");
$a = "1";
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">;
<html xmlns="http://www.w3.org/1999/xhtml">;
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type="text/css">
div {
position: relative;
left: 120px;
width: 240px;
top: 140px;/*
text-align: left;
padding: 5px;
background: #a9d06a;
margin: 3px 0 0 0;
border-bottom: 1px solid #333333;
border-bottom: 1px solid #555555; */
}

div.fundo {
position: relative;
left: -10px;
width: 854px;
top: 130px;
}
div.subdepto {
position: absolute;
z-index: 2;
left: 51px;
width: 129px;
height: 25px;
top: 41px;
}

div.paginacao {
position: absolute;
z-index: 3;
left: 590px;
width: 218px;
height: 25px;
top: 2px;
}
div.paginacao2 {
position: absolute;
z-index: 4;
left: 625px;
width: 218px;
height: 25px;
top: 1217px;
}

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");

while($valor = mysql_fetch_array($sql)){
?>
<?
if ($valor["foto"]){
$nf = explode('pq',$valor["foto"]);
//echo $nf[0];
if($nf[0] == ""){
$caminho21 = "grande/gr".$nf[1];
}else{
$caminho21 = "grande/".$valor["foto"];
}
$caminho = "pequena/".$valor["foto"];
$caminho2 = $caminho21;
}
?>
<td width="156" valign="top"> <table width="177" height="202" border="0" cellpadding="0" cellspacing="0" style="border-bottom:1px dashed #CCCCCC;">
<tr>
<td valign="top"><font size="2">
<?=$valor["nome"]?><?=$valor['subdepto']?>
</font></td>
</tr>
<tr>
<td width="194" valign="top">
<img src="<?=$caminho?>" width="140px" height="140px" border="0" /><br />
Ref: <font color="#FF0000"><?=$valor['codigo']?></font><br />
<?=$valor['unidades']?> un</a></td>
</tr>
</table>
<?
if(($a%16)==0){
echo "<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />";
}
if (($coluna%4)==0)
{
echo "</tr><tr>"; //quando atingir 5 colunas, fecha a linha anterior e inicia uma nova linha
}
$coluna++;
$a++;
}
}else{
echo "Banco de Dados Vazio";
}
echo "</tr>";
?>
</table>
</div></body>
</html>
#28 Comentário enviado por vinnycp em 07/06/2010 - 14:32h
"Acredito que faltou setar o contentType para pdf!"

E como se seta o CONTENT TYPE?

Abraço!
--------------------------------------------------------------

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:

header('Content-type: application/pdf');

Creio que isso vá funcionar.

Abraço.
#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.

Tentei fazer alguns ajuste ma não deu certo.

Por favor se puder me ajudar, agradeço!

Contribuir com comentário

Entre na sua conta para comentar.