Image not found or type unknown (using tinymce with dompdf to show html stored in tinymce textarea in a pdf)

試著忘記壹切 提交于 2019-12-12 17:19:11

问题


I'm using tinymce with image upload using the package "laravel-tinymce-simple-imageupload". When the user enters some content in the textarea and clicks the form submit button I want to put the content in the textarea in a pdf file. I have the code below.

The issue is that in the pdf file, if is inserted an image in the textarea, the image doesn't appear in the pdf and in the pdf appears "Image not found or type unknown".

Do you know what can be the issue?

The image is stored like this in the content column of the certificates table:

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

Code to get the 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 code has relative_urls as 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();
    }
});

I already use "setOptions(['isHtml5ParserEnabled' => true, 'isRemoteEnabled' => true])" but also dont works with that, it show the same error.

It seems that the issue can be because is necessary to change the url path of the image. But Im not understanding how to do that since the user only selects a image in the the tinymce textarea how to change the absolute path of that image.


回答1:


This is a reported issue: https://github.com/dompdf/dompdf/issues/1659 .

Suggest you:

  1. set relative_urls to true (this will set the image as img/image_15zdbBr.jpeg, and
  2. set $dompdf->setBasePath($base_path) where $base_path is where the files sit. (https://github.com/dompdf/dompdf/wiki/Usage#setbasepath)

Edit with salient bits from chat:

  1. As you are using a wrapper for Laravel, You need to get a handle on the domPDF class which you will do through $pdf->getDomPDF()->setBasePath();
  2. As the relative file path is ../../../image/file.jpg, this means "start at the "base directory, go back one, go back one, go back one, go into img/, find file". So the "base directory" needs to be ahead of the the files to take accound for the fact you're going back.

Working example:

  • Your actual file is located (for real) in /home/john/projects/proj/public/img/image.jpeg
  • Relative file path (provided) = ../../../img/image.jpeg
  • So you configure your setBasedirectory = /home/john/projects/proj/public/a/b/c/
  • Combined this gives you /home/john/projects/proj/public/a/b/c/../../../img/image.jpeg
  • Which is the same as /home/john/projects/proj/public/a/b/../../img/image.jpeg
  • Which is the same as /home/john/projects/proj/public/a/../img/image.jpeg
  • Which is the same as /home/john/projects/proj/public/img/image.jpeg = Bingo.

If this doesn't work, adjust your setBaseDirectory until you get the right path.



来源:https://stackoverflow.com/questions/51316035/image-not-found-or-type-unknown-using-tinymce-with-dompdf-to-show-html-stored-i

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!