Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gard01

Grafico PDF (PHPLOT + FPDF) Erro

Recommended Posts

Pessoal, Boa noite!

 

Preciso de uma IMENSA ajuda com uma GIGANTESCA urgência...

 

Preciso montar relatórios em gráficos que são exportados para PDF...

 

1º Montar os graficos com o PHPLOT - OK Isso eu consegui.

 

2º Transferir ele para PDF com o FPDF, a que pegou, talvez a montagem do script esteja errada, segue:

 

 

grafPontos.php

<?php
//incluir o arquivo do phplot
include "../../Classes/phplot-6.2.0/phplot.php";

// Conecta com servidor MySQL
mysql_connect('localhost', 'root', "") or die(mysql_error());
// Conecta ao Banco MYSQL
mysql_select_db('banco') or die(mysql_error());


$sql = "SELECT COLABORADOR, sum(POUNTUACAO) as POUNTUACAO from RESULT_QUIZ";
$sql .= " group by COLABORADOR;";
$query =  mysql_query($sql);

$grafico = new PHPLOT(700,250); //defini as dimensões do grafico

$data = array();

while($ver=mysql_fetch_array($query))
{
$data[] = array($ver['COLABORADOR'],$ver['POUNTUACAO']);
}

$grafico->SetTitleColor('#404040'); // Cor do titulo do grafico

$titulo = utf8_decode("Pontuação por Usuário");
$grafico->SetTitle($titulo); // titulo do Grafico

$grafico->SetFileFormat("png"); //seleciona o formato de saida do grafico

$grafico->SetImageBorderType('plain'); // Define o estilo da borda

$grafico->SetBackgroundColor('YellowGreen'); // Define a cor de fundo do grafico

$grafico->SetplotType('bars'); // Seleciona o tipo do grafico, pode ser PIE, BARS, LINES e etc

$grafico->SetDataType('text-data');

$grafico->SetYDataLabelPos('plotin');

$grafico->SetDataValues($data);

$grafico->SetBackGroundColor("white");

$grafico->SetDataColors('SkyBlue');

$grafico->SetOutputFile('grafPontos.png');

$grafico->DrawGraph(); //gera o grafico
?>
PDFPontos.php

<?
 
 //gerar grafico
 include "grafPontos.php";
  
 //inclusão da classe fpdf
 include "../../Classes/fpdf17/fpdf.php";
  
  //criar um objeto para gerar o arquivo pdf
 $relPDF = new fpdf();
 
 // pagina no formato retrato (Portrait) , tipo A4
 $relPDF->addPage('P','A4');
  
  
 //setar um estilo de fonte, fonte verdana, estilo bold "negrito", tamanho 14
 $relPDF->setFont('Times','b','16');
 $titulo = utf8_decode('Relatório de Pontuação');
 $relPDF->Cell(0 , 0, $titulo , 0, 5, 'C');
  
  //espaço de 10 linhas;
  $relPDF->ln(5);
  
 //setar um estilo de fonte, fonte verdana, estilo bold "negrito", tamanho 14
 $relPDF->setFont('Times','b','14');
  
 //o método multicell permite escrever em varias linha sem quebrar a célula
  
 $texto = utf8_decode('Relatório bimestral com apresentação das vendas dos meses de Janeiro e Fevereiro. O gráfico abaixo apresenta os valores de cada mês dos vendedores Pedro e Paulo.');
 $relPDF->multicell(0, 5, $texto , 0 , 'J');
  
 //espaço de 10 linhas;
 $relPDF->ln(10);
  
 //imprime a imagem no arquivo PDF
 $relPDF->Image('grafPontos.png',60,30,null,null,'PNG');
  
  
  //espaço de 80 linhas;
  $relPDF->ln(80);
   
  $relPDF->setFont('Times','i','8');
   
  $autor= 'Marcelo Weihmayr';
  $blog = 'http://ubuntuiniciantes.blogspot.com';
  $faceboock ='http://www.facebook.com/iniciantes.doubuntu';
  $twitter = 'https://twitter.com/'; 
   
  $relPDF->cell(0, 5, 'Autor: '.$autor, 0 , 5,'R');
  $relPDF->cell(0, 5, 'Blog : '.$blog, 0 , 5,'R');
  $relPDF->cell(0, 5, 'Facebook : '.$faceboock, 0 , 5,'R');
  $relPDF->cell(0, 5, 'Twitter  : '.$twitter, 0 , 5,'R');
  
 // saida para downlod do arquivo
 $relPDF->output();
 ?>
Resultado:

PHP Warning: fopen(grafPontos.png) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: No such file or directory in E:\Domains\mscmarket.com.br\wwwroot\Classes\fpdf17\fpdf.php on line 1232

Linha 1232 do FPDF ($f = fopen($file,'rb') ;)

function _parsepng($file)
{
	// Extract info from a PNG file
	$f = fopen($file,'rb');
	if(!$f)
		$this->Error('Can\'t open image file: '.$file);
	$info = $this->_parsepngstream($f,$file);
	fclose($f);
	return $info;
}
Preciso MT MT MT MT da ajuda de vocês, a apresentação do meu tcc é Terça-feira :/

 

 

Grato desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

O próprio erro já diz, ele não consegue encontrar o arquivo.

 

Hehehe..

 

Complementando, agora ele encontra a imagem, mas retorna o grafico no html e não em PDF, sabe porque?

 

Grato amigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O próprio erro já diz, ele não consegue encontrar o arquivo.

 

 

​Vlwwww

Agora tenho outro problema :/

Quando eu coloco:

$relPDF->Image('../../Paginas/relatorios/grafPontos.php','grafPontos.png',60,30,null,null,'PNG');

 

Ele retorna:

FPDF error: Unsupported image type: php

 

Agora, quando eu mudo para .png ele diz:

PHP Warning: fopen(../../Paginas/relatorios/grafPontos.png) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: No such file or directory in E:\Domains\mscmarket.com.br\wwwroot\Classes\fpdf17\fpdf.php on line 1232

 

 

Busquei uma imagem no google, coloquei o link e funcionou, será que o problema poderia ser com o output do Grafico?

<?php
//incluir o arquivo do phplot
include "../../Classes/phplot-6.2.0/phplot.php";

// Conecta com servidor MySQL
mysql_connect('localhost', 'root', "") or die(mysql_error());
// Conecta ao Banco MYSQL
mysql_select_db('banco') or die(mysql_error());


$sql = "SELECT COLABORADOR, sum(POUNTUACAO) as POUNTUACAO from RESULT_QUIZ";
$sql .= " group by COLABORADOR;";
$query = mysql_query($sql);

$grafico = new PHPLOT(700,250); //defini as dimensões do grafico

$data = array();

while($ver=mysql_fetch_array($query))
{
$data[] = array($ver['COLABORADOR'],$ver['POUNTUACAO']);
}

$grafico->SetTitleColor('#404040'); // Cor do titulo do grafico

$titulo = utf8_decode("Pontuação por Usuário");
$grafico->SetTitle($titulo); // titulo do Grafico

$grafico->SetFileFormat("png"); //seleciona o formato de saida do grafico

$grafico->SetImageBorderType('plain'); // Define o estilo da borda

$grafico->SetBackgroundColor('YellowGreen'); // Define a cor de fundo do grafico

$grafico->SetplotType('bars'); // Seleciona o tipo do grafico, pode ser PIE, BARS, LINES e etc

$grafico->SetDataType('text-data');

$grafico->SetYDataLabelPos('plotin');

$grafico->SetDataValues($data);

$grafico->SetBackGroundColor("white");

$grafico->SetDataColors('RoyalBlue2');

$grafico->SetOutputFile('grafPontos.png');

$grafico->DrawGraph(); //gera o grafico
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, o problema não é com o phplot. Você tem que saber passar os parâmetros, depois de gerar o gráfico, montar o resultado em uma variável pra ser gerado o PDF.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Alvaro_php
      Pessoal boa noite
      Tenho um sistema em Visual Basic 6 que utiliza um documento do Word que é enviado para as empresas, onde tenho algumas flags que são utilizadas para colocar no nome da empresa e endereço e que são enviadas via email

      Estou conseguindo converter esse documento do WORD em PDF sem problemas
      Private Sub ConverterWordParaPDF()

          On Error GoTo TrataErro
          Dim ObjWord2 As Word.Application
          Dim ObjWordDoc2 As Word.Document
          
          Set ObjWord2 = CreateObject('Word.Application')
          ObjWord2.Visible = False
          ObjWord2.DisplayAlerts = wdAlertsNone

          Set ObjWordDoc2 = ObjWord2.Documents.Open(App.Path + '\Documento.doc', True, True, False, Replace(Replace(Replace(Replace(Rs(1), '/', ''), '-', ''), '.', ''), '_', ''))

          ObjWordDoc2.ExportAsFixedFormat OutputFileName:= _
          App.Path + '\Documento.pdf', ExportFormat:=wdExportFormatPDF, _
          OpenAfterExport:=False, OptimizeFor:=wdExportOptimizeForPrint, Range:= _
          wdExportAllDocument, from:=1, To:=1, Item:=wdExportDocumentContent, _
          IncludeDocProps:=True, KeepIRM:=True, CreateBookmarks:= _
          wdExportCreateNoBookmarks, DocStructureTags:=True, BitmapMissingFonts:= _
          True, UseISO19005_1:=False
              
          ObjWord2.Visible = False
          ObjWord2.Quit (False)
          Set ObjWord2 = Nothing
      Exit Sub
      TrataErro:
        msgbox 'Erro ao converter o documento'
      End Sub

      Porém a senha que coloquei no word, não está ficando no arquivo pdf após a conversão, e também não achei nenhuma opção para incluir uma senha nesse novo arquivo

      Não estou usando o Crystal e o documento do word é um documento qualquer que o cliente usa, por isso que não da para utilizar o crystal

      Alguém sabe como que eu poderia fazer essa conversão e colocar a senha nesse novo arquivo ou teria alguma outra forma de converter esse documento para pdf que desse para colocar a senha

      Desde já agradeço a todos
    • Por Kefatif
      Prezados, boa tarde!
       
      Em uma tela faço o envio de arquivos PDF para uma pasta reservada para isso.
       
      Estou tendo dificuldade para criar um botão de download na tela de consultas, quando abro a página de consulta ele está me mostrando a seguinte mensagem: "Notice: Undefined variable: row in C:\xampp\htdocs\plataforma\indicadores\consultar.php on line 126"
       
      Podem me ajudar?
       
      <?php include_once 'autenticacao.php'; include_once'../conexao.php'; ?> <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="author" content=""> <title>Envio de Ata</title> <link href="../css/estilo.css" rel="stylesheet"> <!-- Bootstrap Core CSS --> <link href="../css/bootstrap.css" rel="stylesheet"> <!-- Custom CSS --> <link href="../css/modern-business.css" rel="stylesheet"> <!-- Custom Fonts --> <link href="../font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> <script src="../js/jquery.min.js"></script> </head> <body> <?php include_once 'nav-menu1.php'; ?> <!-- Page Content --> <div class="container" style="width: 90%"> <?php include_once 'cabecalho.php'; ?> <div class="row"> <?php include_once 'barra-lateral.php'; ?> <!-- Content Column --> <div class="col-md-9" style="width: 80%"> <h4><b>CONSULTAR UNIDADE</b></h4> <form class="form-inline" action="consultar.php" autocomplete="off" method="get"> <div id="form-callcenter"> <label style="width: 30%"> <input type="text" name="nome" class="form-control" placeholder="Digite o nome da unidade" style="width: 100%"> </label> <input type="submit" readonly value="Pesquisar" class="btn btn-primary"> </div> </form> <?php if (isset($_GET["nome"]) ) { $nome = $_GET["nome"]; include_once '../funcoes.php'; $sql = "select A.dt_envio, A.unidade, A.responsavel, A.observacao, A.anexo from controle_ata A where A.unidade like '%".$nome."%' order by A.dt_envio desc"; $result = mysqli_query($con, $sql); if (mysqli_num_rows($result) > 0) { ?> <table class="table table-hover table-bordered" id="tabela-dispensacao2"> <tr> <th>Unidade</th> <th>Data do envio</th> <th>Responsável</th> <th>Observação</th> <th>Ata</th> <th>Download</th> </tr> <?php if($row["anexo"] == ''){ $cor = "red"; }else{ $cor = "blue"; } while ($row = mysqli_fetch_array($result)){ foreach($row as $key => $values){ $row[$key]= utf8_encode($values); } ?> <tr> <td><?php echo $row["unidade"]?></td> <td><?php echo dataTela($row["dt_envio"]); ?></td> <td><?php echo $row["responsavel"]; ?></td> <td><?php echo $row["observacao"] ?></td> <td><?php echo $row["anexo"] ?></td> <td><a class="<?php if($row["ANEXO"] == ''){echo "link-nao-ativo";}?>" href='anexos/<?php echo $row["ANEXO"] ?>' target="_blank"> <i style="color:<?php echo $cor ?>" class="glyphicon glyphicon-download-alt"></i> </a> </td> </tr> <?php }//ENCERRANDO O WHILE ?> </table> <?php }else{ echo "Nenhuma unidade encontrada!<br>"; } } ?> <?php mysqli_close($con); ?> </div> </div> <!-- /.row --> </div> <!-- /.container --> <!-- jQuery --> <script src="../js/jquery.js"></script> <!-- Bootstrap Core JavaScript --> <script src="../js/bootstrap.min.js"></script> </body> </html>  
       
      Agradeço a ajuda desde já!
    • Por Mauricio Molina
      Ola pessoal,
       
      Alguém pode de dar uma força.
       
      Estou trabalhando em um dashbord baseado em boostrap, estou deixando ele bastante dinâmico, e nele coloquei um gráfico de rosca, o problema que não manjo como fazer o JS buscar os dados de forma dinâmica no banco de dados.
       
      HTML:
      <!-- Grafico --> <div class="card-body"> <div class="chart-pie pt-4 pb-2"> <canvas id="myPieChart"></canvas> </div> <div class="mt-4 text-center small"> <span class="mr-2"> <i class="fas fa-circle text-primary"></i> Anúncio </span> <span class="mr-2"> <i class="fas fa-circle text-success"></i> Site </span> <span class="mr-2"> <i class="fas fa-circle text-info"></i> Outros </span> </div> </div> </div> </div> </div> JS:
      // Set new default font family and font color to mimic Bootstrap's default styling Chart.defaults.global.defaultFontFamily = 'Nunito', '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif'; Chart.defaults.global.defaultFontColor = '#858796'; // Pie Chart Example var ctx = document.getElementById("myPieChart"); var myPieChart = new Chart(ctx, { type: 'doughnut', data: { labels: ["Anuncio", "Site", "Outros"], datasets: [{ data: [55, 30, 15], // *os dados deverão ser impressos aqui* backgroundColor: ['#4e73df', '#1cc88a', '#36b9cc'], hoverBackgroundColor: ['#2e59d9', '#17a673', '#2c9faf'], hoverBorderColor: "rgba(234, 236, 244, 1)", }], }, options: { maintainAspectRatio: false, tooltips: { backgroundColor: "rgb(255,255,255)", bodyFontColor: "#858796", borderColor: '#dddfeb', borderWidth: 1, xPadding: 15, yPadding: 15, displayColors: false, caretPadding: 10, }, legend: { display: false }, cutoutPercentage: 80, }, }); Os dados precisam ser somados a cada cadastro no BD, sou seja, a cada cadastro o cliente indicara que a OS veio de um anuncio por exemplo, os campos deveram somar quantas OS vieram de anuncio, site e outros.
       
      Obrigado!
       
       
    • Por Mauricio Molina
      Ola pessoal,
       
      Estou com probleminha, preciso gerar um PDF de alguns dados do BD, até consegui gerar o PDF (quando especifico o id), mas preciso que ao clicar no botão corresponde de uma lista de ordem de serviço, o PDF seja gerado de acordo com o ID da ordem de serviço.
       

       
      Botão:
      <a type="button" class="btn btn-sm btn-info" href="gerar_pdf.php?id=<?php echo $rows_cursos['id']; ?>" target="_blank" >PDF</a> Gerar PDF:
      <?php include ('pdf/mpdf.php'); include_once("../conexao/conexao.php"); //Criar a conexão $conn = mysqli_connect($servidor, $usuario, $senha, $dbname); if(!$conn){ die("Falha na conexao: " . mysqli_connect_error()); }else{ //echo "Conexao realizada com sucesso"; } $id = '17'; //***Aqui seria onde busca o ID da Ordem de Serviço*** $result_usuario = "SELECT * FROM ordem_servico WHERE id = '$id' LIMIT 1"; $resultado_usuario = mysqli_query($conn, $result_usuario); $row_usuario = mysqli_fetch_assoc($resultado_usuario); $pagina = "<html> <body> <h2>Ordem de Serviço Eletrobrastec</h2><p></p> <strong>Empresa:</strong> Eletrobrastec                                          <strong>Data:</strong> ".$row_usuario['date']."              <strong>Número OS:</strong> ".$row_usuario['id']." <p></p> <strong>Edereço:</strong> Rua Santo Agostinho, 860            <strong>Bairro:</strong> Caiçara        <strong>Cidade:</strong> Praia Grande       <strong>UF:</strong> SP <p></p> <strong>CNPJ:</strong> 288.880.270/0018-1         <strong>DD:</strong> 13         <strong>Telefone:</strong> 99757-6400 <hr> <h2>Dados do Cliente</h2> <p></p> <strong>Nome:</strong> ".$row_usuario['nome']."                                          <strong>Data Execução:</strong> _______________________ <p></p> <strong>DD:</strong> ".$row_usuario['dd']."                       <strong>Telefone:</strong> ".$row_usuario['telefone']."               <strong>E-mail:</strong> ".$row_usuario['email']." <p></p> <strong>CPF:</strong> ".$row_usuario['cpf']."               <strong>CNPJ:</strong> ".$row_usuario['cnpj']." <p></p> <strong>Aparelho:</strong> ".$row_usuario['aparelho']."                 <strong>Modelo:</strong> ".$row_usuario['modelo']."                  <strong>Defeito:</strong> ".$row_usuario['defeito']." <p></p> <strong>Taxa:</strong> _______________________                       <strong>Valor Total:</strong> ".$row_usuario['v_total']." <p></p> <strong>Descrição Serviço:</strong> ".$row_usuario['desc_servico']." <p></p><p></p><p></p><p></p><p></p><p></p><p></p> <strong>Observações:</strong> _____________________________________________________________________________________________________ _____________________________________________________________________________________________________ _____________________________________________________________________________________________________ _____________________________________________________________________________________________________ _____________________________________________________________________________________________________ _____________________________________________________________________________________________________ <p></p><p></p><p></p><p></p> <label>*A taxa de visita apenas será cobrada caso o cliente não realize o serviço, caso não queira e posteriormente venha realizar, a mesma será descontada.<label> </body> </html> "; $arquivo = "ordemservico.pdf"; $mpdf = new mPDF(); $mpdf->WriteHTML($pagina); $mpdf->Output($arquivo, 'I'); // I - Abre no navegador // F - Salva o arquivo no servido // D - Salva o arquivo no computador do usuário ?> Neste caso percebem que esta sendo gerado um PDF com a ordem de serviço de ID 17, tudo correto, porem gostaria que neste item, fosse gerado de acordo com o botão clicado.
       
      $id = '17'; //***Aqui seria onde busca o ID da Ordem de Serviço*** $result_usuario = "SELECT * FROM ordem_servico WHERE id = '$id' LIMIT 1"; $resultado_usuario = mysqli_query($conn, $result_usuario); $row_usuario = mysqli_fetch_assoc($resultado_usuario);  
      Alguém pra dar uma força?
       
      Obrigado!
       
       
    • Por Kefatif
      Prezados, bom dia.
       
      Tenho uns um sistema com uns relatórios em PDF na pasta do meu domínio onde chamo pelo comando abaixo:

                 
      <div class="row">             <div class="col-md-4 img-portfolio">                 <a href="relatorios/teste.pdf" target="_blank">                 <img class="img-responsive img-hover" src="../img/jan-700x400.jpg" alt=""></a><h3>                 <center><a href="relatorios-teste/relatorios-producao.php">Janeiro/2021</a></center></h3>             </div>  
      Mas se uma pessoa acessar o PDF, copiar o link e enviar para uma outra pessoa que não tem acesso ao sistema, essa pessoa não autorizada terá acesso a esses relatórios, existe alguma forma para restringir esse acesso?
       
      Uso a autenticação da seguinte forma.
       
      Arquivo "Autenticação":
       
      <?php session_start(); //se não(!) existir a sessao login if(!isset($_SESSION["nome"])){ session_destroy(); $msg = "Acesso negado!"; header("location:../login.php?msg=".$msg); }elseif( $_SESSION["perfil"] != 'relatorios' ){ $msg = "Acesso negado!"; header("location:../painel.php?msg=".$msg); } ?>  
       
      Agradeço a todos desde já.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.