org.springframework.boot
spring-boot-starter-thymeleaf
com.openhtmltopdf
openhtmltopdf-core
1.0.0
com.openhtmltopdf
openhtmltopdf-pdfbox
1.0.0
package com.shell.common.utils.pdf;
import com.openhtmltopdf.pdfboxout.PdfRendererBuilder;
import org.springframework.util.ResourceUtils;
import org.thymeleaf.context.Context;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
import java.io.OutputStream;
import java.util.Map;
public class PdfUtil {
public static void buildPdf(OutputStream os, String pdfFileName, String templateName, Map variables) throws Exception {
//构造模板引擎
ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
resolver.setPrefix("templates/");//模板所在目录,相对于当前classloader的classpath。
resolver.setSuffix(".html");//模板文件后缀
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(resolver);
//构造上下文(Model)
Context context = new Context();
context.setVariable("templateName", templateName);
context.setVariable("pdfFileName", pdfFileName);
context.setVariables(variables);
//渲染模板
String example = templateEngine.process(templateName, context);
PdfRendererBuilder builder = new PdfRendererBuilder();
builder.useFont(ResourceUtils.getFile("classpath:templates/fonts/simsun.ttf"), "simsun");
builder.useFastMode();
builder.withHtmlContent(example, ResourceUtils.getURL("classpath:templates/img/").toString());
builder.toStream(os);
builder.run();
}
}
package com.step.pdf.demo.controller;
import com.step.pdf.demo.util.PdfUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
@RestController
public class DemoController {
@GetMapping("pdf")
public void test(HttpServletResponse response) throws Exception {
Map variables = new HashMap<>();
variables.put("assessmentTypeName", "测试");
variables.put("staffName", "staffName");
variables.put("functions", "functions");
variables.put("assessmentDate", "assessmentDate");
variables.put("roles", "roles");
variables.put("score", "score");
variables.put("signature", "signature");
PdfUtil.buildPdf(response, "用于测试的pdf", "parent", variables);
}
}
| Name: |
|
| Function: |
Date: |
| Role: |
Agreegate Source:
|