Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DOMPDF: Unable to stream pdf: headers already sent

Tags:

php

smarty

dompdf

I am generating php page using smarty template based on html form input and uploaded files. Using dompdf, I want to save the generated page as a pdf file.

When the user submits the multipart/form-data, data is posted to itself. Then it undergoes validation process. When all is fine, a new page is generated using a template file. There is no output, instead, dompdf utilizes the template file to stream the pdf file. After solving several stages of problems such as "DOMPDF not found", insufficient memory etc, I am now stuck with "Unable to stream pdf: headers already sent" error.

One of the most common problems is presence of line break, white space or any output being before stream() is called. I checked for white space before and after <?php and >?.

There are nor print_f or echo statements either. How can I troubleshoot this problem? Where does the problem lie...in the smarty template file or the php file itself? Here is the code:

require_once("dompdf/dompdf_config.inc.php");
spl_autoload_register('DOMPDF_autoload');
$html = $smarty->fetch('index.tpl');
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->set_paper('a4', 'portrait');
$dompdf->render();
$dompdf->stream("newfile.pdf");
like image 863
sridhar Avatar asked Oct 22 '13 17:10

sridhar


2 Answers

simple solution :

write below lines before stream, it will show where exactly new line or space is coming

$f;
$l;
if(headers_sent($f,$l))
{
    echo $f,'<br/>',$l,'<br/>';
    die('now detect line');
}
like image 182
Muhammad Avatar answered Sep 24 '22 05:09

Muhammad


Most probably there's a whitespace or new line somewhere in your code causing this. Here's a simple way to debug it:

  1. echo something at the very end of your script (above the stream() call), for example echo "end!";exit;
  2. Click to "view source" of your page, which makes spaces easier to see
  3. If your "end!" string does not appear at the very start of your script, then somewhere there's a character printed
  4. Move the "echo end!" line further up to your code, until you locate where the space was inserted

Another possibility is that you are using a language string somewhere that introduces an unprintable character. If your application is multilingual, make sure you're testing using english

like image 37
periklis Avatar answered Sep 22 '22 05:09

periklis