Проблема с изображением внутри цикла PDF - PullRequest
0 голосов
/ 11 ноября 2011

Я использую 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.

1 Ответ

2 голосов
/ 14 ноября 2011

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

...