找不到图像或输入未知类型(将tinymce与dompdf一起使用,以pdf格式显示在tinymce textarea中存储的html)

时间:2018-07-13 00:08:31

标签: php jquery laravel tinymce dompdf

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

问题在于,在pdf文件中,如果在文本区域中插入了图像,则该图像不会出现在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文本区域中的图像,如何更改该图像的绝对路径。

1 个答案:

答案 0 :(得分:2)

这是一个已报告的问题: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,直到找到正确的路径。