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

Php Dompdf远程图像未以pdf格式显示,php,image,dompdf,Php,Image,Dompdf,在我的服务器上,通过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

在我的服务器上,通过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,它现在提供与服务器相同的输出

所以,现在的问题是,我想在PDF中显示远程图像,并且允许url\u fopen=false

  • 我尝试了5-10种独特的方法来做到这一点
  • 我尝试在php文件中显示图像(通过设置标题),然后 以pdf格式显示php链接
  • 我也试图通过php的绝对路径显示图像,但什么也没有 成功了
  • 我尝试通过函数中的curl获取图像,然后显示 它在一个php文件中…但是没有运气
是否有人可以建议我如何在pdf中显示图像。 我经常犯的错误是

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


你能在你用来打开PDF的机器上的网络浏览器中找到这些URL吗?如果没有,PDF阅读器也不能

我怀疑“localhost”域意味着这些URL只在生成PDF的web服务器上可见。您需要输出一个url,如


(要解决此问题,请记住,有充分的理由不使用远程图像。例如,如果查看器未连接到internet,文档将看起来很糟糕。是否可以直接将图像嵌入文档中?)dompdf目前没有区分本地域和远程域的机制,因此任何启动的URLhttp://... 被视为远程。另外,任何使用基于PHP的中介(如pic.PHP)的图像都不能使用本地路径,因为除非您通过web服务器,否则不会解析PHP

这是一个困难的前景,但您的页面是动态生成的。因此,我看到两种选择:

  • 下载远程图像并在本地文件系统上链接到它们
  • 下载远程图像并使用数据URI

  • 由于您已经解决了使用curl获取图像的问题,您应该能够实现其中任何一个。

    转到dompdf\u config.inc.php文件,并将变量dompdf\u ENABLE\u REMOTE设置为TRUE…

    我认为您可以添加此选项

    private function change_url_image($data, $url) {    
        $str = $url; //for example "http://localhost/yoursite/";
        $str2 = str_replace($str, "", $data);
        return $str2;
    }
    
    要更改图像的url,我遇到了相同的问题,

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

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

    <img src="http://www.example.com/public/images/thumb.png">
    
    
    
    你只需要把它改成

    <img src="public/images/thumb.png">
    
    
    
    注意:确保所有设置都与您已经进行的设置相同


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

    有两件事需要注意

  • 如果使用来自同一服务器的映像,则使用完整目录路径,例如。
    /var/www/html/project\u folder/images/logo.jpg

  • 列表项使用
    JPEG
    图像,而不是
    png
    或其他类型


  • 在“DOMPDF/DOMPDF\u config.inc”中设置“DOMPDF\u ENABLE\u REMOTE=>true”时,我也遇到了同样的问题,但没有成功

    有一件事对我有效 将图像/css的src绝对更改为相对并完成操作。在这种情况下,我的服务器上有所有css/图像。

    试试看

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

    以防有人和我有同样的问题:

    • 我将src=“https:/”更改为src=“http:/”,图像加载良好

    • 我还将所有CSS内联添加到
      中,而不是通过
      加载

    • 并确保CSS
      位于
      而不是


      • 我使用了这行代码

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

        很好用。谢谢。

        我给你举一个函数的例子

          $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以显示远程图像

        我做了大量的研发工作后也遇到了同样的问题,最终得到了解决方案。首先,您需要获得dompdf的选项,然后将
        isremoteenabled设置为true

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

        嗨,我解决这个问题的方法是在php.ini文件中添加启用allow_url_fopen

        $data = {{any html content with src & href links}}
        
        有时,它可能基于不安全的url(如带有无效ssl证书的
        https
        )发生。因此,无法通过url访问dompdf的呈现程序以获取内容。检查您的内容是否有任何不安全的url。如果您在浏览器中将该url与
        过程作为不安全的
        选项一起使用,请使用以下方法。它将替换指向abspath的url

        $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);
        

        转到library/dompdf/scr/option


        更改私有$isRemoteEnabled=false;to private$isRemoteEnabled=true

        我对图像也有同样的问题,我的解决方案是:

        getcwd().'path/to/image'
        

        这对我有用

        尝试使用.jpg映像的完整目录路径


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

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

        此处用户正在查看我的网站并动态生成pdf,例如,我正在pdf中显示他的个人资料图片。(profilepic在cdn服务器上)所以可能我可以提供像cdnserver.com/user/12.jpg这样的链接,或者另一种方式是myserver.com/user\u profiles/pic.php?id=12这两种方式都不起作用,用户可以访问互联网。你没有看到,他已经在做同样的事情了吗?你找到解决方案了吗?我也遇到同样的问题,图像在本地主机上显示正常,但在live server上显示不正常,路径正常,图像已在服务器上。否。仍然没有找到它。+1从半个n小时开始搜索这个问题,这一个真的很有帮助。@irfan Ahmed感谢您的解决方案如果图像名称有空格,则获取问题。谢谢。这对我有帮助。顺便说一句,我不得不删除公共文件。“”希望这能帮助其他人。我也必须使用Options类,就像这样:
        use Dompdf\Options
        在我的例子中,
        $dompdf=newdompdf()$dompdf->set_选项('isRemoteEnabled',TRUE)
        
        getcwd().'path/to/image'