我使用thymeleaf作为我的模板,将XHTML映射到HTML和飞碟,然后生成pdf文件。
现在我无法在y生成的pdf文件中显示位于/ src / main / resources /的静态图像。文件本身将显示正常图像消失。
甚至其他位置如/ src / main / resources / static或/ src / main / resources / public也没有帮助。
我的HTML / XHTML看起来像:
<img src="images/logo_black.png"></img>
<img src="/images/logo_black.png"></img>
<img alt="mastercard" th:src="@{classpath:static/images/logo_black.png}" />
<div data-src="images/logo_black.png"></div>
<div data-src="/images/logo_black.png"></div>
<div data-src="@{classpath:static/images/logo_black.png}"></div>
它们都没有正常工作。
本地主机可以看到图像本身:8048 / logo_black.png
我不想用完整的网址(http://..推荐我的图片。)
答案 0 :(得分:1)
您可以包括来自任何URL的资源(来自Internet或文件系统)。无论哪种方式,都涉及几个步骤:
从Thymeleaf模板生成HTML时,您可以使用
@{/some/url}
来解析相对于您的Web上下文的路径(假设您具有Web上下文),或者@{classpath:/some/url}
与只会将URL保留为classpath:/some/url
,或者${var}
中的值,无论它是绝对URL https://some/url
还是相对URL都无所谓,Thymleaf会将它们在结果HTML中保持不变。 / li>
在将HTML传递给飞碟之前,请确保URL正确。然后,飞碟将使用UserAgentCallback
(默认为ITextUserAgent
)处理所有URL。
UserAgentCallBack
中的相关方法是resolveURI
和setBaseURL
。
resolveURI
(从ITextUserAgent
继承)的默认NaiveUserAgent
方法中存在一些奇怪的逻辑。如果baseURL
为null,它将尝试设置它,因此最好始终自己进行设置。通过覆盖resolveURI
,我得到了更好的结果,以下内容足以保留绝对URL并解析相对于baseURL
的相对URL:
@Override
public String resolveURI(String uri) {
if (URI(uri).isAbsolute())
return uri;
else
return Paths.get(getBaseURL(), uri).toUri().toString();
}
最后,为了解析classpath:
协议,请you need to define an URLStreamHandler
,除非已经定义了一个协议(例如,Spring Boot的嵌入式Tomcat已经支持此协议)。
答案 1 :(得分:0)
您可以在base 64的帮助下渲染图像。您只需在base 64上转换图像,它就会显示在您的网页以及移动视图中。标签为:
<img th:src="@{data:image/png ;base64,your base 64}"/>