dompdf:找不到图像或类型未知

dompdf : image not found or type unknown

这是我的代码, 我主要尝试了所有在 PDF 上显示图像的方法,但仍然没有用。 你能帮我解决这个问题吗? 我还将 DOMPDF_ENABLE_REMOTE 设置为 true,结果仍然相同。

require_once("dompdf/autoload.inc.php");
//require('WriteHTML.php');
$html = '<body>
 <div id="watermark"><img src="/var/htdocs/PDF/header.png" height="100%" width="100%"></div>
  <div id="header">
    <h3 style="padding-top:10px;">'.$_POST['name'].'</h3>
  </div>
  <div id="footer">
    <h3 style="padding-top:8px; padding-right:25px;" class="CIJ">ABSOLUTE MARKET INSIGHTS</h3>
  </div>
   <div>
    <br><br><div class="ooo" style="padding-top: 20px;">'.$_POST['comment'].'</div>
  </div>
</body>';

use Dompdf\Dompdf;
$dompdf = new Dompdf();
$canvas = $dompdf->get_canvas();
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream($_POST["name"], array("Attachment" => false));

你试过全path/url:
<img src="http://domain.com/var/htdocs/PDF/header.png" height="100%" width="100%">

或者使用更可变的解决方案:

$baseurl = "http://www.domain.com";
echo '<img src="' . $baseurl . '/var/htdocs/PDF/header.php" height="100%" width="100%">';

您应该使用完整的 URL 而不是直接路径。特别是当它不是静态图像时:dompdf 将直接打开那个 php 脚本,因此它不会像 PHP 脚本一样执行。

如果完整的 URL 不起作用,您还可以显示 header.php 的结果。要记住的一些好事是发送正确的 content-type headers 等等。

在mac上会产生以下错误,但在Dompdf中不会显示此错误消息。

“无法在 /var/folders/cc/nxb7r62n4vb0dds455ss6pw0000gn/T 中创建临时图像”

$options = new Options();
$options->setTempDir('temp'); // temp folder with write permission

$dompdf = new Dompdf();
$dompdf->setOptions($options);

终于找到了适用于任何服务器的正确解决方案 -> 在 Img src 属性中使用 Base64 :)

您需要添加 'isRemoteEnabled' => true

return PDF::setOptions(['isHtml5ParserEnabled' => true, 'isRemoteEnabled' => true])->loadView('reports.invoiceSell')->stream();

我尝试了上面的所有其他解决方案 - 但唯一对我有用的是将图像保存在 dompdf 文件夹中,然后从该文件夹中引用它们。

另一种适用于 1.0.2 版的替代方法是对文件进行更改。

dompdf/src/Image/Cache.php

将变量 ($chrootValid) 设置为 true

$chrootValid = true;

*在这种情况下你不能有完整的路径

最终我找到了适用于任何服务器的正确解决方案 -> 在 Img src 属性中使用 Base64,如下所示:

<img src="{{$variable['signature']}}" />