在上线服务器上,HTML中的
无法在mPDF中渲染,但 $mpdf->Image() 可以正常工作
我在mPDF上遇到一个问题:HTML <img> 标签在上线服务器上无法渲染,但在本地localhost上工作正常。
可行的做法:
使用直接的mPDF方法:
$mpdf->Image('https://example.com/images/test.png', 10, 10, 50);
这在上线服务器上图片显示正常。
不起作用的情况:
使用HTML:
<img src="https://example.com/images/test.png" width="100">
当我把这段HTML传给mPDF时:
$mpdf->WriteHTML($html);
图片在上线服务器上没有显示。
环境:
- mPDF版本:8.2.30
- PHP版本:8.2.0
- 在本地(XAMPP)可用,在上线服务器失败
我已检查的事项:
- 浏览器可以访问图片URL
- mPDF未抛出错误
- 文件权限看起来正常
问题:
为什么 <img> 在上线服务器的mPDF中不渲染,而 $mpdf->Image() 可以?
是否存在某些设置(例如 allow_url_fopen、SSL,或基路径问题)可能导致这种情况?
竭诚欢迎任何帮助
解决方案
第一步要做的事:
将你的 $html改为:
$html='<img src="https://pdimagearchive.org/assets/pdr-logo_2x-transparent.png">';
然后再试一次。这将使 $mpdf->WriteHTML($html); 起作用。
接下来是详情:
根据官方文档(image方法)[链接],mPDF的 image 方法将文件名作为第一个参数传递:
void Image ( string $filename, int $x, int $y, int $width = 0, int $height = 0, string $ext = '', string $href_link = '', bool $paint = true, bool $constrain = true, bool $is_watermark = false bool $shownoimg = true, bool $allowvector = true)
如果 $filename能解析为有效的图片,这将起作用
然而,对于 WriteHTML 方法,第一个参数将是 UTF-8 encoded HTML code to write to the document
因此,当服务器存在任何限制时,服务器可能(并且确实会)限制PDF生成器通过URL来检索图片。
限制对资源访问的其中一个示例,如JavaScript、图片、CSS、字体,是内容安全策略(CSP):
请参阅 此参考
因此,对于没有资源访问限制的服务器,writeHTML代码将能够检索图片,例如如下:
<?php
require_once __DIR__ . '/vendor/autoload.php';
// Create an instance of the class
$mpdf = new \Mpdf\Mpdf();
$string1='<img src="https://pdimagearchive.org/assets/pdr-logo_2x-transparent.png">';
// Write some HTML code
$mpdf->WriteHTML($string1);
// Output a PDF file directly to the browser
$mpdf->Output();
?>
PDF将没问题(其中包含图片),如下所示:
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。
