【问题标题】:dompdf is not displaying images in PDF outputdompdf 不在 PDF 输出中显示图像
【发布时间】:2018-01-24 07:47:18
【问题描述】:

我正在尝试使用 dompdf 将 HTML 对象导出为 PDF 文档。仅使用文本,我的示例代码可以正常工作。但是,当在 HTML 代码中包含图像时,该图像根本不会显示在 PDF 中。

我从 javascript 中的 ajax 请求中获取 PDF 流。这是我的示例代码:

JS:

$(document).ready(function () {
    $('#export-pdf').on("click", function () {
        $.ajax({
            url: "html_pdf_export.php",
            success: function (data) {

                printPDF(data, function (htmlText) {
                    var detailWindow = window.open("", "detailPDF");
                    detailWindow.document.write(htmlText);
                    console.log(htmlText);
                    detailWindow.document.close();
                });
            }
        });
    });
});
function printPDF(data, callback) {
    var pdfText = $.trim(data);
    var htmlText = '<embed width="100%" height="100%" type="application/pdf" src="data:application/pdf,'
        + encodeURI(pdfText) + '"></embed>';
    callback(htmlText);
}

PHP:

$dompdf = new Dompdf();
$dompdf->loadHtml("<h1>Das ist ein Header</h1><p>Das ist ein Absatz unter einem Header.</p>
    <img src='./pic.jpg' style='border: 2px solid black; width: 50%;'>");

$dompdf->render();
$dompdf->stream();

现在我只是尝试流式传输 PHP 文件中指定的一些硬编码 HTML 代码,尽管最终目标是渲染通过 ajax 调用传输的 DOM 对象。

【问题讨论】:

  • 由于您使用loadHtml() 和图像引用的相对路径,Dompdf 将查找相对于正在运行的 PHP 脚本的图像。确保您的图像路径相对于该文件是正确的。或者使用文件系统的绝对路径。另一种选择是使用完整路径(带有协议和域),但您需要确保启用远程资源获取。另请参阅requirements 帮助页面。

标签: javascript php ajax pdf dompdf


【解决方案1】:

一个不错的选择是将图像显示为 base64 字符串,使用辅助函数获取相关图像的绝对路径。这里的一个例子是在 yii2 中,但可以在所有 php 框架中实现。

class DompdfImageUtil{
  public static function display($path){
    $image = base64_encode(file_get_contents($path)); 

    return "data:image/png;base64,$image"; 
  }

用法:

<?= Html::img(DompdfImageUtil::display('@app/web/image.png') ?> 

【讨论】:

    【解决方案2】:

    尝试使用图像的绝对路径。

    【讨论】:

    • 我已经尝试过了,但是使用绝对路径(在我的例子中是“localhost/html_export/pic.jpg”)只会向我显示一个黑框,其中的图像会显示消息“找不到图像或输入未知” "
    • 你使用什么服务器?你能用上面的链接打开图片本身吗?
    • 我使用的是 XAMPP apache,图片的链接在我的浏览器中运行良好。
    • 那么试试另一个图像。您的 php 文件只是一个示例,对吗?因为正如我所见,它不使用您的 javascript 中的任何代码...
    【解决方案3】:

    我几乎有同样的问题:如果我使用:

    &lt;img src="../ab/media/cd/img1.jpg"&gt; 它可以工作,但如果我使用:&lt;img src="http://www.Mypage.com/ab/media/cd/img1.jpg"&gt; 它就不能工作。我希望(必须)能够将 dompdf 与第二个链接一起使用,这是正确的,并且当我将其粘贴到浏览器时会找到该图像。

    【讨论】:

    • 您需要将dompdf配置选项“isRemoteEnabled”设置为TRUE
    • 非常感谢这对我有用,应该是这个问题的答案。
    猜你喜欢
    • 2021-12-17
    • 2012-11-10
    • 2013-05-28
    • 2021-09-15
    • 2013-02-15
    • 2017-06-03
    • 2019-09-07
    • 2017-03-30
    相关资源
    最近更新 更多