java
依赖引入
implementation("org.springframework.boot:spring-boot-starter-thymeleaf")
implementation("org.xhtmlrenderer:flying-saucer-pdf")
将ITemplateEngine注入到spring管理的类中,
java
Context context = new Context();
context.setVariable("name", wasteDisposalSiteDTO.getName());
String processHtml= iTemplateEngine.process("hazardousWaste", context);//hazardousWaste是html模板文件路径,需要在配置文件中设置//spring:thymeleaf:prefix: classpath:/templates/ 基本路径
//下载到浏览器
// 设置响应类型 pdf
response.setContentType(MediaType.APPLICATION_PDF_VALUE);
// 设置响应编码
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, ContentDisposition.attachment()
.filename("1" + ".pdf", StandardCharsets.UTF_8)
.build()
.toString());
// 使用ByteArrayOutputStream来捕获PDF字节流
try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
// 创建ITextRenderer对象
ITextRenderer renderer = new ITextRenderer();
ITextFontResolver fontResolver = renderer.getFontResolver();
ClassPathResource classPathResource = new ClassPathResource("/font/simsun.ttc");//加载字体路径,避免生成的pdf加载不出来汉字。
fontResolver.addFont(classPathResource.getPath(), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
renderer.setDocumentFromString(processHtml);
renderer.layout();
renderer.createPDF(os);
// 将生成的PDF字节流写入到HTTP响应的输出流中
response.getOutputStream().write(os.toByteArray());
response.getOutputStream().flush();
} catch (DocumentException e) {
e.printStackTrace();
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "PDF generation failed");
}
//...