Ir para conteúdo

POWERED BY:

Arquivado

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

JRRC

Transformar página PHP para PDF

Recommended Posts

Bom dia a todos do iMasters.

 

Bom pessoal meu problema é o seguinte, tenho uma página em PHP que preenche os dados de seus campos através de consultas SQL,e stá pagina está funcionando perfeitamente.

 

No entanto, preciso transforma-la em uma página PDF, tentei fazer isso só que não tive sucesso, quando tento acessar a página que é para impressão aparece a seguinte mensagem de ERRO abaixo:

 

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 1572864 bytes) in D:\VertrigoServ\www\safen\dompdf\lib\class.pdf.php(2219) : eval()'d code on line 5914

 

Alguém sabe me dizer o que tenho que modificar para esse ERRO ser corrigido ?!

 

O link onde clico para abrir a pagina que é para ser transformada em PDF é o seguinte abaixo.

 

<div><a href="index.php?link=53&codigo=<?php echo $codigo?>">Versão para Impressão</a></div>

 

A variavel '$codigo' pega o ID do cliente que é para ser impresso.

 

Minha página que está em PHP que é para se transformar em PDF é a seguinte abaixo

 

<?php
if ($nivel == "10AF9BC" || $nivel == "20CDE999")
{	
require_once "./conexao.php";

$codigo = $_GET["codigo"];

$sql = "SELECT cc.*, cli.nome AS cliente, cli.peso AS peso, cli.altura AS altura, cli.datanasc AS datanasc, cli.sexo AS sexo, func.nome AS funcionario 
		FROM compcorporal AS cc INNER JOIN cliente AS cli ON cli.id = cc.cliente_id
		INNER JOIN funcionario AS func ON func.id = cc.funcionario_id AND cc.id = '$codigo'";
$resultado = mysql_query($sql);
$linha = mysql_fetch_array($resultado);

$cliente		= $linha[cliente];
$peso			= $linha[peso];
$altura			= $linha[altura];
$sexo			= $linha[sexo];
$funcionario	= $linha[funcionario];
$laudo			= $linha[laudo];
$dataava	    = $linha[dataava];
$datanasc	    = $linha[datanasc];

if(mysql_num_rows($resultado) != "")
{		
function CalcularIdade($datanasc,$formato,$separador)
{
	//Data data de nascimento
	$datanasc = explode($separador, $datanasc);

if ($data1>$data2)
{
   return " ";
}

$ano = $datanasc[0];
$mes = $datanasc[1];
$dia = $datanasc[2];

$dia_nasc = $dia;
$mes_nasc = $mes;
$ano_nasc = $ano;

$dia_hoje = date("d");
$mes_hoje = date("m");
$ano_hoje = date("Y");

$dif_ano = $ano_hoje - $ano_nasc;
$dif_mes = $mes_hoje - $mes_nasc;
$dif_dia = $dia_hoje - $dia_nasc;

if ( ($dif_mes == 0) && ($dia_hoje < $dia_nasc) ) 
{
   $dif_dia = ($data1 - $dia_nasc) + $dia_hoje;
   $dif_mes = 11;
   $dif_ano--;
} 
elseif ($dif_mes < 0) 
{
   $dif_mes = (12 - $mes_nasc) + $mes_hoje;
   $dif_ano--;
   if ($dif_dia<0)
   {
	  $dif_dia = ($data1 - $dia_nasc) + $dia_hoje;
	  $dif_mes--;
   }
} 
elseif ($dif_dia < 0) 
{
   $dif_dia = ($data1 - $dia_nasc) + $dia_hoje;
   if ($dif_mes>0) 
   {
	  $dif_mes--;
   }
}

return $dif_ano;

 }

 $idade =  CalcularIdade($datanasc,"dma","-");

$html ='
<html>
<body>
<div class="titulo_content">
<h1>Dados da Composicao Corporal</h1>
</div>
<br />
<?php require_once "avaliacao/cadastrar-compcorporal-bd.php";?>
<form id="formcc" name="formcc" method="post" action="">
<input name="id_funcionario" type="hidden" value="<?php echo $_SESSION["id"];?>" />
<div id="mae-form"> <!-- Inicio DIV mae-form -->

<div id="nome-campo">Avaliador:</div>
<div id="input-campo"><?php echo $funcionario ?></div>

<div id="nome-campo">Cliente:</div>
<div id="input-campo"><?php echo $cliente ?></div>

<div id="nome-campo">Peso:</div>
<div id="input-campo"><?php echo $peso ?> Kg
 <div id="sobre-campo">Altura: </div><?php echo $altura ?> Metros 
</div>

<div id="nome-campo">Data da Avaliação:</div>
<div id="input-campo"><?php $dataava = explode("-","$dataava"); $dataava = "$dataava[2]/$dataava[1]/$dataava[0]"; echo $dataava; ?></div>

<div id="nome-campo">Idade:</div>
<div id="input-campo"><?php echo $idade ?></div>

<div id="nome-campo">Sexo:</div>
<div id="input-campo"><?php echo $sexo ?></div>

<div id="nome-campo-label"> <!-- Inicio DIV nome-campo-label -->
<div id="grafico-comcorp-divisao-esquerdo"> <!-- Inicio DIV grafico-comcorp-divisao-esquerdo -->
	<div id="grafico-comcorp-imagem-mm">
		<h2><?php echo $linha["mm"];?></h2>
		<img src="imagens/img01.png" height="<?php if ($linha["mm"] > 0) {echo $linha["mm"]*2.017;} else {echo $linha["mm"]*(-2.017);}?>" width="60px"/>
	</div>

	<div id="grafico-comcorp-imagem-pid">
		<h2><?php echo $linha["pid"];?></h2>
		<img src="imagens/img02.png" height="<?php  if ($linha["pid"] > 0) {echo $linha["pid"]*2.017;} else {echo $linha["pid"]*(-2.017);}?>" width="60px"/>
	</div>

	<div id="grafico-comcorp-imagem-pg">
		<h2><?php echo $linha["pg"];?></h2>
		<img src="imagens/img03.png" height="<?php if ($linha["pg"] > 0) {echo $linha["pg"]*2.017;} else {echo $linha["pg"]*(-2.017);} ?>" width="60px"/>
	</div>

	<div id="grafico-comcorp-imagem-mg">
		<h2><?php echo $linha["mg"];?></h2>
		<img src="imagens/img04.png" height="<?php if ($linha["mg"] > 0) {echo $linha["mg"]*2.017;} else {echo $linha["mg"]*(-2.017);} ?>" width="60px"/>
	</div>

	<div id="grafico-comcorp-imagem-oe">
		<h2><?php echo $linha["oe"];?></h2>
		<img src="imagens/img05.png" height="<?php if ($linha["oe"] > 0) {echo $linha["oe"]*2.017;} else {echo $linha["oe"]*(-2.017);} ?>" width="60px"/>
	</div>
</div> <!-- Fim DIV grafico-comcorp-divisao-esquerdo -->

<div id="grafico-comcorp-divisao-direito"> <!-- Inicio DIV grafico-comcorp-divisao-direito -->
	Laudo pré-estabelecido durante o processo de avaliação:<br />
	<div id="campo-text-area">
  <textarea name="laudo" cols="45" rows="4" disabled="disabled" id="laudo"><?php echo $laudo ?></textarea></div>
</div> <!-- Fim DIV grafico-comcorp-divisao-direito -->
</div> <!-- Fim DIV nome-campo-label -->

			<!-- 
			#############################
			#############################
			### Botões para operações ###
			#############################
			#############################    
			-->

<div id="operacoes-botoes"> <!-- Inicio DIV operacoes-botoes -->
<div id="operacoes-botoes-meio"> <!-- Inicio DIV operacoes-botoes-meio -->
	<br />
	<input name="voltar" type="button" class="submit" id="voltar" value="Voltar" onclick="history.go(-1)"/>
</div> <!-- Fim DIV operacoes-botoes-meio -->
</div> <!-- Fim DIV operacoes-botoes -->

</div> <!-- Fim DIV mae-form -->
<div id="both"></div>
</form>
</html>
</body>';
}
 else
 { 
echo "<div id=\"pag_erro\"><img src='imagens/ok.gif' width='16' height='16' valign='middle'/>  <strong>ID</strong> $msg_id.</div>
<script language=\"javascript\"> 
window.setTimeout(\"history.go(-1)\", 5000); 
</script> 
";}
} 
else
{
echo "<div id=\"pag_erro\"><img src='imagens/erro.gif' width='16' height='16' valign='middle'/>  <strong>Você</strong> $msg_erro.</div>
	<script language=\"javascript\"> 
		window.setTimeout(\"history.go(-1)\", 5000); 
	</script>";	

}

require_once("./dompdf/dompdf_config.inc.php");

$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->set_paper('letter', 'landscape');
$dompdf->render();
$dompdf->stream("exame-composicao-corporal.pdf");
?>

 

Alguém sabe me dizer aonde que estou ERRANDO ?!

Desde de já obrigado pela ajuda de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não está errando em nenhum ponto, o que acontece é que o teu script está estourando o limite máximo de memória com o qual o servidor está configurado para funcionar, tente aumentar esse limite com:

ini_set("memory_limit","XXM");

 

Onde XX é o valor da quantida de memória que você deseja alocar nesse script, se for em um servidor de produção (em um host compartilhado), provavelmente isso não vá funcionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não está errando em nenhum ponto, o que acontece é que o teu script está estourando o limite máximo de memória com o qual o servidor está configurado para funcionar, tente aumentar esse limite com:

ini_set("memory_limit","XXM");

 

Onde XX é o valor da quantida de memória que você deseja alocar nesse script, se for em um servidor de produção (em um host compartilhado), provavelmente isso não vá funcionar.

 

Aonde que tenho que add essa linha ai ?! o_O

 

No php.ini ?! No arquivo onde ele está dando erro ?!

 

Desde de já obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No arquivo que está estourando o limite de memória.

 

Opaa.. o ERRO anterior sumiu agora está aparecendo este aqui Unable to stream pdf: headers already sent

 

Sabe me dizer do que se trata :S .. concerta um aparece outro.

É fod'zz

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está dizendo que o cabeçalho (header) já fó enviado, logo não dá pra exibir a jenala de download do arquivo (já que isso é feito com o header).

 

Tenta colocar o ob_start() no topo do script para ver se funcionar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está dizendo que o cabeçalho (header) já fó enviado, logo não dá pra exibir a jenala de download do arquivo (já que isso é feito com o header).

 

Tenta colocar o ob_start() no topo do script para ver se funcionar...

 

Fiz isso mais o ERRO continua. Dei uma rápida pesquisa aqui na net e o kra que fez um tuto sobre o dompdf disse "No arquivo de geração do PDF não deve possuir headers html's ok?"

 

Que tipo de headers seriam esses ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

header é o cabeçalho enviado para o navegador, quando você manda imprimir qualquer coisa na tela o cabeçalho é enviado, ou seja, se no seu arquivo estiver sendo enviado qualquer coisa para ser mostrada na tela ANTES da geração do PDF, vai dar esse erro...

Compartilhar este post


Link para o post
Compartilhar em outros sites

header é o cabeçalho enviado para o navegador, quando você manda imprimir qualquer coisa na tela o cabeçalho é enviado, ou seja, se no seu arquivo estiver sendo enviado qualquer coisa para ser mostrada na tela ANTES da geração do PDF, vai dar esse erro...

 

Acho que entendi.

 

A estrutura do sistema que tenho aqui é que ele é dividido em "topo" "menu" "meio" "rodape".

 

Da forma que está estou chamando o arquivo para impressão na página do meio, ou seja, abaixo das partes topo e menu, e nesse outros dois arquivos acima possui tag "html".. o ERRO pode ser devido a isso ?!

 

Abaixo está o codigo do meu de meu topo

 

<?php 
session_start();
include "conexao.php";
header("Content-Type: text/html; charset=ISO-8859-1", true);
$end	  = "http-~~-//localhost/safen";
$nivel	  = $_SESSION["nivel"];
$msg_alt  = "alterado com sucesso.";
$msg_add  = "cadastrado com sucesso.";
$msg_adda = "cadastrada com sucesso.";
$msg_erro = "não tem permissão para acessar está página.";
$msg_pag  = "realizado com sucesso.";
$msg_sist = "já cadastrado no sistema.";
$msg_id   = "não cadastrado no sistema";
?>

<!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=ISO-8859-1" />
<title>SAFEN v1.0 - Sistema de Avaliação Fisica e Nutricional</title>
<link rel="stylesheet" type="text/css" href="css/layout_geral.css" />
<link href="<?php echo "$end";?>/css/paginacao.css" rel="stylesheet" type="text/css" />
<link href="<?php echo "$end";?>/css/calendario.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" href="<?php echo "$end";?>/css/droplinetabs.css" />
<link rel="stylesheet" type="text/css" href="<?php echo "$end";?>/css/formularios.css" />
<link rel="stylesheet" type="text/css" href="<?php echo "$end";?>/css/jquery.autocomplete.css" />

<!--[if lt IE 7]> <link rel="stylesheet" type="text/css" href="<?php echo "$end";?>/css/formularios-ie-6.css" /> <![endif]-->

<!--[if lt IE 7]> <script src="<?php echo "$end";?>/js/ie7.js" type="text/javascript"></script> <![endif]-->

<script type="text/javascript" src="<?php echo "$end";?>/js/jquery-1.3.2.js"></script>

<script type="text/javascript" src="<?php echo "$end";?>/js/jquery.bgiframe.min.js"></script>
<script type="text/javascript" src="<?php echo "$end";?>/js/jquery.ajaxQueue.js"></script>
<script type="text/javascript" src="<?php echo "$end";?>/js/thickbox-compressed.js"></script>
<script type="text/javascript" src="<?php echo "$end";?>/js/jquery.autocomplete.js"></script>
<script type="text/javascript" src="<?php echo "$end";?>/js/localdata.js"></script>

<script src="<?php echo "$end";?>/js/droplinemenu.js" type="text/javascript"></script>
<script type="text/javascript">
//build menu with DIV ID="myslidemenu" on page:
droplinemenu.buildmenu("droplinetabs1")
</script>

<script type="text/javascript" src="<?php echo "$end";?>/js/soNums.js"></script>
<script type="text/javascript" src="<?php echo "$end";?>/js/is_palavras.js"></script>
<script type="text/javascript" src="<?php echo "$end";?>/js/jquery.quicksearch.js"></script>
<script type="text/javascript" src="<?php echo "$end";?>/js/calendar.js"> </script>
<script type="text/javascript" src="<?php echo "$end";?>/js/calendar-br.js"> </script>
<script type="text/javascript" src="<?php echo "$end";?>/js/calendar-setup.js"> </script>
<script type="text/javascript" src="<?php echo "$end";?>/js/jquery.maskedinput-1.1.4.js"> </script>

<link rel="shortcut icon" type="image/x-icon" href="imagens/safen.png">
</head>
<body>
<div id="layout_geral">
<div id="topo_layout"></div>

Compartilhar este post


Link para o post
Compartilhar em outros sites

É, assim não vai funcionar, você pode chamar a página que gera o PDF em um link à parte, assim o próprio navegador quando detectar que se trata de um download vai exibir a jenala de download e fechar a janela que foi aberta à parte...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Copiei todos os arquivos que ficavam soltos e transformei em uma única página.

 

Já esta fazendo o download do arquivo PDF mais invés de vim o que desejo vem o seguinte erro abaixo/:

 

Parse error: syntax error, unexpected 'D:\VertrigoServ\www\safen\dompdf\include\dompdf.cls.php(277) : eval()'d code on line 169

 

Sabe me dizer que erro que é esse ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Minha página para impressão o código está da seguinte forma abaixo:

 

<?php 
ob_start();
ini_set("memory_limit","16M");
session_start();
include "../conexao.php";
header("Content-Type: text/html; charset=ISO-8859-1", true);
$end	  = "http://localhost/safen";
$nivel	  = $_SESSION["nivel"];
$msg_alt  = "alterado com sucesso.";
$msg_add  = "cadastrado com sucesso.";
$msg_adda = "cadastrada com sucesso.";
$msg_erro = "não tem permissão para acessar está página.";
$msg_pag  = "realizado com sucesso.";
$msg_sist = "já cadastrado no sistema.";
$msg_id   = "não cadastrado no sistema";

$html=$_GET[html];
$html='
<!-- Inicio topo.php -->
<!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=ISO-8859-1" />
<title>SAFEN v1.0 - Sistema de Avaliação Fisica e Nutricional</title>
<link rel="stylesheet" type="text/css" href="css/layout_geral.css" />

<link rel="stylesheet" type="text/css" href="<?php echo "$end";?>/css/formularios.css" />


<!--[if lt IE 7]> <link rel="stylesheet" type="text/css" href="<?php echo "$end";?>/css/formularios-ie-6.css" /> <![endif]-->

<!--[if lt IE 7]> <script src="<?php echo "$end";?>/js/ie7.js" type="text/javascript"></script> <![endif]-->

<script type="text/javascript" src="<?php echo "$end";?>/js/jquery-1.3.2.js"></script>
<script src="<?php echo "$end";?>/js/droplinemenu.js" type="text/javascript"></script>
<script type="text/javascript">
//build menu with DIV ID="myslidemenu" on page:
droplinemenu.buildmenu("droplinetabs1")
</script>
</head>
<body>
<div id="layout_geral">
<div id="topo_layout"></div> 
<!-- FIM topo.php -->

<!-- Inicio Exame Composição Corporal -->

<?php

	$codigo = $_GET["codigo"];

	$sql = "SELECT cc.*, cli.nome AS cliente, cli.peso AS peso, cli.altura AS altura, cli.datanasc AS datanasc, cli.sexo AS sexo, func.nome AS funcionario 
			FROM compcorporal AS cc INNER JOIN cliente AS cli ON cli.id = cc.cliente_id
			INNER JOIN funcionario AS func ON func.id = cc.funcionario_id AND cc.id = "$codigo"";
	$resultado = mysql_query($sql);
	$linha = mysql_fetch_array($resultado);

	$cliente		= $linha[cliente];
	$peso			= $linha[peso];
	$altura			= $linha[altura];
	$sexo			= $linha[sexo];
	$funcionario	= $linha[funcionario];
	$laudo			= $linha[laudo];
	$dataava	    = $linha[dataava];
	$datanasc	    = $linha[datanasc];


?>
<div class="titulo_content">
 <h1>Dados da Composicao Corporal</h1>
</div>
<br />
<div id="mae-form"> <!-- Inicio DIV mae-form -->

   <div id="nome-campo">Avaliador:</div>
   <div id="input-campo"><?php echo $funcionario ?></div>

   <div id="nome-campo">Cliente:</div>
   <div id="input-campo"><?php echo $cliente ?></div>

<div id="nome-campo">Peso:</div>
   <div id="input-campo"><?php echo $peso ?> Kg
     <div id="sobre-campo">Altura: </div><?php echo $altura ?> Metros 
</div>

<div id="nome-campo">Data da Avaliação:</div>
<div id="input-campo"><?php $dataava = explode("-","$dataava"); $dataava = "$dataava[2]/$dataava[1]/$dataava[0]"; echo $dataava; ?></div>

<div id="nome-campo">Idade:</div>
   <div id="input-campo"><?php echo $idade ?></div>

<div id="nome-campo">Sexo:</div>
   <div id="input-campo"><?php if ($sexo == "M") { echo "Masculino"; } else { echo "Feminino"; } ?></div>

   <div id="nome-campo-label"> <!-- Inicio DIV nome-campo-label -->
   	<div id="grafico-comcorp-divisao-esquerdo"> <!-- Inicio DIV grafico-comcorp-divisao-esquerdo -->
       	<div id="grafico-comcorp-imagem-mm">
           	<h2><?php echo $linha["mm"];?></h2>
               <img src="imagens/img01.png" height="<?php if ($linha["mm"] > 0) {echo $linha["mm"]*2.017;} else {echo $linha["mm"]*(-2.017);}?>" width="60px"/>
           </div>

           <div id="grafico-comcorp-imagem-mm">
           	<h2><?php echo $linha["pid"];?></h2>
               <img src="imagens/img02.png" height="<?php  if ($linha["pid"] > 0) {echo $linha["pid"]*2.017;} else {echo $linha["pid"]*(-2.017);}?>" width="60px"/>
           </div>

           <div id="grafico-comcorp-imagem-mm">
           	<h2><?php echo $linha["pg"];?></h2>
               <img src="imagens/img03.png" height="<?php if ($linha["pg"] > 0) {echo $linha["pg"]*2.017;} else {echo $linha["pg"]*(-2.017);} ?>" width="60px"/>
           </div>

           <div id="grafico-comcorp-imagem-mm">
           	<h2><?php echo $linha["mg"];?></h2>
               <img src="imagens/img04.png" height="<?php if ($linha["mg"] > 0) {echo $linha["mg"]*2.017;} else {echo $linha["mg"]*(-2.017);} ?>" width="60px"/>
           </div>

           <div id="grafico-comcorp-imagem-mm">
           	<h2><?php echo $linha["oe"];?></h2>
               <img src="imagens/img05.png" height="<?php if ($linha["oe"] > 0) {echo $linha["oe"]*2.017;} else {echo $linha["oe"]*(-2.017);} ?>" width="60px"/>
           </div>
       </div> <!-- Fim DIV grafico-comcorp-divisao-esquerdo -->

       <div id="grafico-comcorp-divisao-direito"> <!-- Inicio DIV grafico-comcorp-divisao-direito -->
           Laudo pré-estabelecido durante o processo de avaliação:<br />
           <div id="campo-text-area">
         <textarea name="laudo" cols="45" rows="4" disabled="disabled" id="laudo"><?php echo $laudo ?></textarea></div>
       </div> <!-- Fim DIV grafico-comcorp-divisao-direito -->
   </div> <!-- Fim DIV nome-campo-label -->

</div> <!-- Fim DIV mae-form -->
<div id="both"></div>

<!-- FIM Exame Composição Corporal -->

<!-- Inicio rodapé -->

<div id="roda_pe">
© Copyright - <?php echo date(\'Y\');?> SAFEN v1.0 - Sistema de Avaliação Fisica e Nutricional<br />
Todos os direitos reservados.
</div>
<br />
</div>
<!-- Fim rodapé -->
</body>
</html>';

require_once("../dompdf/dompdf_config.inc.php");

$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->set_paper('letter', 'landscape');
$dompdf->render();
$dompdf->stream("exame-composicao-corporal.pdf");
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se você já conseguiu resolver seu problema.

 

Pela época já consegui mas quero contribuir também.

 

O problema aí é que, junto com os cabeçalhos header, um cabeçalho BOM foi enviado.

 

Como corrigir?

 

abra seu arquivo em um editor como o Notepad ++ vai em formatar lá estará ut8 com BOM.

 

Escolha um formato sem BOM e converta seu arquvo.

 

Pronto!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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