DOM Pdf 流不适用于 Android 浏览器(它适用于 Windows)

DOM Pdf stream doesn't work with Android browser (it does on Windows)

即使在 Microsoft Edge/Google Chrome Windows 10 上一切正常,我在将 pdf 流式传输到 Chrome 时遇到很多问题 Android。 下载没有完成,看起来卡住了,几分钟后根本没有完成。我在我的 phone 上试过,在另一个上也试过,得到了相同的结果。

我正在按照网站首页教程中的建议使用 DOMPdf:

// Instantiate and use the dompdf class
$dompdf = new Dompdf( array('enable_remote' => true) );

// Load HTML content
$dompdf->loadHtml( $HTML );

// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4', 'portrait');

// Render the HTML as PDF
$dompdf->render();

// Output the generated PDF to Browser
$filename   =   "File_Export_" . date( 'd_m_Y' ) . ".PDF";
//header( 'Content-Length: ' . filesize( $dompdf->output() ) );  
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"" . $filename . "\"");
$dompdf->stream( $filename , array('Attachment' => true ) );
exit(0);

我试过在没有任何帮助的情况下添加许多不同的 headers(content-type、content-length - 正如脚本中所注释的那样)。 我只是在 Android 中正常引用页面 URL,如下所示:

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("my url"));
startActivity(browserIntent);

有什么想法吗? 谢谢。

PS:我已经阅读并申请了this但没有成功

看起来您在缓冲到流之前已发出输出。这可能是白色 space,warning/notice,可能有很多东西。

一种cure-all的方法是使用ob_clean

This function discards the contents of the output buffer.

此问题在 session 错误中也很常见,输出已在 headers 之前发送。确保您的 PHP 错误日志记录和级别设置得当有时也可以帮助检测到这一点。