PHP: Adobe Reader无法打开使用mpdf创建的PDF文件

6
我正在使用mpdf动态创建PDF文件,在浏览器中打开文件没有问题,但Adobe却给出了一个错误提示:
Adobe Acrobat Reader DC无法打开“example-filename.pdf”,因为它不是受支持的文件类型或者文件已经损坏(例如,作为电子邮件附件发送时未正确解码)。
我查看了其他有关此问题的问题(另一个mpdf + Adobe错误),并在文本编辑器中检查了PDF。我发现文件的前面部分如下所示:
<!DOCTYPE html>
<head>
    <title>
        CapstoneDB
    </title>
    %PDF-1.4
%âãÏÓ

在我删除了%PDF-1.4(包括制表符)之前的所有内容后,文件在Adobe中正常打开,这很好,但是我需要能够在不手动调整代码的情况下使生成的pdf在Adobe中打开。

这是我的包装函数,它使用HTML和CSS调用mpdf:

include('../mpdf/mpdf.php');

function user_download_pdf($html, $css_file, $filename) {
    $mpdf = new mPDF();
    $stylesheet = file_get_contents($css_file);
    $mpdf->WriteHTML($stylesheet,1);
    $mpdf->WriteHTML($html,2);
    $mpdf->Output($filename, "D");
}

我从未将完整的html页面提供给mpdf,通常只提供h3和一个或多个表。也许我需要提供包括、等在内的整个html页面给mpdf?是否有任何方法可以更改mpdf配置或以php中调用mpdf的方式,以消除pdf文件开头的html垃圾,这些垃圾使一切变得混乱?

2
看起来更有可能是你的 PHP 代码的其他部分在到达 PDF 生成器之前输出了标题。 - Adam B
我使用mpdf,如果在网页上呈现正常,那么你的文件和代码肯定没问题。也许问题出在Adobe上,这很有可能。为什么不使用开源阅读器呢? - digitai
检查下载的文件是否可以用其他PDF阅读器打开,比如SUMATRA、FOXIT等。如果你使用的是Linux系统,有一些非常优秀的阅读器可供选择,GNOME自带的文档查看器就是其中之一。 - digitai
@datelligence 不幸的是,在这种情况下完全切换到另一个PDF阅读器是不可行的,因为生成的PDF文件主要是为网站(学生管理系统)的其他用户而设计的。如果只有我,我会很高兴PDF在浏览器中打开。我尝试了Nitro,PDF文件在那里可以正常打开,所以问题似乎是Adobe Acrobat Reader DC太挑剔了。 - Potato_potato
也许这是Adobe不能容忍的问题,而其他人则不会,所以我会检查@AdamB的建议。 - digitai
@Potato_potato,首先将你的PDF文件保存到服务器上,并通过直接URL的标准方式下载它,然后使用Acrobat打开它。如果它们可以正常工作,那么问题就在于发送过程中,否则问题就在于PDF本身。 - fusion3k
1个回答

17

地点

ob_clean(); 

紧接着之前

$mpdf->Output();

如果没有这个插件(mpdf),有时候生成的PDF不仅包含所需的HTML,还会包含整个网站页面的HTML。这很可能是因为代码中的头部信息已经被发送到其他地方了。这样会破坏你的PDF文件,Adobe也无法打开。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接