我正在使用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。错误日志中没有错误(我确实启用了错误记录)。
---编辑: 图像的“路径”是绝对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-tag取代。正如我之前提到的:该图像在第一个PDF中正常工作,但在其他PDF中没有。
答案 0 :(得分:2)
升级到dompdf 0.6beta2解决了这个问题。谢谢Fabien!