Ir para conteúdo
Fórum Script Brasil
  • 0

PHP para PDF


Carlos Rocha

Pergunta

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

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 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');
 ?>

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...