Я использую 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 без ручного воспроизведения кода каждый время.
Вот моя оберточная функция, которая вызывает mpdf с html и css:
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 или способ, которым я называю mpdf в php, который избавится от html-мусора в начале PDF-файла, который все размахивает?
Место
ob_clean();
непосредственно перед
$mpdf->Output();
Без этого mpdf иногда включает HTML-страницу сайта, а не только HTML, который вы хотите в PDF-файле, вероятно, потому, что заголовки уже отправлены в другом месте кода. Это может испортить ваш PDF, чтобы Adobe не открывала его.