本例以Java JDK1.8, Maven, thymeleaf 为基础,演示使用thymeleaf的模版来生成pdf文件。
项目总览
为了快速的创建应用,我选择以SpringBoot
为基础来进行创建,首先在我们的https://start.spring.io/
生成一个带有thymeleaf
依赖的一个项目。
在pom.xml
可以查看到关于thymeleaf
的依赖:
1 2 3 4
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
|
关于版本,需要在spring-boot-starter-parent
的属性配置里面可以查看到。以本例中的使用的SpringBoot 2.3.1.RELEASE
为例,thymeleaf
的版本为3.0.11.RELEAS
。
实际上thymeleaf
只是一个模版引擎,要生成pdf
文件还是需要借助另外的库来进行生成,这里使用flyingsaucer
,关于更多flyingsaucer
的信息,可以参阅:https://github.com/flyingsaucerproject/flyingsaucer
这里添加flyingsaucer
依赖:
1 2 3 4 5
| <dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>flying-saucer-pdf-itext5</artifactId> <version>9.1.6</version> </dependency>
|
生成pdf
文件
首先需要先准备使用thymeleaf
模版的一个html, demo.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"/> <title>This is demo</title> </head> <body> <div> <h1>Demo</h1> <div style="color:red;"> <p th:text="'Hi ' + ${name}"></p> Generating pdf files when using thymeleaf! </div> </div> </body> </html>
|
接下来,需要通过模版引擎来读取html
文件,然后使用flyingsaucer
来生成pdf
文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| @Override public void run(String... args) throws Exception { Context context = new Context();
context.setVariable("name", "Java");
String html = this.templateEngine.process("demo", context);
String outputFolder = "demo.pdf";
OutputStream outputStream = new FileOutputStream(outputFolder);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocumentFromString(html); renderer.layout();
renderer.createPDF(outputStream);
outputStream.close(); }
|
执行完代码之后,我们可以看到pdf
文件的效果:
代码
完整代码例子可以通过github
来进行查看:https://github.com/duliu1990/dev-website-code/tree/master/thymeleaf-generate-pdf
Author:
Darren Du
License:
Copyright (c) 2019 MIT LICENSE