springboot html转pdf
时间: 2023-10-14 09:25:31 浏览: 164
你可以使用Thymeleaf和Flying Saucer来实现将HTML转换为PDF的功能。
首先,你需要在pom.xml文件中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf</artifactId>
<version>9.1.20</version>
</dependency>
```
然后,你需要编写一个Controller,将HTML模板渲染为PDF文件:
```java
import java.io.ByteArrayOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.xhtmlrenderer.pdf.ITextRenderer;
@Controller
@RequestMapping("/pdf")
public class PdfController {
private final TemplateEngine templateEngine;
public PdfController(TemplateEngine templateEngine) {
this.templateEngine = templateEngine;
}
@GetMapping
public void generatePdf(@RequestParam String html, HttpServletResponse response) throws Exception {
Context context = new Context();
context.setVariable("content", html);
String processedHtml = templateEngine.process("pdf-template", context);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ITextRenderer renderer = new ITextRenderer();
renderer.setDocumentFromString(processedHtml);
renderer.layout();
renderer.createPDF(outputStream);
response.setContentType("application/pdf");
response.setContentLength(outputStream.size());
response.setHeader("Content-Disposition", "attachment; filename=report.pdf");
response.getOutputStream().write(outputStream.toByteArray());
response.getOutputStream().flush();
}
}
```
在上面的代码中,我们首先使用Thymeleaf将HTML模板渲染为带有动态内容的HTML字符串。然后,我们使用Flying Saucer将HTML字符串转换为PDF格式,并将结果写入响应中。
最后,你需要创建一个HTML模板,以便在PDF中显示内容。例如,你可以创建一个名为"pdf-template.html"的文件,其中包含以下内容:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PDF Report</title>
</head>
<body>
<div th:utext="${content}"></div>
</body>
</html>
```
在上面的模板中,我们使用了Thymeleaf的"th:utext"指令,以便将HTML字符串作为纯文本呈现,而不会被转义。
现在,当你访问"/pdf?html=\<h1>Hello World\</h1>"时,将生成一个名为"report.pdf"的PDF文件,其中包含标题"Hello World"。
阅读全文