首页 > 解决方案 > 找不到图像或类型未知(使用 tinymce 和 dompdf 以显示存储在 pdf 中 tinymce textarea 中的 html)

问题描述

我正在使用 tinymce 使用包“laravel-tinymce-simple-imageupload”进行图像上传。当用户在 textarea 中输入一些内容并单击表单提交按钮时,我想将 textarea 中的内容放在 pdf 文件中。我有下面的代码。

问题是在 pdf 文件中,如果在 textarea 中插入图像,则图像不会出现在 pdf 中,并且 pdf 中会出现“找不到图像或类型未知”。

你知道可能是什么问题吗?

图像在证书表的内容列中存储如下:

<p>test<img src="/img/image_15zdbBr.jpeg" alt="" width="1200" height="900" /></p>

获取pdf的代码:

$certificateContent = RegistrationType::with('certificate')->where('id', $request->registrationType)->first();
$pdf = app()->make('dompdf.wrapper');
$pdf->loadHTML($certificateContent->certificate->content);
return $pdf->download('test.pdf');

Tinymce 代码的 relative_urls 为 false:

tinymce.init({
    selector:'textarea',
    plugins: 'image code link',
    relative_urls: false,
    file_browser_callback: function(field_name, url, type, win) {
        // trigger file upload form
        if (type == 'image') $('#formUpload input').click();
    }
});

我已经使用了“setOptions(['isHtml5ParserEnabled' => true, 'isRemoteEnabled' => true])”,但也不能使用它,它显示相同的错误。

似乎问题可能是因为需要更改图像的 url 路径。但我不明白如何做到这一点,因为用户只选择了 tinymce 文本区域中的图像如何更改该图像的绝对路径。

标签: phpjquerylaraveltinymcedompdf

解决方案


这是一个报告的问题:https ://github.com/dompdf/dompdf/issues/1659 。

建议你:

  1. 将 relative_urls 设置为 true(这会将图像设置为img/image_15zdbBr.jpeg, 和
  2. 设置$dompdf->setBasePath($base_path)$base_path 是文件所在的位置。(https://github.com/dompdf/dompdf/wiki/Usage#setbasepath

使用聊天中的重要信息进行编辑:

  1. 当您使用 Laravel 的包装器时,您需要掌握将通过的 domPDF 类的句柄$pdf->getDomPDF()->setBasePath();
  2. 由于相对文件路径是../../../image/file.jpg,这意味着“从”基目录开始,后退一,后退一,后退一,进入img/,查找文件”。所以“基目录”需要在前面你要回去的事实要考虑的文件。

工作示例:

  • 您的实际文件位于(真实)/home/john/projects/proj/public/img/image.jpeg
  • 相对文件路径(提供)=../../../img/image.jpeg
  • 所以你配置你的 setBasedirectory =/home/john/projects/proj/public/a/b/c/
  • 结合这给你/home/john/projects/proj/public/a/b/c/../../../img/image.jpeg
  • 这与/home/john/projects/proj/public/a/b/../../img/image.jpeg
  • 这与/home/john/projects/proj/public/a/../img/image.jpeg
  • 这与/home/john/projects/proj/public/img/image.jpeg= Bingo 相同。

如果这不起作用,请调整您的 setBaseDirectory 直到获得正确的路径。


推荐阅读