【问题标题】:PHP: Adobe Reader can't open PDF files created with mpdfPHP:Adobe Reader 无法打开使用 mpdf 创建的 PDF 文件
【发布时间】:2016-05-18 12:02:42
【问题描述】:

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

Adobe Acrobat Reader DC 无法打开“example-filename.pdf” 因为它不是受支持的文件类型,或者因为该文件 已损坏(例如,它是作为电子邮件附件发送的 并且未正确解码)。

我查看了有关此的其他问题 (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 页面,包括&lt;head&gt;&lt;body&gt; 等?有什么方法可以更改 mpdf 配置或我在 php 中调用 mpdf 的方式,以消除 pdf 文件开头的 html 垃圾,这些垃圾会把所有东西都搞砸?

【问题讨论】:

  • 在进入 PDF 生成器之前,您的 PHP 代码的某些其他部分似乎更有可能输出标头。
  • 我使用 mpdf,如果它呈现在网页上,请确保文件正常,因此您的代码。也许问题出在 Adob​​e 上,这很有可能。为什么不使用开源阅读器?
  • 检查下载的文件是否用SUMATRA、FOXIT等其他pdf阅读器打开,如果你用的是linux,有优秀的阅读器,GNOME自带的叫做Document Viewer。
  • @datelligence 不幸的是,在这种情况下,迁移到完全不同的 PDF 阅读器是不可行的,因为生成的 pdf 文件主要是为网站的其他用户(学生管理系统)提供的。如果只是我,我会很高兴 pdf 在浏览器中打开。我试过 Nitro 并且 pdf 在那里打开得很好,所以是的,问题似乎是 Adob​​e Acrobat Reader DC 很挑剔。
  • 也许是 adobe 不能容忍的问题,而其他的则不是,所以我会检查 @AdamB 的建议。

标签: php html pdf mpdf


【解决方案1】:

地点

ob_clean(); 

紧接在之前

$mpdf->Output();

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    相关资源
    最近更新 更多