DOMPDF:无法传输已发送的pdf:标头

sri*_*har 5 php smarty dompdf

各种论坛已经提出了这个问题数百次; 有些已经解决了,有些则没有.我检查了大量资源,但我的问题无法解决.我正在使用基于html表单输入和上传文件的smarty模板生成php页面.使用dompdf,我想将生成的页面保存为pdf文件.当用户提交multipart/form-data时,数据将发布到自身.然后它经历验证过程.当一切正常时,使用模板文件生成新页面.没有输出,相反,dompdf利用模板文件来传输pdf文件.在解决了几个阶段的问题,例如"未找到DOMPDF",内存不足等问题之后,我现在仍然遇到"无法流式传输pdf:已发送的标头"错误.最常见的问题之一是存在断线,调用stream()之前的空格或任何输出.我前后检查了空白区域?还有print_f或echo语句.我该如何解决这个问题?问题在哪里......在smarty模板文件或php文件本身?这是代码:

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");
Run Code Online (Sandbox Code Playgroud)

Muh*_*mad 13

简单解决方案

在流之前写下面的行,它将显示新的行或空间的来源

$f;
$l;
if(headers_sent($f,$l))
{
    echo $f,'<br/>',$l,'<br/>';
    die('now detect line');
}
Run Code Online (Sandbox Code Playgroud)

  • 哇,这才是天才!帮我发现包含的远程文件是UTF-8,但没有BOM. (2认同)
  • 天才的解决方案! (2认同)

per*_*lis 3

很可能是代码中某个地方有空格或换行导致了这种情况。这是一个简单的调试方法:

  1. 例如,在脚本的最后(在stream()调用之上)回显一些内容echo "end!";exit;
  2. 单击页面的“查看源代码”,这使得空间更容易查看
  3. 如果你的“结束!” 字符串没有出现在脚本的开头,然后在某处打印了一个字符
  4. 移动“回声结束!” 继续向上延伸到您的代码,直到找到插入空格的位置

另一种可能性是您在某处使用的语言字符串引入了不可打印的字符。如果您的应用程序是多语言的,请确保您使用英语进行测试