Php 将Tinymce与dompdf集成

Php 将Tinymce与dompdf集成,php,laravel,dompdf,Php,Laravel,Dompdf,Im使用tinymce和图像上传,使用软件包“laravel tinymce simple imageupload”。因此,我有一个页面,用户可以在其中选择注册类型,并在tinymce文本区域中输入一些内容,以将该内容与所选注册类型相关联 在文本区域,用户还可以使用tinymce simple image upload上传图像,这些图像存储在“~/projects/proj/public/img/image_15…”中 内容存储在“内容”列中证书表的数据库中,如: 如下图所示,在html静态模式

Im使用tinymce和图像上传,使用软件包“
laravel tinymce simple imageupload
”。因此,我有一个页面,用户可以在其中选择注册类型,并在tinymce文本区域中输入一些内容,以将该内容与所选注册类型相关联

在文本区域,用户还可以使用tinymce simple image upload上传图像,这些图像存储在“
~/projects/proj/public/img/image_15…”中

内容存储在“内容”列中证书表的数据库中,如:

如下图所示,在html静态模式下,图像将显示在下载的pdf中:

  $pdf = app()->make('dompdf.wrapper');


   $pdf->loadHTML('
    <p>cert1<img src="'.public_path().
    '/img/image_1532441196_7GT.jpeg" 
    alt="" width="1200" height="900" /></p>');


 return $pdf->download('certificates.pdf');
$content变量如下所示:

"""
<div style="page-break-inside: avoid; page-break-after: always;">\n
    <p>cert1<img src="../../../img/image_1532441196_7GT.jpeg" 
    alt="" width="1200" height="900" /></p></div> ▶
</div>
"""
更改:

$pdf->getDomPDF()->setBasePath(public_path().'/../../');
致:

然后你只需要

$pdf->loadHTML('<p>cert1<img src="/img/image_1532441196_7GT.jpeg" 
alt="" width="1200" height="900" /></p>');
您的内容数据存储方式如下:

<p>certificate 1<img src="../../../img/image_1532441196_7GT.jpeg" alt="" width="1200" height="900" /></p>
证书1

要解决此问题,您可以更新数据库中的数据以将其更改为

<p>certificate 1<img src="img/image_1532441196_7GT.jpeg" alt="" width="1200" height="900" /></p>
证书1

或者,您可以在将内容转换为pdf之前对其进行转换:

$content = str_replace('<img src="../../../','<img src="',$content);
$pdf->loadHTML($content);
$content=str_replace('loadHTML($content);
我不知道你为什么要用html存储img src——这是一种糟糕的做法。我也不知道还有哪些地方在使用这些数据。如果这一代pdf是你使用这些数据的唯一地方,你可以修改数据库中的数据,以保持php代码的整洁。但是如果你在其他地方将这些内容与一些页面小部件一起使用,你可能需要保留这些数据。

您必须使用完整的服务器路径。 要解决此问题,必须将
。/../../
替换为
projects/proj/public
像这样做


从那以后它就这样了



非常感谢,$pdf显示的基本路径类似“-basePath:”/Users/john/projects”,下载的pdf中仍然显示错误“Image not found or type unknown”而不是图像。您希望使用什么来代替“
”-basePath:“/Users/john/projects
”?谢谢,但是带有静态html的代码类似“$pdf->loadHTML>(“cert1

”);“有效。问题是内容是静态的,但需要实际使用存储在数据库中的html信息。您在OP中编写的$content变量显示为:……该变量不起作用。它应该是图像文件的完整url。感谢将数据库更改为“cert1”

“图像显示在pdf中。您的文件夹结构是什么?您的应用程序在哪里?图像在哪里?为什么要执行
$pdf->getDomPDF()->setBasePath(public_path()./../../../”;
?项目位于“~/projects/proj”中。使用tinymce上载的图像位于“~/projects/proj/public/img/image_15…””。
$pdf->getDomPDF()->setBasePath(public_path());
$pdf->loadHTML('<p>cert1<img src="/img/image_1532441196_7GT.jpeg" 
alt="" width="1200" height="900" /></p>');
$participant->registration_type->certificate->content
<p>certificate 1<img src="../../../img/image_1532441196_7GT.jpeg" alt="" width="1200" height="900" /></p>
<p>certificate 1<img src="img/image_1532441196_7GT.jpeg" alt="" width="1200" height="900" /></p>
$content = str_replace('<img src="../../../','<img src="',$content);
$pdf->loadHTML($content);
<?php str_replace('../../../','projects/proj/public',$content); ?>
<img src="{{ public_path("projects/proj/public/img/".$ImageName) }}" alt="">