Dompdf远程图片在PDF中未显示

30

在我的服务器上,通过dompdf生成的PDF文件无法显示远程URL图片(本地图片可以正常工作)。后来我知道它需要一些设置才能渲染远程图片。

allow_url_fopen = true => i can not as server control is not in my hand.(and no one will suggest to do this due to security reasons)
read/write access to the DOMPDF_TEMP_DIR (already have this)
DOMPDF_ENABLE_REMOTE = true (already have this)

为了解决allow_url_fopen的问题,我在本地设置为false,现在输出与服务器相同。

现在的问题是,我想在allow_url_fopen = false的情况下显示远程图片到PDF中

  • 我尝试了5-10种不同的方法。
  • 我尝试通过设置头文件来在php文件中显示图像,然后在pdf中显示php链接。
  • 我也尝试通过绝对路径来显示图像,但都没有效果。
  • 我尝试通过一个函数获取图像,然后在php文件中显示,但没有成功。

请问有谁能建议我如何在pdf中显示图像。我一直得到的错误是...

Image not found
http://localhost/dompdf/image.php

并且

Image not found
http://localhost/dompdf/image.jpg

你找到任何解决方案了吗?我也遇到了同样的问题,图片在本地主机上显示正常,但在生产服务器上却不行,路径没问题,图片已经存在于服务器上。 - Irfan Ahmed
还没有找到它。 - TechCare99
27个回答

0

尝试使用完整的目录路径和 .jpg 图像。

我意识到当您远程托管文件时,jpg 图像会出现。


0

我使用了这行代码

<img src="{{ url('/frontened/images/jeevan-green-logo.png') }}" >

它运行正常。谢谢。


0
$data = {{any html content with src & href links}}

有时可能会出现基于不安全的url(如具有无效ssl证书的https)的情况。因此,dompdf的渲染器无法访问该url以获取内容。检查您的内容是否有任何不安全的url。如果您在浏览器中使用了process as unsafe选项来使用该url,请使用以下方法。它将url替换为abspath。
$url = "https://example.com";
$abspath="/home/public_html/example" || getcwd();
$data =  preg_replace('#(src=\"[\s\r\n]{0,})('.$url.')#','$1'.$abspath, $data);
$data =  preg_replace('#(href=\"[\s\r\n]{0,})('.$url.')#','$1'.$abspath, $data);

0

我遇到了同样的图片问题,花了3天时间做研究,最终找到了一个适当的解决方案来解决这个 dompdf 问题。

首先,您需要使用下面的示例在 dompdf 库中启用远程标志。

$dompdf = new Dompdf();
$dompdf->set_options(['isHtml5ParserEnabled' => true, 'isRemoteEnabled' => true]);
$html = file_get_contents($html_file_path);
$dompdf->load_html($html);
$dompdf->set_paper($paper, $orientation);
$dompdf->render();
$dompdf->stream($filename . '.pdf', array('Attachment' => 1));

请确保您已安装以下所述的一些PHP扩展 dompdf需要

> extension=mbstring
> extension=gd2
> extension=curl 
> extension=fileinfo

如果你遇到任何问题,请按照上述步骤操作,如果仍然无法解决,请联系我,我会帮助你解决问题。 祝编程愉快!


0
在我的情况下,使用Symfony,我需要这样做:
$dompdf = new Dompdf(array('enable_remote' => true));
    $dompdf->setProtocol('https://');
    $dompdf->setBaseHost($this->requestStack->getCurrentRequest()->getHttpHost());
    $context = stream_context_create([
        'ssl' => [
            'verify_peer' => FALSE,
            'verify_peer_name' => FALSE,
            'allow_self_signed'=> TRUE
        ]
    ]);
    $dompdf->setHttpContext($context);
    $dompdf->loadHtml($htmlContents);
    $dompdf->render();
    $output =  $dompdf->output(array("compress" => 1));
    return $output;

在我的分支上,为了我的形象:
<div><img src="/theme/images/my-image.png"></div>

0
在我的情况下,我试图使用HTTPS URL加载本地图片,但是使用了一个不受信任的自签名证书。为了使其正常工作,我不得不添加以下内容:
  $dompdf->setHttpContext(
      stream_context_create([
          'ssl' => [
              'allow_self_signed'=> TRUE,
              'verify_peer' => FALSE,
              'verify_peer_name' => FALSE,
          ]
      ])
    );

-3

前往dompdf_config.inc.php文件并将变量DOMPDF_ENABLE_REMOTE设置为TRUE...


1
你难道没看到他已经在做你回答的相同的事情了吗? - Irfan Ahmed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接