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

PHP: Adobe Reader can't open PDF files created with mpdf

我正在使用 mpdf 即时创建 PDF 文件,文件在浏览器中打开正常,但 Adob​​e 给我一个错误:

Adobe Acrobat Reader DC could not open 'example-filename.pdf' because it is either not a supported file type or because the file has been damaged (for example, it was sent as an email attachment and wasn't correctly decoded).

我查看了有关此的其他问题 (another mpdf + adobe error),并在文本编辑器中查看了 pdf。我发现文件的第一部分如下所示:

<!DOCTYPE html>
<head>
    <title>
        CapstoneDB
    </title>
    %PDF-1.4
%âãÏÓ

在我删除了 %PDF-1.4 之前的所有内容(包括选项卡)之后,文件在 Adob​​e 中打开得很好,这很棒,除了我需要能够在 Adob​​e 中打开生成的 pdf 而不每次都手动摆弄代码。

这是我的包装函数,它使用 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");
}

我从不向 mpdf 提供完整的 html 页面,通常只是一个 h3 和一个或多个表格。也许我需要给 mpdf 一个完整的 html 页面,包括 <head><body> 等?有没有什么方法可以更改 mpdf 配置或我在 php 中调用 mpdf 的方式,这将消除 pdf 文件开头的 html 垃圾,这些垃圾会破坏一切?

地点

ob_clean(); 

紧接着

$mpdf->Output();

如果没有此 mpdf,有时会包含网站页面 HTML 而不仅仅是您想要在 PDF 中包含的 HTML,可能是因为 headers 已在代码中的其他地方发送。这可能会弄乱您的 PDF,因此 Adob​​e 无法打开它。