将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();}}