Я использую DOMPDF для создания PDF-файлов, которые могут содержать изображения, и у меня возникла странная проблема с этим.
PDF создается внутри цикла, и количество PDF-файлов, которые необходимо сгенерировать, варьируется,Когда генерируется только 1 PDF, все идет хорошо.Изображение (или логотип в этом случае) вставляется красиво.Но если по какой-то причине необходимо сгенерировать 2 или более файлов PDF, изображение заменяется красным крестом.Но: изображение в первом PDF, сгенерированном в этом пакете, работает отлично.Итак: изображение в PDF # 1 отлично загружается, изображение в PDF # 2 и выше заменяется красным крестиком.
Я использую последнюю стабильную версию DOMPDF (v0.5.2).Я также тестировал с v0.5.1, но у него было то же поведение.
Сервер, на котором я тестирую это, работает на Linux с PHP 5.3.8.В журнале ошибок об этом нет ошибок (и у меня действительно включена регистрация ошибок).
--- edit: «путь» к изображению является абсолютным 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();
}
Один из шорткодов - это [логотип], и его заменяют тегом img.Как я упоминал ранее: это изображение отлично работает в первом PDF, но не в других PDF.