对于生成的pdf文件,静态图像不显示飞碟和百里香

时间:2018-05-06 19:44:30

标签: java image static thymeleaf flying-saucer

我使用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://..推荐我的图片。)

2 个答案:

答案 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中的相关方法是resolveURIsetBaseURL

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}"/>