Проблема с изображением внутри цикла PDF

#image #dompdf

#изображение #dompdf

Вопрос:

Я использую DOMPDF для создания PDF-файлов, которые могут содержать изображения, и у меня возникла странная проблема с этим.

PDF генерируется внутри цикла, и количество PDF-файлов, которые необходимо сгенерировать, варьируется. Когда сгенерирован только 1 PDF-файл, все идет хорошо. Изображение (или логотип в данном случае) вставляется красиво. Но когда по какой-либо причине необходимо сгенерировать 2 или более PDF-файлов, изображение заменяется красным крестом. Но: изображение в первом PDF, сгенерированном в этом пакете, работает отлично. Итак: изображение в PDF # 1 загружается идеально, изображение в PDF # 2 и выше заменяется красным крестом.

Я использую последнюю стабильную версию DOMPDF (v0.5.2). Я также тестировал с версией 0,5.1, но у нее было такое же поведение.

Сервер, на котором я тестирую это, работает в Linux с PHP 5.3.8. В журнале ошибок нет ошибок по этому поводу (и у меня включено ведение журнала ошибок).

— редактировать: «Путь» к изображению — это абсолютный URL, а не абсолютный или относительный путь (PHP), и при выводе содержимого цикла в браузер (или обычное электронное письмо в формате HTML без вложения PDF) изображение отображается (во всех письмах) идеально.

— edit2: Использование функции для очистки всех буферов в конце цикла (что, к сожалению, ничего не меняет в моей проблеме):

 function flush_buffers()
{ 
    ob_end_flush(); 
    ob_flush(); 
    flush(); 
    ob_start(); 
}
  

Пример цикла, который я использую:

 for ( $i = 0; $i < count($cert);   $i )
{
    // load the email-template
    ob_start();
    include($template);
    $content = ob_get_contents();
    ob_end_clean();

    // require dompdf
    include_once('dompdf/dompdf_config.inc.php');

    // set PDF path - inside temp dir
    $newpdf = trailingslashit(realpath(sys_get_temp_dir())).$cert[$i]['coupon'].'.pdf';

    // replace shortcodes with wanted content
    $certificate = preg_replace($shortcodes, $replacements, $certificate);
    $certificate = '<html><body>'.$certificate.'</body></html>'."n";

    $dompdf = new DOMPDF(); 
    $dompdf->load_html($certificate); 
    $dompdf->set_paper($pageformat, $orientation);
    $dompdf->render();
    save_pdf($newpdf, $dompdf->output()); // save PDF

    @flush_buffers();
}
  

Один из коротких кодов — [logo], и он заменяется img-тегом. Как я упоминал ранее: это изображение отлично работает в первом PDF-файле, но не в других PDF-файлах.

Комментарии:

1. Можете ли вы попробовать последнюю бета-версию (0.6 beta 2)? В нем улучшены пути к файлам и изображениям. У SVN trunk также есть новый способ обработки файлов изображений, так что вы также можете попробовать его.

2. Привет, Фабьен, спасибо за твой ответ 🙂 Я надеялся избежать использования бета-версии, поскольку это бета-версия (и то, что я создаю, должно использоваться в реальных средах). Но если вы настаиваете, что я должен попробовать это, я сделаю 🙂

3. Во многих отношениях ветвь 0.6 лучше, чем ветвь 0.5, и глобально более стабильна.

Ответ №1:

Обновление до dompdf 0.6beta2 устранило эту проблему. Спасибо, Фабьен!