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

Posted

技术标签:

【中文标题】dompdf:找不到图像或类型未知【英文标题】:dompdf : image not found or type unknown 【发布时间】:2017-03-16 21:03:01 【问题描述】:

这是我的代码, 我主要尝试了所有在 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"  ></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));

【问题讨论】:

如果您仍然在图像中遇到问题,那么您可以在此文件上调试问题:vendor/dompdf/dompdf/src/Image/Cache.php 您将从哪里得到问题的理解正在发生。 【参考方案1】:

您是否尝试过完整路径/网址:&lt;img src="http://domain.com/var/htdocs/PDF/header.png" height="100%" width="100%"&gt;

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

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

【讨论】:

不工作。 :( 而domain.com/var/htdocs/PDF/header.png 正在返回图像?图像是否可以公开访问,因为我在开发中使用了 ip 阻塞,然后 DomPDF 无法检索图像。 这是我的打字错误,它是“header.png”而不是“.php”,很抱歉给您带来不便【参考方案2】:

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

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

【讨论】:

其实是我的错,不是"header.php"而是"header.png" 如果您仍然在图像中遇到问题,那么您可以在此文件上调试问题:vendor/dompdf/dompdf/src/Image/Cache.php 您将从哪里得到问题的理解正在发生。【参考方案3】:

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

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

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

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

【讨论】:

非常感谢。你让我开心。我在我的 MAC 上尝试了太多方法,终于可以正常工作了。【参考方案4】:

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

【讨论】:

我也是。谢谢你的解决方案:)【参考方案5】:

你需要添加 'isRemoteEnabled' => true

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

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

在 1.0.2 版中可以使用的另一种方法是更改​​文件。

dompdf/src/Image/Cache.php

将变量 ($chrootValid) 设置为 true

$chrootValid = true;

*在这种情况下,您不能拥有完整路径

【讨论】:

【参考方案8】:

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

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

【讨论】:

代码示例:

以上是关于dompdf:找不到图像或类型未知的主要内容,如果未能解决你的问题,请参考以下文章

DOMPDF:图像不可读或为空。 (使用 barryvdh/laravel-dompdf)

找不到类型或命名空间名称“...” - Unity Vuforia

使用 Jest 测试 NUXT.js 和 Vue.js 应用程序。获取“在 mapState() 中找不到 [vuex] 模块命名空间”和“[vuex] 未知操作类型”

Outlook 属性访问器错误:属性“ttp://schemas.microsoft.com/mapi/proptag/0x7FFE000B”未知或找不到

SQLSTATE [42S22]:找不到列:1054 'where 子句为啥'中的未知列'4'我找不到错误

如果使用 javascript 或 jQuery 找不到源图像,如何显示图像标题