Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia para todos, estou com um problema que não sei mais o que pode ser, quando eu executo em localhost o script gera o pdf sem problemas, porém, quando vou executar na nossa hospedagem, ele me da este erro:
Unable to stream pdf: headers already sent
Segue abaixo o script que eu estou usando para gerar o PDF:
<?php
ob_start();
include_once './classes/conexao.class.php';
include_once './classes/funcoes.class.php';
include_once './classes/curriculos.class.php';
$objCurriculo = new Curriculos();
if ($_GET){
$objCurriculo->id=1;
$curriculo = $objCurriculo->selectUm();
$wArq="<!DOCTYPE html>
<html>
<head>
<meta charset=\"utf-8\">
<style type=\"text/css\">
@page {
margin-top: 0.5em;
margin-left: 0.5em;
}
</style>
</head>
<body>
<br>
<h3>Dados Pessoais </h3>
<table width=\"100%\" border=\"0\">
<tr>
<td width=\"11%\">Nome Completo:</td>
<td width=\"89%\"><input type=\"text\" value=\"Nome\"></td>
</tr>
</table>
<table width=\"100%\" border=\"0\">
<tr>
<td width=\"15%\">Endereço</td>
<td width=\"43%\"><input type=\"text\" value=\"Endereço\" ></td>
<td width=\"5%\">Bairro:</td>
<td width=\"37%\"><input name=\"text\" type=\"text\" value=\"Bairro\"></td>
</tr>
</table>
<table width=\"100%\" border=\"0\">
<tr>
<td width=\"9%\">Cidade</td>
<td width=\"57%\"><input type=\"text\" value=\"Cidade\" ></td>
<td width=\"5%\">UF:</td>
<td width=\"29%\"><input name=\"text\" type=\"text\" value=\"Estado\"></td>
</tr>
</table>
<table width=\"100%\" border=\"0\">
<tr>
<td width=\"5%\">Telefone:</td>
<td width=\"13%\"><input type=\"text\" value=\"Cidade\" ></td>
<td width=\"5%\">Telefone:</td>
<td width=\"37%\"><input name=\"text\" type=\"text\" value=\"Estado\"></td>
</tr>
</table>
<table width=\"100%\" border=\"0\">
<tr>
<td width=\"5%\">E-mail:</td>
<td width=\"35%\"><input name=\"text\" type=\"text\" value=\"Email\"></td>
</tr>
</table>
<table width=\"100%\" border=\"0\">
<tr>
<td width=\"5%\">C.P.F.:</td>
<td width=\"13%\"><input type=\"text\" value=\"777.777.777-77\" ></td>
<td width=\"5%\">Identidade:</td>
<td width=\"37%\"><input name=\"text\" type=\"text\" value=\"6666666666\"></td>
</tr>
</table>
<table width=\"100%\" border=\"0\">
<tr>
<td width=\"5%\">CTPS:</td>
<td width=\"35%\"><input name=\"text\" type=\"text\" value=\"555555\"></td>
<td width=\"5%\">PIS:</td>
<td width=\"35%\"><input name=\"text\" type=\"text\" value=\"444.444.444-4\"></td>
</tr>
</table>
<table width=\"100%\" border=\"0\">
<tr>
<td width=\"20%\">Parente na Empresa:</td>
<td width=\"5%\"><input name=\"text\" type=\"text\" value=\"SIM\"></td>
<td width=\"15%\">Grau de Parentesco:</td>
<td width=\"60%\"><input name=\"text\" type=\"text\" value=\"SIM\"></td>
</tr>
</table>
<table width=\"100%\" border=\"0\">
<tr>
<td width=\"10%\">Setor:</td>
<td width=\"20%\"><input name=\"text\" type=\"text\" value=\"Setor Parente\"></td>
<td width=\"5%\">Nome:</td>
<td width=\"20%\"><input name=\"text\" type=\"text\" value=\"Nome Parente\"></td>
<td width=\"15%\">Possui Filhos</td>
<td width=\"85%\"><input type=\"text\" value=\"SIM\" ></td>
</tr>
</table>
<br>
<h3>Histórico Escolar</h3>
<table width=\"100%\" border=\"0\">
<tr>
<td width=\"20%\">Grau de Escolaridade: </td>
<td width=\"5%\"><input type=\"text\" value=\"SIM\" ></td>
<td width=\"20%\">Nome do Curso: </td>
<td width=\"5%\"><input name=\"text\" type=\"text\" value=\"SIM\"></td>
<td width=\"50%\"></td>
</tr>
</table>
<table width=\"100%\" border=\"0\">
<tr>
<td width=\"20%\">Cursos Extra </td>
<td width=\"80%\"><input name=\"text\" type=\"text\" value=\"Grau Parente\"></td>
</tr>
</table>
<br>
<h3>Experiências Profissionais</h3>
<h4>Última Empresa</h4>
<table width=\"100%\" border=\"0\">
<tr>
<td width=\"10%\">Empresa:</td>
<td width=\"30%\"><input type=\"text\" value=\"SIM\"></td>
<td width=\"10%\">Telefone:</td>
<td width=\"10%\"><input name=\"text\" type=\"text\" value=\"SIM\"></td>
<td width=\"50%\"></td>
</tr>
</table>
<table width=\"100%\" border=\"0\">
<tr>
<td width=\"15%\">Data Admissão: </td>
<td width=\"15%\"><input name=\"text\" type=\"text\" value=\"Grau Parente\"></td>
<td width=\"15%\">Data Demissão: </td>
<td width=\"15%\"><input name=\"text\" type=\"text\" value=\"Grau Parente\"></td>
<td width=\"40%\"></td>
</tr>
</table>
<table width=\"100%\" border=\"0\">
<tr>
<td width=\"10%\">Cargo:</td>
<td width=\"20%\"><input type=\"text\" value=\"SIM\" ></td>
<td width=\"10%\">Motivo:</td>
<td width=\"60%\"><input name=\"text\" type=\"text\" value=\"SIM\"></td>
</tr>
</table>
<br><br><br><br><br><br><br><br><br><br><br>
<h4>Penultima Empresa</h4>
<table width=\"100%\" border=\"0\">
<tr>
<td width=\"10%\">Empresa:</td>
<td width=\"30%\"><input type=\"text\" value=\"SIM\"></td>
<td width=\"10%\">Telefone:</td>
<td width=\"10%\"><input name=\"text\" type=\"text\" value=\"SIM\"></td>
<td width=\"50%\"></td>
</tr>
</table>
<table width=\"100%\" border=\"0\">
<tr>
<td width=\"15%\">Data Admissão: </td>
<td width=\"15%\"><input name=\"text\" type=\"text\" value=\"Grau Parente\"></td>
<td width=\"15%\">Data Demissão: </td>
<td width=\"15%\"><input name=\"text\" type=\"text\" value=\"Grau Parente\"></td>
<td width=\"40%\"></td>
</tr>
</table>
<table width=\"100%\" border=\"0\">
<tr>
<td width=\"10%\">Cargo:</td>
<td width=\"20%\"><input type=\"text\" value=\"SIM\" ></td>
<td width=\"10%\">Motivo:</td>
<td width=\"60%\"><input name=\"text\" type=\"text\" value=\"SIM\"></td>
</tr>
</table>
<h4>Antepenultima Empresa</h4>
<table width=\"100%\" border=\"0\">
<tr>
<td width=\"10%\">Empresa:</td>
<td width=\"30%\"><input type=\"text\" value=\"SIM\"></td>
<td width=\"10%\">Telefone:</td>
<td width=\"10%\"><input name=\"text\" type=\"text\" value=\"SIM\"></td>
<td width=\"50%\"></td>
</tr>
</table>
<table width=\"100%\" border=\"0\">
<tr>
<td width=\"15%\">Data Admissão: </td>
<td width=\"15%\"><input name=\"text\" type=\"text\" value=\"Grau Parente\"></td>
<td width=\"15%\">Data Demissão: </td>
<td width=\"15%\"><input name=\"text\" type=\"text\" value=\"Grau Parente\"></td>
<td width=\"40%\"></td>
</tr>
</table>
<table width=\"100%\" border=\"0\">
<tr>
<td width=\"10%\">Cargo:</td>
<td width=\"20%\"><input type=\"text\" value=\"SIM\" ></td>
<td width=\"10%\">Motivo:</td>
<td width=\"60%\"><input name=\"text\" type=\"text\" value=\"SIM\"></td>
</tr>
</table>
</body>
</html>";
//file_put_contents('teste.html',$wArq);
require_once "dompdf/autoload.inc.php";
$dompdf = new Dompdf\Dompdf();
//$dompdf->set_option('isHtml5ParserEnabled', true);
/* Carrega seu HTML */
//$dompdf->load_html_file('teste.html');
$dompdf->load_html($wArq);
//CONFIGURAÇÕES
$dompdf->set_paper('A4');
/* Renderiza */
$dompdf->render();
/* Exibe */
$dompdf->stream(
"saida", /* Nome do arquivo de saída */
array(
"Attachment" => false /* Para download, altere para true */
)
);
}
?>Anderson, não consegui achar mais nenhuma saída.
Até alterei o exemplo para este:
<?php
ob_start();
include_once './classes/conexao.class.php';
include_once './classes/funcoes.class.php';
include_once './classes/curriculos.class.php';
require_once './dompdf/autoload.inc.php';
$wArq= ob_get_clean();
//$objCurriculo = new Curriculos();
//$objCurriculo->id=1;
//$curriculo = $objCurriculo->selectUm();
$wArq="<!DOCTYPE html>
<html>
<head>
</head>
<body>
<br>
<h3>Dados Pessoais:".time()." </h3>
</body>
</html>";
file_put_contents('teste.html',$wArq);
$dompdf = new Dompdf\Dompdf();
//$dompdf->set_option('isHtml5ParserEnabled', true);
/* Carrega seu HTML */
//$dompdf->load_html_file('teste.html');
$dompdf->load_html($wArq);
//CONFIGURAÇÕES
$dompdf->set_paper('A4');
/* Renderiza */
$dompdf->render();
/* Exibe */
$dompdf->stream(
"saida", /* Nome do arquivo de saída */
array(
"Attachment" => false /* Para download, altere para true */
)
);
?>
E mesmo assim continua, o que eu consegui ver foi que esta mensagem retorna quando ele executa a linha
$dompdf->stream();
Esta mensagem aparece nessa linha stream porque esta função está enviando os cabeçalhos para sinalizar que é um PDF, mas algum conteúdo foi retornado antes dela ser chamada.
Verifique se há espaço em branco antes da tag de abertura do PHP (se tiver, remova-os).
Porque você está usando o ob_start e ob_get_clean?
Comente as linhas ob_start e ob_get_clean e habilite os erros/warnings do PHP para ver possíveis mensagens do PHP:
<?php
// adiciona isto logo após abrir a tag do PHP
ini_set("display_errors", 1);
error_reporting(E_ALL|E_STRICT);Continua Anderson, e não me reclama nada.
Apenas a mensagem.
Mas porque você está usando as funções ob_start e ob_get_clean?
Porque eu me esqueci de retirar...heheheh
Mas mesmo sem eles não da certo,
To quase partindo pra outra biblioteca para gerar estes relatórios...
Sabe me indicar alguma?
Na verdade o problema não é no domPDF... ele é gerado pelo seu código.
Crie um novo arquivo PHP e execute este código e veja se funciona:
obs: primeiro teste com os comentários; depois remova os comentários das linhas e veja se funciona
<?php
//date_default_timezone_set("America/Sao_Paulo");
ini_set("display_errors", 1);
error_reporting(E_ALL|E_STRICT);
$wArq = "<div>Teste OK</div>";
require_once "lib/autoload.inc.php";
$dompdf = new Dompdf\Dompdf();
$dompdf->load_html($wArq);
$dompdf->render();
//$dompdf->stream("saida", Array("Attachment" => false));
die("ok");E teste também com este código:
<?php
date_default_timezone_set("America/Sao_Paulo");
ini_set("display_errors", 1);
error_reporting(E_ALL|E_STRICT);
require_once './classes/conexao.class.php';
require_once './classes/funcoes.class.php';
require_once './classes/curriculos.class.php';
$objCurriculo = new Curriculos();
$objCurriculo->id = 1;
$curriculo = $objCurriculo->selectUm();
$wArq = "<div>Teste OK</div>";
require_once "lib/autoload.inc.php";
$dompdf = new Dompdf\Dompdf();
$dompdf->load_html($wArq);
$dompdf->render();
die("ok");Obs: se funcionar corretamente não é para exibir o PDF, é para exibir apenas a mensagem OK na tela
Até da o Ok,
mas retorna um notice:
Notice: Undefined index: /services/webpages/r/e/recofran.com.br/public/tst/dompdf/lib/fonts\Times-Roman in /services/webpages/r/e/recofran.com.br/public/tst/dompdf/src/Renderer/Text.php on line 97
É bem possível que é isto que causa o erro, porque esse notice está sendo enviado antes dos cabeçalhos (o que não pode). Você tem os arquivos dompdf/lib/fonts/Times-Roman.afm e *dompdf/lib/fonts/**Times-Roman.afm*?
Coloque isto antes da linha do render e veja se a mensagem desaparece e fica só o OK:
ini_set("display_errors", 0);
Cara, ainda não consigo imprimir o pdf, olha o código q eu coloquei e dai ele retorna a mesma mensagem dos headers
<?php
date_default_timezone_set("America/Sao_Paulo");
ini_set("display_errors", 1);
error_reporting(E_ALL|E_STRICT);
require_once './classes/conexao.class.php';
require_once './classes/funcoes.class.php';
require_once './classes/curriculos.class.php';
$objCurriculo = new Curriculos();
$objCurriculo->id = 1;
$curriculo = $objCurriculo->selectUm();
$wArq = "<!DOCTYPE html><html><head></head><body><br><h3>Dados Pessoais </h3></body></html>";
require_once "dompdf/autoload.inc.php";
$dompdf = new Dompdf\Dompdf();
$dompdf->load_html($wArq);
$dompdf->stream(
"saida", / Nome do arquivo de saída / array(
"Attachment" => false /* Para download, altere para true */
)
);
die("ok");
?>
Não sei pra que lado sair.....
O que mais me deixa intrigado é que em localhost ele vai que é uma beleza....
Teste com o display_errors 0...
Bom dia, desculpa a demora em responder, cara....agora da a mensagem que a conexão foi reiniciada...
Conexão reiniciada? Como assim? Qual conexão??
Isto que eu não consegui achar, agora eu acho que a zebra é na hospedagem daqui, eles utilizam o terra, e eu particularmente, nunca fui muito fã do terra, mas fazer o que né?
Agora a coisa não é mais com o pdf, pelo menos eu acho
Vou ver aqui e dai aviso do resultado.
Obrigado pela ajuda até agora.
Agora o que esta acontecendo é que ele esta gerando o PDF em branco...
Pelo menos agora gera :P
Como está o código agora?
<?php
date_default_timezone_set("America/Sao_Paulo");
ini_set("display_errors", 0);
error_reporting(E_ALL|E_STRICT);
require_once './classes/conexao.class.php';
require_once './classes/funcoes.class.php';
require_once './classes/curriculos.class.php';
$objCurriculo = new Curriculos();
$objCurriculo->id = 1;
$curriculo = $objCurriculo->selectUm();
$wArq = "
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<br><h3>Dados Pessoais </h3>
</body>
</html>";
file_put_contents('teste.html', $wArq);
require_once "dompdf/autoload.inc.php";
$dompdf = new Dompdf\Dompdf();
$dompdf->load_html($wArq);
$dompdf->stream(
"saida", / Nome do arquivo de saída / array(
"Attachment" => false /* Para download, altere para true */
)
);
die("ok");
?>
Coloquei o file puts pra ver se ele gera o html, e ele esta gerando sem problemas....
Só não gera o PDF.... :wacko: :wacko: :wacko:
Gera ou não gera? rs
Você falou que estava gerando, mas em branco... se for isso, acho que está acontecendo por causa daquele erro da fonte...
Desculpa, é que é tanta coisa...hehehe
Cara, ele gera em branco, mas ali pelo exemplo q eu to fazendo, ele não troca fonte nem nada, tem idéia de como eu troco a fonte?
Não sei como trocar a fonte no domPDF... normalmente eu uso o mpdf, e ultimamente o jsPDF. Mas dá uma olhada no manual dele, provavelmente deve ter explicação e exemplo...
Cara...bem na boa...to pensando em trocar de biblioteca, eu até troquei a fonte usando css, e segue imprimindo em branco..
vou ver estas duas bibliotecas e te aviso algo...
gracias...
Consegui solucionar,
troquei para o mPDF e já esta gerando o pdf com o conteúdo...
Agora estou vendo alguns detalhes dele...
como setar margens e afins....
O mPDF é bom também! E se resolveu o problema, melhor ainda :P
Olá!
A partir do momento que você enviou algum conteúdo (echo, warning do PHP ou até mesmo espaço em branco), você não pode enviar mais nenhum cabeçalho (header).
Esse problema de headers already sent acontece porque em algum momento foi enviado conteúdo e depois você tentou enviar cabeçalhos (provavelmente os cabeçalhos são do dompdf).
Verifique e remova qualquer saída de conteúdo de sua página.