0

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

4

1 回答 1

2

升级到 dompdf 0.6beta2 解决了这个问题。谢谢法比恩!

于 2011-11-14T12:40:33.717 回答