Jump to content
Fórum Script Brasil
  • 0

PHP para PDF


Carlos Rocha

Question

Pessoal.

Boa noite

Estou 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 by Carlos Rocha
Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

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 by Carlos Rocha
Link to comment
Share on other sites

  • 0

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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...