无法在Chrome浏览器中加载PDF文档

时间:2016-01-12 07:10:16

标签: php codeigniter mpdf

我使用mPDF库从HTML页面生成PDF文件。它在firefox中工作得很好,但它不是在chrome浏览器中显示PDF文件。

我在Chrome中生成PDF时遇到以下错误。

Getting error in chrome browser while generating PDF

以下是我使用mPDF生成PDF的代码

ob_clean();
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $yourFileName . '"');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
$mpdf = new PDF( 'c','A4','','',15, 15,10,14,0,0);
$mpdf->useOnlyCoreFonts = false;
$mpdf->SetDisplayMode('real');
$mpdf->list_indent_first_level = 0; // 1 or 0 - whether to indent the first level of a list
$stylesheet = file_get_contents(APPPATH . 'third_party/mpdf/style.css');
$mpdf->WriteHTML($stylesheet,1);
$mpdf->WriteHTML($html);
$mpdf->Output();

9 个答案:

答案 0 :(得分:5)

这可能是生成的pdf的问题。 如果它适用于Firefox,请下载该文件并尝试打开它。如果你电脑中的pdf查看器输出 损坏的pdf ,那么你可能需要调整你的代码。我面临同样的问题。由于pdf损坏,Chrome无法打开它。

希望我的回答能让您进入调试之旅。 干杯。 :d

答案 1 :(得分:3)

在我的情况下,当前页面的html是在pdf中发送的(我用简单的文本编辑器打开pdf时会看到它。)

在发送标题

之前,我flush + ob_clean的解决方案
ob_clean();
flush();
header("Content-type:application/pdf");
header("Content-Disposition:attachment;filename='downloaded.pdf'"); 
echo $result; 
exit;

答案 2 :(得分:1)

当您使用html到PDF库(例如mPDF)时,也会发生这种情况,并且在发送文件之前,您会以某种方式将HTML发送到浏览器。许多读者在阅读PDF标记之前忽略了HTML - Chrome没有。

例如,在PHP中,在将数据发送到mPDF之前清除输出缓冲区:ob_clean()

答案 3 :(得分:0)

对于使用MemoryStream在浏览器pdf中打开Chrome的情况,以下代码块在C#中为我完成了工作:

MemoryStream ms;
ms = new MemoryStream(result.ResponseData[0].Report);
HttpContext context = HttpContext.Current;
HttpContext context = HttpContext.Current;
context.Response.Clear();
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.ContentType = "application/pdf";
context.Response.AddHeader("Content-Disposition", "inline;filename=" + Guid.NewGuid().ToString() + "." + _exportType);
context.Response.AddHeader("Content-Length", ms.Length.ToString());            
context.Response.BinaryWrite(ms.ToArray());            
context.Response.Flush();
context.Response.Close();
context.Response.End();

答案 4 :(得分:0)

在Asp.net Core 2.10中,这对我来说很好用。

              MemoryStream ms1;
              ms1 = new MemoryStream(res);
              HttpContext context = _httpContextAccessor.HttpContext;
              context.Response.Clear();
              context.Response.ContentType = "application/pdf";
              context.Response.Headers.Add("Content-Disposition", "inline;filename=" + Guid.NewGuid().ToString() + "." + "pdf");
              context.Response.Headers.Add("Content-Length", ms1.Length.ToString());
              context.Response.Body.Write(ms1.ToArray());
              context.Response.Body.Flush();
              context.Response.Body.Close();

希望这会有所帮助。

答案 5 :(得分:0)

您可能会发现Chrome的标题标题为Content-Type值:charset=utf-8有问题。删除响应标头值为我修复了它。 (原始post

答案 6 :(得分:0)

同意@SébastienGicquel,但是,对于我来说,我需要在标题之后但在@readfile之前放置flush + ob_clean。

仅供参考,我的Chrome版本是9.0.3945.79,在Firefox和IE中无需ob_clean和flush即可很好地运行代码。

header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' .$file. '"');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
ob_clean();
flush();
@readfile($file);

答案 7 :(得分:0)

我也遇到了同样的“加载 PDF 文档失败”问题,但正在申请 ob_clean(); 在发送标头之前解决了错误 因为这个函数会丢弃输出缓冲区的内容

答案 8 :(得分:-1)

这是人们在较旧版本的Chrome上遇到的问题。如果您仍然看到此问题,请执行以下操作

在谷歌浏览器中,您有2个选项可以查看PDF文件。您可以使用Chrome pdf查看器(默认),也可以使用Adobe Reader

您可以查看chrome:// plugins(在地址栏中输入)吗?只需启用它即可切换到其他PDF查看器(Chrome / Adob​​e)!