我使用Sping Boot ,flying saucer,thymeleaf从HTML模板创建一个PDF文件。但是图像没有显示在我的文件中。
项目结构:
代码html:
<div class="col-xs-6 invoice-col-2">
<img src="../static/images/mastercard.png" alt="mastercard"></img>
</div>
当我将img标签更改为:
<img src="../static/images/mastercard.png" alt="mastercard" th:src="@{static/images/mastercard.png}"></img>
当我创建PDF文件时,我得到一个错误:
org.thymeleaf.exceptions.TemplateProcessingException:链接库“static/images/mastercard.png”不能是上下文相对(/)或页面相对,除非您实现org.thymeleaf.context.IWebContext接口(上下文的类为:org.thymeleaf.context.Context)
5条答案
按热度按时间fzwojiic1#
尝试使用Spring的
classpath:
前缀。这将直接从类路径加载文件,无论您是从.jar
还是在IDE中运行。下面是一个例子:关于
classpath:
的更多信息可以在官方文档中找到。amrnrhlw2#
为了在Flying Saucer生成的PDF中嵌入图像,
1)将图像转换为base64编码的字符串。
函数将存储在如上所示路径中的图像转换为base64编码的字符串
2)在thymeleaf上下文中设置base64编码的图像
3)在HTML中,设置image的值,如下所示:
4)最后,将HTML模板呈现为PDF
现在您有了生成的PDF的byteArrayOutputStream,您可以选择将它们存储到文件服务器或以您选择的格式将其提供给客户端。
zpf6vheq3#
使用标准的html源属性和项目根目录的相对路径。
你可以把你的图像放在项目的根目录下,并像这样使用它:
如果你想要资源文件夹,你可以这样设置:
igetnqfo4#
我面临着同样的问题,但从磁盘阅读图像文件是一点代价,我建议你去与uri-数据
http://www.tothenew.com/blog/using-data-urls-for-embedding-images-in-flying-saucer-generated-pdfs/
因为你无论如何都要读取图像来生成PDF,最好将其保存在模板中。
goqiplq25#
@sangeethapradeep的答案几乎对我有用,除了我需要将svg图像转换为base64。所以我用https://pixelied.com/convert/svg-converter/svg-to-base64来转换我的图像,并包含在代码中,它的工作。