Dompdf远程图像未以pdf格式显示

时间:2013-03-01 08:04:19

标签: php image dompdf

在我的服务器上,通过dompdf生成的pdf没有显示图像。 因为它们是远程网址图像。(本地图像工作正常) 然后我才知道它需要一些设置来渲染远程图像。

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的问题,我在我的localhost中设置了false,它现在提供与服务器相同的输出。

所以,现在问题是现在我想用allow_url_fopen = false显示PDF格式的远程图像

  • 我尝试了近5到10种独特的方法来做到这一点。
  • 我试图在php文件中显示图像(通过设置标题)然后 以pdf格式显示php链接
  • 我试图通过绝对路径显示图像到PHP,但没有 工作
  • 我尝试通过curl在一个函数中获取图像,然后显示 它在一个php文件中...但没有运气。

有没有人可以建议我如何以pdf格式显示图像。 我一直得到的错误是......

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

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

18 个答案:

答案 0 :(得分:29)

我有同样的问题, dompdf image not found on live server

我找到了它的解决方案,你只需要仔细检查图像路径,

考虑您的实时服务器图像路径

<img src="http://www.example.com/public/images/thumb.png">

您只需将其更改为

即可
<img src="public/images/thumb.png">

注意:请确保所有设置与您已完成的设置相同。

我希望这会对你有所帮助。

答案 1 :(得分:28)

尝试

$options = new Options();
$options->set('isRemoteEnabled', true);
$dompdf = new Dompdf($options);

答案 2 :(得分:7)

有两件事需要处理。

  1. 如果使用来自同一服务器的图像,则使用完整目录路径,例如 /var/www/html/project_folder/images/logo.jpg

  2. 列表项使用JPEG图片代替png或其他类型。

答案 3 :(得分:1)

这是因为,DOMPDF 无法访问服务器上的图片,请检查您是否添加了任何保护来访问您的网页。

答案 4 :(得分:1)

您好,我对此问题的解决方案是在我的php.ini文件中添加启用allow_url_fopen

答案 5 :(得分:0)

我使用了这行代码

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

一切正常。谢谢。

答案 6 :(得分:0)

尝试对.jpg图片使用完整目录路径

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

答案 7 :(得分:0)

我在图片上也遇到了同样的问题,我的解决方法是:

getcwd().'path/to/image'

对我有用!

答案 8 :(得分:0)

转到库/ dompdf / scr / option

change private $ isRemoteEnabled = false;私有$ isRemoteEnabled = true;

答案 9 :(得分:0)

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

有时,它可能是基于无效的url(例如https)和无效的ssl证书而发生的。因此无法访问dompdf的渲染器获取内容的URL。检查您的内容是否包含不安全的网址。如果您在浏览器中使用带有process as unsafe选项的网址,请使用以下方法。它将网址替换为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);

答案 10 :(得分:0)

经过大量的研发,我终于遇到了同样的问题。首先,您需要获得dompdf的选项,然后将isRemoteEnabled设置为true。

    $options = $dompdf->getOptions(); 
    $options->set(array('isRemoteEnabled' => true));
    $dompdf->setOptions($options);

答案 11 :(得分:0)

我给你一个带有函数的例子

  $html = $this->output->get_output();
        $this->load->library('pdf');
        $this->dompdf->loadHtml($html);
        $this->dompdf->set_option('isRemoteEnabled', true);
        $this->dompdf->setPaper('A4', 'portrait');
        $this->dompdf->render();
        $this->dompdf->stream("studentidcard.pdf", array("Attachment"=>0));

将isremoteenabled设置为true以显示远程图像

答案 12 :(得分:0)

您是否可以在用于打开PDF的计算机上的Web浏览器中访问这些网址?如果没有,PDF阅读器将无法使用。

我怀疑“localhost”域意味着这些URL只能从生成PDF的Web服务器中看到。您需要输出类似http://example.com/dompdf/image.jpg

的网址

(要解决这个问题,请记住,有充分的理由不使用远程图像。例如,如果观看者没有连接到互联网,文档看起来会很糟糕。是否可以嵌入图像直接在文件中?)

答案 13 :(得分:0)

万一有人和我有同样的问题:

  • 我将src =“ https ://”更改为src =“ http ://”并且图片已正确加载。

    < / LI>
  • 我还在<style>内添加了所有CSS内联,而不是通过<link>

  • 加载
  • 并确保CSS <style>位于<head>而不是<body>

答案 14 :(得分:0)

我遇到的同样问题,我在“dompdf / dompdf_config.inc”中也设置了“DOMPDF_ENABLE_REMOTE =&gt; true”,但没有用。

有一件事对我有用 将images / css的 src 绝对更改为相对和完成的事情。在这种情况下,我的服务器上有所有的css / images。

答案 15 :(得分:0)

我想你可以添加这个

private function change_url_image($data, $url) {    
    $str = $url; //for example "http://localhost/yoursite/";
    $str2 = str_replace($str, "", $data);
    return $str2;
}

更改图片的网址

答案 16 :(得分:0)

dompdf目前没有区分本地域和远程域的机制,因此任何启动http:// ...的URL都被视为远程。此外,任何使用基于PHP的中介(如pic.php)的图像都不能使用本地路径,因为除非您通过Web服务器,否则不会解析PHP。

这是一个艰难的前景,但您的页面是动态生成的。所以我看到两个选择:

  1. 下载远程图像并在本地文件系统上链接到它们
  2. 下载远程图像并使用数据URI。
  3. 由于您已经尝试使用curl获取图像,因此您应该能够实现其中任何一种。

答案 17 :(得分:-1)

转到dompdf_config.inc.php文件并将变量DOMPDF_ENABLE_REMOTE设置为TRUE ...