我正在使用 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 中却不行。