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

Relatório usando FDPF


viper33

Pergunta

Tenho o seguinte relatório básico de cidades:

<?php
  ob_start();
  require_once("fpdf/fpdf.php"); 
  define('FPDF_FONTPATH','fpdf/font/'); 
  include "valida_cookie.php";
  include "conecta_mysql.inc";  
  mysql_query("SET NAMES UTF8");
  $busca = mysql_query("SELECT * FROM TBCIDADE ORDER BY CDCIDADE");
  $rel = new FPDF('P','cm','A4');
  $rel->AliasNbPages('{total}');
  $rel->SetAuthor("Sistema de Controle de Clientes Para Análise de Crédito - SCCAC");
  $rel->SetTitle("Relatório de Cidades");
  $rel->SetMargins(3,3,2);
  $rel->Open(); 
  $rel->AddPage('','',1);
  $rel->SetFont('Arial', 'B', 10);
  $rel->Cell(60, 5, 'Código da Cidade');
  $rel->SetX(35);
  $rel->Cell(20, 5, 'Cidade');
  $rel -> Write(0.5,'Hello World!');
  while ($resultado = mysql_fetch_array($busca)) 
  {    
    $rel->ln();   
    $rel->Cell(40, 5, $resultado['cdcidade']);    
    $rel->SetX(35);    
    $rel->Cell(60, 5, $resultado['nmcidade']);    
    $rel->SetX(50);   
  } 
 $rel->Output('teste.pdf','I'); 
?>
VALIDA COOKIE
<?PHP
  if(IsSet($_COOKIE["login_usuario"]))
   $login_usuario = $_COOKIE["login_usuario"];       
  if(IsSet($_COOKIE["senha_usuario"]))
    $senha_usuario = $_COOKIE["senha_usuario"];    
  if(!(empty($login_usuario) or empty($senha_usuario)))
  {
      include "conecta_mysql.inc";
      $resultado = mysql_query("SELECT * FROM tbusu WHERE login = '$login_usuario'");
      if(mysql_num_rows($resultado)==1)
      {
          if($senha_usuario!= mysql_result($resultado,0,"senha"))
          {
            setcookie("login_usuario");
            setcookie("senha_usuario");
            echo "Vocâ não efetuou o login.";
            exit;
          }
      }
      else
      {
           setcookie("login_usuario");
           setcookie("senha_usuario");
           echo "Vocâ não efetuou o login.";
           exit;
      }    
  }
  else
  {
    echo "Você não efetuou o login.";
    exit;
  }
 mysql_close($con);
?>
CONF.PHP
<?php
    $host = "localhost"; //Host onde a página se encontra
    $dbname = "sia"; //Nome do banco de dados q armazena os dados
    $user = "root"; //Nome do usuário q tem acesso ao banco de dados
    $pass = ""; //Senha do usuário q tem acesso ao banco de dados    
?>
CONECTA_MYSQL.INC
<?php        
  include "conf.php"; // inclui o arquivo conf.php        
  $con = mysql_connect($host,$user,$pass) or die ("Não foi possível a conexão com o servidor de banco de dados");  // ciar uma conexao com o banco de dados
  mysql_select_db($dbname) or die ("Não foi possível encontrar o banco de dados especificado"); 
?>

Mas emite a mensagem FPDF error: Some data has already been output, can't send PDF file. Sei que não pode haver espaços em branco, etc e etc. Mas ainda não consegui descobrir o erro.

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

2 respostass a esta questão

Posts Recomendados

  • 0
Tenho o seguinte relatório básico de cidades:

<?php
  ob_start();
  require_once("fpdf/fpdf.php"); 
  define('FPDF_FONTPATH','fpdf/font/'); 
  include "valida_cookie.php";
  include "conecta_mysql.inc";  
  mysql_query("SET NAMES UTF8");
  $busca = mysql_query("SELECT * FROM TBCIDADE ORDER BY CDCIDADE");
  $rel = new FPDF('P','cm','A4');
  $rel->AliasNbPages('{total}');
  $rel->SetAuthor("Sistema de Controle de Clientes Para Análise de Crédito - SCCAC");
  $rel->SetTitle("Relatório de Cidades");
  $rel->SetMargins(3,3,2);
  $rel->Open(); 
  $rel->AddPage('','',1);
  $rel->SetFont('Arial', 'B', 10);
  $rel->Cell(60, 5, 'Código da Cidade');
  $rel->SetX(35);
  $rel->Cell(20, 5, 'Cidade');
  $rel -> Write(0.5,'Hello World!');
  while ($resultado = mysql_fetch_array($busca)) 
  {    
    $rel->ln();   
    $rel->Cell(40, 5, $resultado['cdcidade']);    
    $rel->SetX(35);    
    $rel->Cell(60, 5, $resultado['nmcidade']);    
    $rel->SetX(50);   
  } 
 $rel->Output('teste.pdf','I'); 
?>
VALIDA COOKIE
<?PHP
  if(IsSet($_COOKIE["login_usuario"]))
   $login_usuario = $_COOKIE["login_usuario"];       
  if(IsSet($_COOKIE["senha_usuario"]))
    $senha_usuario = $_COOKIE["senha_usuario"];    
  if(!(empty($login_usuario) or empty($senha_usuario)))
  {
      include "conecta_mysql.inc";
      $resultado = mysql_query("SELECT * FROM tbusu WHERE login = '$login_usuario'");
      if(mysql_num_rows($resultado)==1)
      {
          if($senha_usuario!= mysql_result($resultado,0,"senha"))
          {
            setcookie("login_usuario");
            setcookie("senha_usuario");
            echo "Vocâ não efetuou o login.";
            exit;
          }
      }
      else
      {
           setcookie("login_usuario");
           setcookie("senha_usuario");
           echo "Vocâ não efetuou o login.";
           exit;
      }    
  }
  else
  {
    echo "Você não efetuou o login.";
    exit;
  }
 mysql_close($con);
?>
CONF.PHP
<?php
    $host = "localhost"; //Host onde a página se encontra
    $dbname = "sia"; //Nome do banco de dados q armazena os dados
    $user = "root"; //Nome do usuário q tem acesso ao banco de dados
    $pass = ""; //Senha do usuário q tem acesso ao banco de dados    
?>
CONECTA_MYSQL.INC
<?php        
  include "conf.php"; // inclui o arquivo conf.php        
  $con = mysql_connect($host,$user,$pass) or die ("Não foi possível a conexão com o servidor de banco de dados");  // ciar uma conexao com o banco de dados
  mysql_select_db($dbname) or die ("Não foi possível encontrar o banco de dados especificado"); 
?>
Mas emite a mensagem FPDF error: Some data has already been output, can't send PDF file. Sei que não pode haver espaços em branco, etc e etc. Mas ainda não consegui descobrir o erro.
Pesquisando na net achei esse comentário: "Estava dando o tempo todo mensagem de erro “FPDF error: Some data has already been output to browser, can’t send PDF file|” Eu sabia que não se tratava de espaço antes ou depois do script PHP porque estava trabalhando com um arquivo seco, bem básico, tirado do próprio manual e contendo apenas umas 6 linhas, muito fáceis de verificar. Após perder mais de um dia de tentativas frustradas, resolvi salvar o arquivo do scrip (feito no Notepad) como ANSI, não mais como UTF-8… E DEU CERTO! Só queria entender o que houve: por que UTF-8 fazia o FPDF insinuar que já havia sido enviada informação para o browser?" Mas não entendi o que ele quis dizer com salvar o script da forma como ele comentou. Quando retiro o ob_start() aparece essa mensagem: Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\SCCAC2\conecta_mysql.inc:5) in C:\xampp\htdocs\SCCAC2\fpdf\fpdf.php on line 1017 FPDF error: Some data has already been output, can't send PDF file
switch($dest)
    {
        case 'I':
            //Send to standard output
            if(ob_get_length())
                $this->Error('Some data has already been output, can\'t send PDF file');
            if(php_sapi_name()!='cli')
            {
                //We send to a browser
    linhda 1017 é essa            header('Content-Type: application/pdf');
                if(headers_sent())
                    $this->Error('Some data has already been output, can\'t send PDF file');
                header('Content-Length: '.strlen($this->buffer));
                header('Content-Disposition: inline; filename="'.$name.'"');
                header('Cache-Control: private, max-age=0, must-revalidate');
                header('Pragma: public');
                ini_set('zlib.output_compression','0');
            }
            echo $this->buffer;
            break;

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

  • 0
Tenho o seguinte relatório básico de cidades:

<?php
  ob_start();
  require_once("fpdf/fpdf.php"); 
  define('FPDF_FONTPATH','fpdf/font/'); 
  include "valida_cookie.php";
  include "conecta_mysql.inc";  
  mysql_query("SET NAMES UTF8");
  $busca = mysql_query("SELECT * FROM TBCIDADE ORDER BY CDCIDADE");
  $rel = new FPDF('P','cm','A4');
  $rel->AliasNbPages('{total}');
  $rel->SetAuthor("Sistema de Controle de Clientes Para Análise de Crédito - SCCAC");
  $rel->SetTitle("Relatório de Cidades");
  $rel->SetMargins(3,3,2);
  $rel->Open(); 
  $rel->AddPage('','',1);
  $rel->SetFont('Arial', 'B', 10);
  $rel->Cell(60, 5, 'Código da Cidade');
  $rel->SetX(35);
  $rel->Cell(20, 5, 'Cidade');
  $rel -> Write(0.5,'Hello World!');
  while ($resultado = mysql_fetch_array($busca)) 
  {    
    $rel->ln();   
    $rel->Cell(40, 5, $resultado['cdcidade']);    
    $rel->SetX(35);    
    $rel->Cell(60, 5, $resultado['nmcidade']);    
    $rel->SetX(50);   
  } 
 $rel->Output('teste.pdf','I'); 
?>
VALIDA COOKIE
<?PHP
  if(IsSet($_COOKIE["login_usuario"]))
   $login_usuario = $_COOKIE["login_usuario"];       
  if(IsSet($_COOKIE["senha_usuario"]))
    $senha_usuario = $_COOKIE["senha_usuario"];    
  if(!(empty($login_usuario) or empty($senha_usuario)))
  {
      include "conecta_mysql.inc";
      $resultado = mysql_query("SELECT * FROM tbusu WHERE login = '$login_usuario'");
      if(mysql_num_rows($resultado)==1)
      {
          if($senha_usuario!= mysql_result($resultado,0,"senha"))
          {
            setcookie("login_usuario");
            setcookie("senha_usuario");
            echo "Vocâ não efetuou o login.";
            exit;
          }
      }
      else
      {
           setcookie("login_usuario");
           setcookie("senha_usuario");
           echo "Vocâ não efetuou o login.";
           exit;
      }    
  }
  else
  {
    echo "Você não efetuou o login.";
    exit;
  }
 mysql_close($con);
?>
CONF.PHP
<?php
    $host = "localhost"; //Host onde a página se encontra
    $dbname = "sia"; //Nome do banco de dados q armazena os dados
    $user = "root"; //Nome do usuário q tem acesso ao banco de dados
    $pass = ""; //Senha do usuário q tem acesso ao banco de dados    
?>
CONECTA_MYSQL.INC
<?php        
  include "conf.php"; // inclui o arquivo conf.php        
  $con = mysql_connect($host,$user,$pass) or die ("Não foi possível a conexão com o servidor de banco de dados");  // ciar uma conexao com o banco de dados
  mysql_select_db($dbname) or die ("Não foi possível encontrar o banco de dados especificado"); 
?>
Mas emite a mensagem FPDF error: Some data has already been output, can't send PDF file. Sei que não pode haver espaços em branco, etc e etc. Mas ainda não consegui descobrir o erro.
Pesquisando na net achei esse comentário: "Estava dando o tempo todo mensagem de erro “FPDF error: Some data has already been output to browser, can’t send PDF file|” Eu sabia que não se tratava de espaço antes ou depois do script PHP porque estava trabalhando com um arquivo seco, bem básico, tirado do próprio manual e contendo apenas umas 6 linhas, muito fáceis de verificar. Após perder mais de um dia de tentativas frustradas, resolvi salvar o arquivo do scrip (feito no Notepad) como ANSI, não mais como UTF-8… E DEU CERTO! Só queria entender o que houve: por que UTF-8 fazia o FPDF insinuar que já havia sido enviada informação para o browser?" Mas não entendi o que ele quis dizer com salvar o script da forma como ele comentou. Quando retiro o ob_start() aparece essa mensagem: Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\SCCAC2\conecta_mysql.inc:5) in C:\xampp\htdocs\SCCAC2\fpdf\fpdf.php on line 1017 FPDF error: Some data has already been output, can't send PDF file
switch($dest)
    {
        case 'I':
            //Send to standard output
            if(ob_get_length())
                $this->Error('Some data has already been output, can\'t send PDF file');
            if(php_sapi_name()!='cli')
            {
                //We send to a browser
    linhda 1017 é essa            header('Content-Type: application/pdf');
                if(headers_sent())
                    $this->Error('Some data has already been output, can\'t send PDF file');
                header('Content-Length: '.strlen($this->buffer));
                header('Content-Disposition: inline; filename="'.$name.'"');
                header('Cache-Control: private, max-age=0, must-revalidate');
                header('Pragma: public');
                ini_set('zlib.output_compression','0');
            }
            echo $this->buffer;
            break;
RESOLVIDO Pesquisando muito, vi na internet um comentário dizendo que não deveria haver nenhum espaço em branco após a tag PHP. Como o erro era acusado no arquivo conecta_mysql.inc resolvi colocar o cursor após a tag PHP e deixar pressionado a tecla delete. Ou seja, não era possível ver os espaços após essa tag porque não havia mais código ali. Pelo visto havia espaços em branco porque funcionou após realizar esta operação. Como o espaço entre cada linha do relatório ficou bem grande e desnecessário alterei apenas as medidas para ficar melhor apresentado:
<?php
  //ob_start();
  define('FPDF_FONTPATH','fpdf/font/'); 
  require_once("fpdf/fpdf.php");   
  //$end_fpdf = "../fpdf"; 
  include "valida_cookie.php";
  include "conecta_mysql.inc";  
  mysql_query("SET NAMES UTF8");
  $busca = mysql_query("SELECT * FROM TBCIDADE ORDER BY CDCIDADE");
  $rel = new FPDF('P','cm','A4');
  $rel->AliasNbPages('{total}');
  $rel->SetAuthor("Sistema de Controle de Clientes Para Análise de Crédito - SCCAC");
  $rel->SetTitle("Relatório de Cidades");
  $rel->SetMargins(5,2,2);
  $rel->Open(); 
  $rel->AddPage('','',1);
  $rel->SetFont('Arial', 'B', 10);
  $rel->Cell(60, 1, 'Codigo da Cidade');
  $rel->SetX(10);
  $rel->Cell(20, 1, 'Cidade');
  while ($resultado = mysql_fetch_array($busca)) 
  {    
    $rel->ln();   
    $rel->Cell(40, 0.5, $resultado['cdcidade']);    
    $rel->SetX(10);    
    $rel->Cell(40, 0.5, $resultado['nmcidade']);    
    $rel->SetX(10);   
  } 
 $rel->Output('teste.pdf','I'); 
?>

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...