当前位置: 首页 > 知识库问答 >
问题:

使用Spring Boot、飞碟和Thymeleaf的PDF模板中未显示图像

胡俊弼
2023-03-14

我使用Spring Boot、flying Discer和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文件时,我得到一个错误:

组织。特里梅莱夫。例外情况。TemplateProcessingException:Link base“static/images/mastercard.png”不能与上下文相关(/)或与页面相关,除非您实现组织。特里梅莱夫。上下文IWebContext接口(上下文属于类:org.thymeleaf.context.context)

共有3个答案

薛浩言
2023-03-14

使用标准html src atribute和来自项目根的相对路径。

您可以将映像放在项目的根目录中并像这样使用它:

<img src="mastercard.png" />

如果要为文件夹分配资源,可以这样设置:

<img src="src/main/resources/static/images/mastercard.png" />
公冶元青
2023-03-14

为了在飞碟生成的PDF中嵌入图像,

1)将图像转换为Base64编码字符串。

Path path = Paths.get("src/main/resources/static/images/mastercard.png");
String base64Image = convertToBase64(path);

函数将存储在如上所示路径中的图像转换为base64编码字符串

private String convertToBase64(Path path) {
    byte[] imageAsBytes = new byte[0];
    try {
      Resource resource = new UrlResource(path.toUri());
      InputStream inputStream = resource.getInputStream();
      imageAsBytes = IOUtils.toByteArray(inputStream);

    } catch (IOException e) {
      System.out.println("\n File read Exception");
    }

    return Base64.getEncoder().encodeToString(imageAsBytes);
  }

2) 在thymeleaf上下文中设置base64编码图像

    Context context = new Context();
    String image = "data:image/png;base64, " + base64Image;
    context.setVariable("image",  image);

    String html = templateEngine.process("template", context);

3) 在HTML中,设置图像的值,如下所示:

<img th:src="${image}" style="width: 200px; height=100px"/>

4) 最后,将HTML模板呈现为PDF

  ITextRenderer renderer = new ITextRenderer();
  renderer.setDocumentFromString(html); // html -> String created in Step 2
  renderer.layout();
  final ByteArrayOutputStream baos = new ByteArrayOutputStream();
  renderer.createPDF(baos)

现在,您有了生成的PDF的byteArrayOutputStream,您可以使用它选择将它们存储到文件服务器或以您选择的格式将其提供给客户端。

徐涵亮
2023-03-14

尝试使用Spring的类路径:前缀。这将直接从类路径加载文件,无论您是从运行。jar或在您的IDE中。下面是一个示例

<img alt="mastercard" th:src="@{classpath:static/images/mastercard.png}" />

有关类路径的更多信息,请参阅官方文档。

 类似资料:
  • 我正在创建一个包含希腊字符的XHTML。在下面找到一个简单的例子。 当我打印结果时,我得到了。 有什么能帮忙的吗?

  • 本文向大家介绍SpringBoot中的Thymeleaf模板,包括了SpringBoot中的Thymeleaf模板的使用技巧和注意事项,需要的朋友参考一下 一、前言     Thymeleaf 的出现是为了取代 JSP,虽然 JSP 存在了很长时间,并在 Java Web 开发中无处不在,但是它也存在一些缺陷: 1、JSP 最明显的问题在于它看起来像HTML或XML,但它其实上并不是。大多数的JS

  • 本文向大家介绍springboot中thymeleaf模板使用详解,包括了springboot中thymeleaf模板使用详解的使用技巧和注意事项,需要的朋友参考一下 这篇文章将更加全面详细的介绍thymeleaf的使用。thymeleaf 是新一代的模板引擎,在spring4.0中推荐使用thymeleaf来做前端模版引擎。 thymeleaf介绍 简单说, Thymeleaf 是一个跟 Vel

  • 使用飞碟以PDF格式打印图像。 超文本标记语言代码: 当我使用飞碟将HTML转换为PDF时。生成的PDF不会打印图像。 我需要使用任何特定的软件包来打印PDF格式的图像吗。如果你有任何问题,请告诉我。

  • 我使用的罐子来自maven repo 我正在测试的代码来自以前的堆栈解决方案 我担心它可能过时了,因为图书馆被贬值了。测试以下代码时: 这一行我有以下错误:

  • 问题内容: 我正在使用飞碟将XHTML转换为PDF文档。我已经获得了仅可用于基本HTML和嵌入式CSS的代码,但是,现在,我试图将图像添加为PDF的标题。我想知道的是,是否有任何办法通过将图像文件读取为Java Image对象来添加图像,然后以某种方式将其添加到PDF(或XHTML中,就像它获得了虚拟的“ URL”一样)表示可用于呈现PDF的Image对象。有没有人做过这样的事情? 预先感谢您提供