#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 устранило эту проблему. Спасибо, Фабьен!