Carlos Rocha Posted July 21, 2011 Report Share Posted July 21, 2011 (edited) Pessoal.Boa noiteEstou tentando gerar um pdf a partir do php.Tentei com o codigo abaixo que funcionou (usei para testar).<?php include_once("global/funcoes_php/fpdf/fpdf.php");// cria o documento PDF $pdf = new FPDF('P','cm','A4'); $pdf->Open('arquivo.pdf'); $pdf->AddPage(); $pdf->SetFont('helvetica', 'B', 16); $pdf->Cell(0, 2,'titulo principal', 0, 1, 'C'); $pdf->SetFont('Arial', '', 10); $texto = "Texto para teste"; $pdf->MultiCell(0,0.5,$texto, 0, 'J'); $pdf->Output('arquivo.pdf'); ?> Dai, tentei adaptar com uma consulta ao mysql. Dai não gera o pdf. Gostaria de ajuda para achar o erro. O código abaixo funciona sem geração de pdf. <?php include("global/config/conexao.php"); $id=1; $data_relatorio="2011-07-06"; $cliente=1; include("global/funcoes_php/fpdf/fpdf.php");// cria o documento PDF $pdf = new FPDF('P','cm','A4'); $pdf->Open('arquivo.pdf'); $pdf->AddPage(); $pdf->SetFont('helvetica', 'B', 16); $pdf->Cell(0, 2,'titulo principal', 0, 1, 'C'); $pdf->SetFont('Arial', '', 10); //////////////////////// $consulta_fornecedor=" SELECT razaosocial, nome FROM fornecedores WHERE id=$id "; list($FORNECEDOR_RAZAOSOCIAL,$FORNECEDOR_NOME) = mysql_fetch_row($MySQL->query($consulta_fornecedor)); $texto1= "<table width=\"95%\" border=\"1\" align=\"center\"> <tr><td colspan=\"4\" align=\"center\"> RELATÓRIO ANALÍTICO DE PEDIDOS FORNECEDOR $FORNECEDOR_RAZAOSOCIAL$FORNECEDOR_NOME </td></tr> "; $texto2= "<tr><td colspan=\"4\" align=\"left\">".formata_data($data_relatorio)."</td></tr>"; $consulta_cliente=" SELECT DISTINCT(pc.id_cliente),cl.razaosocial, cl.nome FROM pedidos_cliente pc INNER JOIN pedidos pe ON pe.ID_PEDIDO = pc.id_pedido_cliente INNER JOIN produtos pd ON pd.id = pe.ID_PRODUTO INNER JOIN fornecedores fd ON fd.id = pd.fornecedor INNER JOIN clientes cl ON cl.id = pc.id_cliente WHERE fd.id = $id and pc.data = '$data_relatorio' ORDER BY cl.nome, cl.razaosocial "; $texto3= "<tr> <td align=\"left\" width=\"40%\">NOME DO PRODUTO</td> <td align=\"center\" width=\"20%\">QUANTIDADE</td> <td align=\"right\" width=\"20%\">preço UNITÁRIO</td> <td align=\"right\" width=\"20%\">SEMI TOTAL</td> </tr> "; $consulta_cliente_query = $MySQL->query($consulta_cliente); while(list($cliente,$CLIENTE_RAZAOSOCIAL,$CLIENTE_NOME) = mysql_fetch_row($consulta_cliente_query)) { $texto4= "<tr><td colspan=\"4\" align=\"left\">$CLIENTE_RAZAOSOCIAL$CLIENTE_NOME</td></tr>"; $consulta_itens=" SELECT pd.nome, pe.quantidade, pe.preco_uni, pe.semi_total FROM pedidos pe INNER JOIN produtos pd ON pd.id=pe.ID_PRODUTO INNER JOIN fornecedores fd ON fd.id=pd.fornecedor INNER JOIN pedidos_cliente pc ON pc.id_pedido_cliente=pe.ID_PEDIDO INNER JOIN clientes cl ON cl.id=pc.id_cliente WHERE fd.id = $id and pc.data = '$data_relatorio' and pc.id_cliente=$cliente ORDER BY pe.ID_PRODUTO "; $SUB_TOTAL=0.00; $consulta_itens_query = $MySQL->query($consulta_itens); while(list( $PRODUTO_NOME, $QUANTIDADE, $PRECO_UNI, $SEMI_TOTAL ) = mysql_fetch_row($consulta_itens_query)) { $SUB_TOTAL+=$SEMI_TOTAL; $texto5= "<tr> <td align=\"left\" width=\"40%\">$PRODUTO_NOME</td> <td align=\"center\" width=\"20%\">$QUANTIDADE</td> <td align=\"right\" width=\"20%\">R$ ".number_format($PRECO_UNI, 2, '.', '')."</td> <td align=\"right\" width=\"20%\">R$ ".number_format($SEMI_TOTAL, 2, '.', '')."</td> </tr> "; } $texto6= "<tr><td align=\"right\" colspan=\"4\">TOTAL NA DATA: R$ ".number_format($SUB_TOTAL, 2, '.', '')."</td></tr>"; $TOTAL_GERAL+=$SUB_TOTAL; $texto7= "<tr><td align=\"right\" colspan=\"4\">Gerar PDF</td></tr>"; } $texto8= "</table>"; //////////////////////// $texto = $texto1.$texto2.$texto3.$texto4.$texto5.$texto6.$texto7.$texto8; print $texto; $pdf->MultiCell(0,0.5,$texto, 0, 'J'); $pdf->Output('arquivo.pdf'); ?>Grato a quem puder.ajudar Edited July 21, 2011 by Carlos Rocha Quote Link to comment Share on other sites More sharing options...
0 Willian Gustavo Veiga Posted July 22, 2011 Report Share Posted July 22, 2011 Faça um teste: Não imprima nada na tela (usando print, echo ou qualquer outra coisa) antes de gerar o PDF.Um abraço. Quote Link to comment Share on other sites More sharing options...
0 Carlos Rocha Posted July 22, 2011 Author Report Share Posted July 22, 2011 (edited) O problema era que tinha umas chamadas para umas funções mas o codigo delas ainda não esta incluso na pagina.Porem agora surge outro problema:O pdf não esta lendo o HTML. Ele esta imprimindo as tags.Como faço para o pdf reconhecer as tags HTML?Segue o que eu já mudei<?php header('Content-Type: text/html; charset=utf-8'); include("global/config/conexao.php"); include("global/funcoes_php/formata_cep.php"); include("global/funcoes_php/formata_tel.php"); include("global/funcoes_php/formata_cpf.php"); include("global/funcoes_php/formata_cnpj.php"); include("global/funcoes_php/formata_data.php"); $id=1; $data_relatorio="2011-07-06"; $cliente=1; //////////////////////// $consulta_fornecedor=" SELECT razaosocial, nome FROM fornecedores WHERE id=$id "; $consulta_fornecedor_query = $MySQL->query($consulta_fornecedor); list($FORNECEDOR_RAZAOSOCIAL,$FORNECEDOR_NOME) = mysql_fetch_row($consulta_fornecedor_query); $texto1= "<table width=\"95%\" border=\"1\" align=\"center\"> <tr><td colspan=\"4\" align=\"center\"> RELATÓRIO ANALÍTICO DE PEDIDOS FORNECEDOR $FORNECEDOR_RAZAOSOCIAL$FORNECEDOR_NOME </td></tr> "; $texto2= "<tr><td colspan=\"4\" align=\"left\">".formata_data($data_relatorio)."</td></tr>"; $consulta_cliente=" SELECT DISTINCT(pc.id_cliente),cl.razaosocial, cl.nome FROM pedidos_cliente pc INNER JOIN pedidos pe ON pe.ID_PEDIDO = pc.id_pedido_cliente INNER JOIN produtos pd ON pd.id = pe.ID_PRODUTO INNER JOIN fornecedores fd ON fd.id = pd.fornecedor INNER JOIN clientes cl ON cl.id = pc.id_cliente WHERE fd.id = $id and pc.data = '$data_relatorio' ORDER BY cl.nome, cl.razaosocial "; $texto3= "<tr> <td align=\"left\" width=\"40%\">NOME DO PRODUTO</td> <td align=\"center\" width=\"20%\">QUANTIDADE</td> <td align=\"right\" width=\"20%\">preço UNITÁRIO</td> <td align=\"right\" width=\"20%\">SEMI TOTAL</td> </tr> "; $consulta_cliente_query = $MySQL->query($consulta_cliente); while(list($cliente,$CLIENTE_RAZAOSOCIAL,$CLIENTE_NOME) = mysql_fetch_row($consulta_cliente_query)) { $texto4= "<tr><td colspan=\"4\" align=\"left\">$CLIENTE_RAZAOSOCIAL$CLIENTE_NOME</td></tr>"; $consulta_itens=" SELECT pd.nome, pe.quantidade, pe.preco_uni, pe.semi_total FROM pedidos pe INNER JOIN produtos pd ON pd.id=pe.ID_PRODUTO INNER JOIN fornecedores fd ON fd.id=pd.fornecedor INNER JOIN pedidos_cliente pc ON pc.id_pedido_cliente=pe.ID_PEDIDO INNER JOIN clientes cl ON cl.id=pc.id_cliente WHERE fd.id = $id and pc.data = '$data_relatorio' and pc.id_cliente=$cliente ORDER BY pe.ID_PRODUTO "; $SUB_TOTAL=0.00; $consulta_itens_query = $MySQL->query($consulta_itens); while(list( $PRODUTO_NOME, $QUANTIDADE, $PRECO_UNI, $SEMI_TOTAL ) = mysql_fetch_row($consulta_itens_query)) { $SUB_TOTAL+=$SEMI_TOTAL; $texto5= "<tr> <td align=\"left\" width=\"40%\">$PRODUTO_NOME</td> <td align=\"center\" width=\"20%\">$QUANTIDADE</td> <td align=\"right\" width=\"20%\">R$ ".number_format($PRECO_UNI, 2, '.', '')."</td> <td align=\"right\" width=\"20%\">R$ ".number_format($SEMI_TOTAL, 2, '.', '')."</td> </tr> "; } $texto6= "<tr><td align=\"right\" colspan=\"4\">TOTAL NA DATA: R$ ".number_format($SUB_TOTAL, 2, '.', '')."</td></tr>"; $TOTAL_GERAL+=$SUB_TOTAL; $texto7= "<tr><td align=\"right\" colspan=\"4\">Gerar PDF</td></tr>"; } $texto8= "</table>"; //////////////////////// include("global/funcoes_php/fpdf/fpdf.php");// cria o documento PDF $pdf = new FPDF('P','cm','A4'); $pdf->Open('arquivo.pdf'); $pdf->AddPage(); $pdf->SetFont('helvetica', 'B', 16); $pdf->Cell(0, 2,'titulo principal', 0, 1, 'C'); $pdf->SetFont('Arial', '', 10); $texto = $texto1.$texto2.$texto3.$texto4.$texto5.$texto6.$texto7.$texto8; print $texto; $pdf->MultiCell(0,0.5,$texto, 0, 'J'); $pdf->Output('arquivo.pdf'); ?> Edited July 22, 2011 by Carlos Rocha Quote Link to comment Share on other sites More sharing options...
0 Carlos Rocha Posted July 22, 2011 Author Report Share Posted July 22, 2011 Bom.Mudei a biblioteca e fiz o script de duas maneiras: Uma com uma pagina sozinha. Dessa forma o pdf é gerado e lê normalmente.A outra forma é gerando o relatório normal no php e depois acrecentando um botão. Gerar pdf com um href setando para um ação=gerarpdf. Dessa forma, tambem gera o pdf, o probleam é que na hora que vou ler esse pdf, diz que não pode abrir pois o arquivo esta danificado.Segue o arquivo separado que esta funcionando correto:<!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>PHP - PDF</title> </head> <body> <?php header('Content-Type: text/html; charset=utf-8'); include("global/config/conexao.php"); include("global/funcoes_php/formata_cep.php"); include("global/funcoes_php/formata_tel.php"); include("global/funcoes_php/formata_cpf.php"); include("global/funcoes_php/formata_cnpj.php"); include("global/funcoes_php/formata_data.php"); $id=1; $data_relatorio="2011-07-06"; $cliente=1; $consulta_fornecedor=" SELECT razaosocial, nome FROM fornecedores WHERE id=$id "; $consulta_fornecedor_query = $MySQL->query($consulta_fornecedor); list($FORNECEDOR_RAZAOSOCIAL,$FORNECEDOR_NOME) = mysql_fetch_row($consulta_fornecedor_query); $texto1= "<table width=\"95%\" border=\"1\" align=\"center\"> <tr><td colspan=\"4\" align=\"center\"> RELATÓRIO ANALÍTICO DE PEDIDOS FORNECEDOR $FORNECEDOR_RAZAOSOCIAL$FORNECEDOR_NOME </td></tr> "; $texto2= "<tr><td colspan=\"4\" align=\"left\">".formata_data($data_relatorio)."</td></tr>"; $consulta_cliente=" SELECT DISTINCT(pc.id_cliente),cl.razaosocial, cl.nome FROM pedidos_cliente pc INNER JOIN pedidos pe ON pe.ID_PEDIDO = pc.id_pedido_cliente INNER JOIN produtos pd ON pd.id = pe.ID_PRODUTO INNER JOIN fornecedores fd ON fd.id = pd.fornecedor INNER JOIN clientes cl ON cl.id = pc.id_cliente WHERE fd.id = $id and pc.data = '$data_relatorio' ORDER BY cl.nome, cl.razaosocial "; $texto3= "<tr> <td align=\"left\" width=\"40%\">NOME DO PRODUTO</td> <td align=\"center\" width=\"20%\">QUANTIDADE</td> <td align=\"right\" width=\"20%\">preço UNITÁRIO</td> <td align=\"right\" width=\"20%\">SEMI TOTAL</td> </tr> "; $consulta_cliente_query = $MySQL->query($consulta_cliente); while(list($cliente,$CLIENTE_RAZAOSOCIAL,$CLIENTE_NOME) = mysql_fetch_row($consulta_cliente_query)) { $texto4= "<tr><td colspan=\"4\" align=\"left\">$CLIENTE_RAZAOSOCIAL$CLIENTE_NOME</td></tr>"; $consulta_itens=" SELECT pd.nome, pe.quantidade, pe.preco_uni, pe.semi_total FROM pedidos pe INNER JOIN produtos pd ON pd.id=pe.ID_PRODUTO INNER JOIN fornecedores fd ON fd.id=pd.fornecedor INNER JOIN pedidos_cliente pc ON pc.id_pedido_cliente=pe.ID_PEDIDO INNER JOIN clientes cl ON cl.id=pc.id_cliente WHERE fd.id = $id and pc.data = '$data_relatorio' and pc.id_cliente=$cliente ORDER BY pe.ID_PRODUTO "; $SUB_TOTAL=0.00; $consulta_itens_query = $MySQL->query($consulta_itens); while(list( $PRODUTO_NOME, $QUANTIDADE, $PRECO_UNI, $SEMI_TOTAL ) = mysql_fetch_row($consulta_itens_query)) { $SUB_TOTAL+=$SEMI_TOTAL; $texto5= "<tr> <td align=\"left\" width=\"40%\">$PRODUTO_NOME</td> <td align=\"center\" width=\"20%\">$QUANTIDADE</td> <td align=\"right\" width=\"20%\">R$ ".number_format($PRECO_UNI, 2, '.', '')."</td> <td align=\"right\" width=\"20%\">R$ ".number_format($SEMI_TOTAL, 2, '.', '')."</td> </tr> "; } $texto6= "<tr><td align=\"right\" colspan=\"4\">TOTAL NA DATA: R$ ".number_format($SUB_TOTAL, 2, '.', '')."</td></tr>"; $TOTAL_GERAL+=$SUB_TOTAL; } $texto7= "</table>"; //////////////////////// require_once("global/funcoes_php/dompdf/dompdf_config.inc.php"); $html = $texto1.$texto2.$texto3.$texto4.$texto5.$texto6.$texto7; $dompdf = new DOMPDF(); $dompdf->load_html($html); $dompdf->set_paper('letter', 'landscape'); $dompdf->render(); $dompdf->stream("exemplo-01.pdf"); ?> </body> </html> Segue o arquivo que contem o acoa=gerrarpdf que NÃO esta funcionando correto: <?php if ($acao == "gerapdf") { $consulta_fornecedor=" SELECT razaosocial, nome FROM fornecedores WHERE id=$id "; $consulta_fornecedor_query = $MySQL->query($consulta_fornecedor); list($FORNECEDOR_RAZAOSOCIAL,$FORNECEDOR_NOME) = mysql_fetch_row($consulta_fornecedor_query); $texto1= "<table width=\"95%\" border=\"1\" align=\"center\"> <tr><td colspan=\"4\" align=\"center\"> RELATÓRIO ANALÍTICO DE PEDIDOS FORNECEDOR $FORNECEDOR_RAZAOSOCIAL$FORNECEDOR_NOME </td></tr> "; $texto2= "<tr><td colspan=\"4\" align=\"left\">".formata_data($data_relatorio)."</td></tr>"; $consulta_cliente=" SELECT DISTINCT(pc.id_cliente),cl.razaosocial, cl.nome FROM pedidos_cliente pc INNER JOIN pedidos pe ON pe.ID_PEDIDO = pc.id_pedido_cliente INNER JOIN produtos pd ON pd.id = pe.ID_PRODUTO INNER JOIN fornecedores fd ON fd.id = pd.fornecedor INNER JOIN clientes cl ON cl.id = pc.id_cliente WHERE fd.id = $id and pc.data = '$data_relatorio' ORDER BY cl.nome, cl.razaosocial "; $texto3= "<tr> <td align=\"left\" width=\"40%\">NOME DO PRODUTO</td> <td align=\"center\" width=\"20%\">QUANTIDADE</td> <td align=\"right\" width=\"20%\">preço UNITÁRIO</td> <td align=\"right\" width=\"20%\">SEMI TOTAL</td> </tr> "; $consulta_cliente_query = $MySQL->query($consulta_cliente); while(list($cliente,$CLIENTE_RAZAOSOCIAL,$CLIENTE_NOME) = mysql_fetch_row($consulta_cliente_query)) { $texto4= "<tr><td colspan=\"4\" align=\"left\">$CLIENTE_RAZAOSOCIAL$CLIENTE_NOME</td></tr>"; $consulta_itens=" SELECT pd.nome, pe.quantidade, pe.preco_uni, pe.semi_total FROM pedidos pe INNER JOIN produtos pd ON pd.id=pe.ID_PRODUTO INNER JOIN fornecedores fd ON fd.id=pd.fornecedor INNER JOIN pedidos_cliente pc ON pc.id_pedido_cliente=pe.ID_PEDIDO INNER JOIN clientes cl ON cl.id=pc.id_cliente WHERE fd.id = $id and pc.data = '$data_relatorio' and pc.id_cliente=$cliente ORDER BY pe.ID_PRODUTO "; $SUB_TOTAL=0.00; $consulta_itens_query = $MySQL->query($consulta_itens); while(list( $PRODUTO_NOME, $QUANTIDADE, $PRECO_UNI, $SEMI_TOTAL ) = mysql_fetch_row($consulta_itens_query)) { $SUB_TOTAL+=$SEMI_TOTAL; $texto5= "<tr> <td align=\"left\" width=\"40%\">$PRODUTO_NOME</td> <td align=\"center\" width=\"20%\">$QUANTIDADE</td> <td align=\"right\" width=\"20%\">R$ ".number_format($PRECO_UNI, 2, '.', '')."</td> <td align=\"right\" width=\"20%\">R$ ".number_format($SEMI_TOTAL, 2, '.', '')."</td> </tr> "; } $texto6= "<tr><td align=\"right\" colspan=\"4\">TOTAL NA DATA: R$ ".number_format($SUB_TOTAL, 2, '.', '')."</td></tr>"; $TOTAL_GERAL+=$SUB_TOTAL; } $texto7= "</table>"; require_once("../global/funcoes_php/dompdf/dompdf_config.inc.php"); $html = $texto1.$texto2.$texto3.$texto4.$texto5.$texto6.$texto7; $dompdf = new DOMPDF(); $dompdf->load_html($html); $dompdf->set_paper('letter', 'landscape'); $dompdf->render(); $dompdf->stream("relatorio.pdf"); } ?>A gradeço a quem puder ajudar. Quote Link to comment Share on other sites More sharing options...
0 Carlos Rocha Posted July 22, 2011 Author Report Share Posted July 22, 2011 Consegui.foi só criar um arquivo seperado quew deu certo. Quote Link to comment Share on other sites More sharing options...
Question
Carlos Rocha
Pessoal.
Boa noite
Estou tentando gerar um pdf a partir do php.
Tentei com o codigo abaixo que funcionou (usei para testar).
Dai, tentei adaptar com uma consulta ao mysql. Dai não gera o pdf. Gostaria de ajuda para achar o erro. O código abaixo funciona sem geração de pdf.Grato a quem puder.ajudar
Edited by Carlos RochaLink to comment
Share on other sites
4 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.