Tips搬砖日记thymeleaf模板
CAMELLIAthymeleaf模板
Thymeleaf 是一种现代化的 Java 模板引擎,主要用于在 web 应用中生成动态 HTML 内容。
1. thymeleaf的使用方法
1.1 引入thymeleaf依赖
1 2 3 4
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
|
在此之前需要引入spring-boot-starter-web
1.2 创建 Thymeleaf 模板
Thymeleaf 模板文件通常放置在 src/main/resources/templates
目录下,文件格式为 .html
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"/> <title>Thymeleaf Test</title> <style> body { font-family: 'SimSun', sans-serif; } </style> </head> <body>
<h1>Hello, Thymeleaf!</h1>
<p th:text="'Welcome, ' + ${english} + '!'">Welcome, Guest!</p> <p th:text="'欢迎, ' + ${chinese} + '!'">欢迎, Guest!</p> </body> </html>
|
[!TIP]
Thymeleaf对Html要求严格,注意标签严格闭合,尤其<meta charset="UTF-8"/>
。
1.3 向模板传值
1 2 3 4 5 6 7 8 9
| @Override public void renderByThymeleaf() { Map<String,Object> varisblesMap = new HashMap<>(); varisblesMap.put("english","Camellia 中文测试"); varisblesMap.put("chinese","小花"); Context context = new Context(); context.setVariables(varisblesMap); String thymeleaf = templateEngine.process("thymeleaf", context); }
|
1.4 Thymeleaf 表达式
Thymeleaf 提供多种表达式来在模板中使用:
- 文本替换:
th:text="${variable}"
,将 HTML 中的内容替换为变量值。
- URL 替换:
th:href="@{/path}"
,用于生成动态 URL。
- 条件判断:
th:if="${condition}"
,根据条件渲染内容。
- 循环遍历:
th:each="item : ${items}"
,用于遍历集合。
到此使用Thymeleaf渲染Html就基本成功了,但是有时我们需要接受前端传来的数据,然后排版打印出来,如订单之类的。
2. HTML转PDF
2.1 添加依赖
1 2 3 4 5 6 7 8 9 10
| <dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>flying-saucer-pdf</artifactId> <version>9.1.22</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13.4</version> </dependency>
|
2.2 将HTML转换为PDF
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| @Override public void convertHtmlToPDF(String html) { ITextRenderer renderer = new ITextRenderer(); ITextFontResolver fontResolver = renderer.getFontResolver(); renderer.setDocumentFromString(html); try (OutputStream outputStream = new FileOutputStream("thymeleaf.pdf")) { String fontPath = getClass().getResource("/static/font/simsun.ttc").getPath(); fontResolver.addFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); renderer.layout(); renderer.createPDF(outputStream); } catch (IOException e) { e.printStackTrace(); } catch (com.lowagie.text.DocumentException e) { e.printStackTrace(); } }
|
2.3 注意事项
[!TIP]
- 中文需要下载中文字体包,并在转换的时候添加进去。
- 在前面的HTML模板也要指定所用的字体,否则即使添加了中文字体也不起作用。