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

H. *_*tel 3 html php dompdf twitter-bootstrap

这是我的代码,我主要尝试了所有在 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));
Run Code Online (Sandbox Code Playgroud)

小智 18

您需要添加'isRemoteEnabled' => true

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


小智 8

最后我得到了可以与任何服务器一起使用的正确解决方案 - >在 Img src 属性中使用 Base64 :)


小智 7

您可以验证错误是否是因为 Dompdf 版本的安全问题:

$path = 'NameImage.jpg';
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
Run Code Online (Sandbox Code Playgroud)

此代码会将您的图像“转换为 Base64 格式”。这解决了我的问题:)


Isk*_*kar 6

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

如果完整的 URL 不起作用,您还可以显示 header.php 的结果是什么。要记住的一些好处是发送正确的内容类型标头等。

  • 如果您仍然在图像中遇到问题,那么您可以在此文件上调试问题:vendor/dompdf/dompdf/src/Image/Cache.php 您将从问题发生的位置得到了解。 (2认同)