在上线服务器上,HTML中的 无法在mPDF中渲染,但 $mpdf->Image() 可以正常工作

前端开发 2026-07-10

我在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将没问题(其中包含图片),如下所示:

enter image description here

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章