将html格式的文件转为pdf文件
项目依赖jar 包
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.11</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>html2pdf</artifactId>
<version>4.0.3</version>
</dependency>
静态文件html文件模板:
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>2</title>
<style>
/*这是将打印时的页面大小设置为A4大小,并保留好一定的边距 210×297mm*/
/*@page {*/
/* size: 21cm 29.7cm;*/
/* font-size: 14pt;*/
/* color: black;*/
/* line-height: 1.4;*/
/* text-align: justify;*/
/* margin: 0;*/
/* padding: 0;*/
/*}*/
/*body {*/
/* font-family: FZLanTingHei-L-GBK;*/
/* width: 21cm;*/
/* height: 29.7cm;*/
/* margin: 0;*/
/* padding: 0;*/
/* overflow: hidden;*/
/*}*/
/*img{*/
/* width: 21cm;*/
/* height: 29.7cm;*/
/*}*/
</style>
</head>
<body>
<h1 th:text="${title}">Default Title</h1>
<p th:text="${content}">Default Content</p>
<div align="center">
<img th:src="${imagePath}" alt="这是一张美丽的风景照片"/>
</div>
</body>
</html>
代码如下:
public void generatePdf(HttpServletResponse response) throws IOException {
// 将图片转换为Base64编码
// byte[] imageBytes = Files.readAllBytes(Paths.get(imagePath));
// String base64Image = Base64.getEncoder().encodeToString(imageBytes);
// 动态数据
Map<String, Object> data = new HashMap<>();
data.put("title", "Hello, World!");
data.put("content", "This is a dynamic content.");
data.put("imagePath", imagePath); // 路径
// 使用 Thymeleaf 渲染模板
Context context = new Context();
context.setVariables(data);
String htmlContent = templateEngine.process("templates", context);
try (FileOutputStream outputStream = new FileOutputStream(filePath)) {
// 读取HTML模板
HtmlConverter.convertToPdf(htmlContent, outputStream);
} catch (Exception e) {
e.printStackTrace();
}
}