最近我开发了一个可以生成PDF的Laravel应用程序,开发过程是在ubuntu 21.10中使用Laravel sail完成的,并且它已经部署到IIS 10的Windows服务器上。
PDF包含使用编码svg呈现的图像:
<img style="width: 200px;" src="data:image/svg+xml;base64,{{ $base64_image }}" alt="">
$base64_image
由以下代码行获得:
base64_encode(str_replace('<svg', '<svg fill="#000000" ',file_get_contents("img/image.svg"))),
这一行使用file_get_contents()
函数检索svg图像,然后用#000000(黑色)填充svg,最后转换为base64字符串。
所以基本上我的<img>
接收到的是一个普通字符串。这种方法在我的ubuntu开发服务器上完美地工作,但在IIS中根本没有显示图像。
我已经试过了:
- 更新IIS站点管理器中的MIME类型。
- 网页更新。配置允许SVG
- 我已经使用了一个url的PNG图像托管在线
基本上在IIS服务器上,生成PDF时根本没有显示任何图像,只有一个带有消息
的正方形图片未找到或类型未知
我能解决这个问题。
我之前的评论让我认为这不是DomPDF的问题,而是IIS以某种方式阻止内容的问题。经过一番调查,我发现:CSS,图像,JS没有加载在IIS
基本上IIS默认阻止静态内容,PDF作为静态文档,无法正确呈现。允许静态内容在网站中解决了这个问题。