【发布时间】:2016-05-18 12:02:42
【问题描述】:
我正在使用 mpdf 即时创建 PDF 文件,这些文件在浏览器中可以正常打开,但 Adobe 给了我一个错误:
Adobe Acrobat Reader DC 无法打开“example-filename.pdf” 因为它不是受支持的文件类型,或者因为该文件 已损坏(例如,它是作为电子邮件附件发送的 并且未正确解码)。
我查看了有关此的其他问题 (another mpdf + adobe error),并在文本编辑器中查看了 pdf。我发现文件的第一部分是这样的:
<!DOCTYPE html>
<head>
<title>
CapstoneDB
</title>
%PDF-1.4
%âãÏÓ
在我删除了%PDF-1.4 之前的所有内容(包括选项卡)之后,文件在 Adobe 中打开得很好,这很棒,除了我需要能够在 Adobe 中打开生成的 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 垃圾,这些垃圾会把所有东西都搞砸?
【问题讨论】:
-
在进入 PDF 生成器之前,您的 PHP 代码的某些其他部分似乎更有可能输出标头。
-
我使用 mpdf,如果它呈现在网页上,请确保文件正常,因此您的代码。也许问题出在 Adobe 上,这很有可能。为什么不使用开源阅读器?
-
检查下载的文件是否用SUMATRA、FOXIT等其他pdf阅读器打开,如果你用的是linux,有优秀的阅读器,GNOME自带的叫做Document Viewer。
-
@datelligence 不幸的是,在这种情况下,迁移到完全不同的 PDF 阅读器是不可行的,因为生成的 pdf 文件主要是为网站的其他用户(学生管理系统)提供的。如果只是我,我会很高兴 pdf 在浏览器中打开。我试过 Nitro 并且 pdf 在那里打开得很好,所以是的,问题似乎是 Adobe Acrobat Reader DC 很挑剔。
-
也许是 adobe 不能容忍的问题,而其他的则不是,所以我会检查 @AdamB 的建议。