Как получить MPDF для вывода PDF Inline в Chrome? - PullRequest
0 голосов
/ 23 мая 2019

У меня проблема с отображением встроенного PDF в Chrome, используя mpdf в моем плагине WordPress.PDF отлично отображается в Firefox, а также, если я скачать PDF.Тем не менее, я не могу получить даже пример Hello World для отображения в Chrome.Chrome отображает ошибку: не удалось загрузить документ PDF.

Включение отладки в mpdf показывает эту ошибку: Обнаружена ошибка.Преобразование файла PDF прервано: unserialize (): ошибка по смещению 0 из 7 байтов в обоих браузерах, но если я отключаю отладку, то в Firefox он снова отображается нормально, а ошибка Chrome возвращает ошибку загрузки.Я также могу открыть файл с помощью средства просмотра документов на моем компьютере, если я его скачаю.Просматривая загруженный pdf с помощью средства просмотра текста, я сначала вижу html для своего сайта (как и всю страницу), а не html, который я пытаюсь добавить в $ mpdf.Первые несколько строк приведены ниже.

<!DOCTYPE html>
<html lang="en-US">
<head>

В конечном итоге в документе есть некоторые странные символы, которые отображаются неправильно, что я тоже считаю неправильным.

Я пыталсяочистить буфер вывода от любых других данных перед записью html в мой объект $ mpdf, но я не совсем уверен, что я делаю, и в основном просто бросаю вещи в стену, чтобы посмотреть, что залипает.Я видел такое же поведение перед добавлением любых команд ob_, но я оставил их в своем коде ниже, потому что это самая последняя попытка, которую я пробовал.

<?php
function show_pdf() {
try {

    $mpdf = new \Mpdf\Mpdf([
        'orientation' => 'P',
        'tempDir' => Plugin_BASE_DIR . '/includes/composer/vendor/mpdf/mpdfTmp'
        #'debug' => true
    ]);
    ob_start();
    echo '<h1>Hello world!</h1>';
    $html = ob_get_contents();
    ob_end_clean();
    $mpdf->WriteHTML($html);
    $mpdf->Output('filename.pdf', \Mpdf\Output\Destination::INLINE);
    exit;
} catch (\Mpdf\MpdfException $e) { // Note: safer fully qualified exception 
                                   //       name used for catch
    // Process the exception, log, print etc.
    echo $e->getMessage();
}
} # function show_pdf() {

Я ожидаю, что PDF будет отображаться во всех браузерахи не иметь неверные данные внутри файла, однако это так, и я думаю, что причина моей проблемы.Кто-нибудь знает, как управлять тем, что получает вывод в объект mpdf?

Обновление: Я заметил, что (открытие загруженного PDF в текстовом редакторе, таком как блокнот) HTML в верхней частидокумент - это HTML, который создается на странице шаблона моей темы.Итак, я создал новый файл страницы шаблона без какого-либо верхнего или нижнего колонтитула и т. д., а только с циклом while, содержащим функцию the_content ().

<?php /* Template Name: Project Template */ 
while ( have_posts() ) : the_post();  
the_content();
endwhile;
?>

теперь, когда я открываю файл pdf в текстовом редакторе, я вижу два возврата каретки, а затем% PDF-1.4, что, я думаю, является прогрессом, несмотря на то, что Chrome все еще выдает ошибки.Кто-нибудь знает, как создать шаблон страницы в WordPress, который не добавляет пустых строк или дополнительных HTML?я думаю, что ключ состоит в том, чтобы на странице не было ничего, кроме данных pdf.

Update2: Я понял это.проблема заключалась в html-шаблоне страницы и пробелах, отображаемых на странице pdf - в источнике этой страницы не должно быть ничего, кроме текста для pdf.я создал новый шаблон и добавил в него только функцию отображения pdf, и применил этот шаблон к странице, которую я сделал, чтобы показать pdfs и poof.теперь он работает в Chrome и Firefox.

<?php /* Template Name: PDF Template */ 
show_pdf();
...