【问题标题】:Image issue inside PDF loopPDF循环内的图像问题
【发布时间】:2011-11-11 18:14:30
【问题描述】:

我正在使用 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 附件)它显示图像(在所有邮件)完美。

--- 编辑2: 在循环结束时使用函数刷新所有缓冲区(不幸的是,这对我的问题没有任何改变):

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.6 beta 2)吗?它对文件路径和图像进行了改进。 SVN 主干还有一种处理图片文件的新方法,你也可以试试。
  • 嗨 Fabien,感谢您的回复 :-) 我希望避免使用测试版,因为它是测试版(我正在制作的内容应该在实时环境中使用)。但如果你坚持我应该试试,我会:)
  • 在很多方面,0.6 分支都比 0.5 分支更好,并且全局更稳定。

标签: image dompdf


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-08-21
    • 1970-01-01
    • 2011-06-19
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 2022-01-17
    相关资源
    最近更新 更多