Mpdf 7.1 создает файл PDF, записывает весь текст, но без тегов HTML или CSS - PullRequest
0 голосов
/ 29 мая 2018

Прежде всего, я использую общедоступный общий сервер, и я не могу использовать composer, и я использую свою собственную автозагрузку.

Симптомы понятны:

  • php версия7.2
  • Mpdf версия 7.1
  • каждый необходимый компонент загружен для Mpdf, и в журнале нет ничего плохого, но отладочная информация выглядит так:

    [2018-05-29 15:44:07] [отладка] PDF сгенерирован за 0,193712 секунд [2018-05-29 15:44:08] [отладка] Скомпилирован за 0,634812 секунд
    [2018-05-29 15:44:08][отладка] Пиковое использование памяти 4,00 МБ
    [2018-05-29 15:44:08] [отладка] Размер файла PDF 16 кБ
    [2018-05-29 15:44:08] [отладка] 1используемые шрифты

Я могу открыть созданный файл, но он содержит только текстовую часть содержимого, без единой таблицы или стиля.

Есть предложения?

Редактировать 1

Я пробовал следующие html-структуры:

$pdfContent = '<html xmlns="http://www.w3.org/1999/xhtml">
    <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <base href="'._PAGE_BASE_URL.'/">
        <style>
            '.file_get_contents('libs/css/reset.css').'
            '.file_get_contents('libs/css/pdf.css').'
        </style>
        </head><body>';

и

$pdfContent = '<html><head></head><body>';

Конечно, я использовал некоторыеэлементы таблицы, div и span со следующимиКоманды рендеринга PDF:

$mpdf=new \Mpdf\Mpdf();
$mpdf->WriteHTML($pdfContent, 0);
$mpdf->Output('test.pdf');

Я пытался использовать только основной текст для источника HTML и пытался использовать его с этим:

$mpdf=new \Mpdf\Mpdf();
$mpdf->WriteHTML(file_get_contents('libs/css/reset.css').PHP_EOL.file_get_contents('libs/css/pdf.css'),1);
$mpdf->WriteHTML($pdfContent, 2);
$mpdf->Output('test.pdf');

1 Ответ

0 голосов
/ 30 мая 2018

Итак, я провел несколько тестов, и оказалось, что код уже распознает и успешно использует CSS-файлы, и единственная недостающая часть - это использование HTML-тегов.

В этом сутьгде я начал подозревать себя.Я действительно загрузил все необходимые файлы для Mpdf?Оказывается, я не сделал.После того, как я понял, что не понимаю этого, я сделал простой автозагрузчик загрузки и включил его в самом начале в файл src / Mpdf.php.

Я запустил2 теста, и 'и вуаля.Все на своем месте.К сожалению, я до сих пор не знаю, какие были недостающие части из него, но после полуторанедельных пробных испытаний меня это не волнует.

Если кто-то захочет использовать более новую версию Mpdfверсии, но не могу использовать Composer, я предлагаю забыть об этом.Но если это не мешает вам использовать какой-то действительно испорченный и глупый код, чтобы заставить его работать (как я в этом случае), не стесняйтесь использовать загрузчик ниже, чтобы загрузить все необходимые (и кучу ненужных) файлы изкаталог проектов Mpdf:

function loadDirContent($dir){
    $dirContent = scandir($dir);
    foreach($dirContent as $item){
        $path = $dir."/".$item;

        // avoid unnecessary examination and load
        if($item == '.' || $item == '..' || 
           $item == 'Loader.php' || $item == 'Mpdf.php' || 
           strpos($path, "Psr/Log/Test")!==false || 
           (!is_dir($path) && strtolower(substr($item, -3)) != 'php')){
               continue;
        }

        if(!is_dir($path)){
            require_once($path);
        } else {
            // The Tag folder contains some dependency on folder contents
            // These files have to load first
            if(strpos($path, "src/Tag") !== false){
                require_once($path."/Tag.php");
                require_once($path."/InlineTag.php");
                require_once($path."/BlockTag.php");
                require_once($path."/NewColumn.php");
            }

            loadDirContent($path);
        }
    }
}

loadDirContent(__DIR__);

В файле Mpdf / src / Mpdf.php вам потребуется файл загрузчика, который я хранил в том же каталоге, что и Mpdf.php

require_once(__DIR__."/Loader.php");

и, конечно же, необходим пакет Psr / Log, который я скачал вручную из его репозитория GitHub и распаковал в каталог Mpdf / src.Mpdf нуждается в нем и использует его, поэтому в Mpdf / src / Mpdf.php вы должны также вызвать две эти строки:

require_once(__DIR__."/Psr/Log/LoggerAwareInterface.php");
require_once(__DIR__."/Psr/Log/NullLogger.php");

в этих файлах нужно несколько «в проекте требуется», и есливы не используете автозагрузчик, вам нужно добавить в них несколько дополнительных строк require_once.

Я знаю, что это глупо и некрасиво, но, наконец, это работает, как и с 5-й версией Mpdf, и теперь яя просто рад этому.

...