2.设置模板参数gui.ava html2image org.springframework.boot spring-boot-starter-freemarker
// 在yml 文件中设置Freemarker模板参数
spring:
profiles:
active: dev
## 设定ftl文件路径
freemarker:
template-loader-path: classpath:/templates
##是否开启缓存
cache: false
##设置编码格式
charset: utf-8
##检查模板路径是否存在
check-template-location: true
##请求头格式
content-type: text/html
expose-request-attributes: false
expose-session-attributes: false
request-context-attribute: request
suffix: .html
##模板生成位置
path: /data/image/skc/images/FreemarkerTemplates.html
####3.模板文件
//模板文件 index.html
document
您的专属qq顾问
${FreemarkerFormVO.userName}
${FreemarkerFormVO.department}
请加我的QQ
4.接口生成pdf图片
@ApiOperation(value="模板")
@PostMapping("/freemarker")
public ResponseEntity> freemarkerIndex(@Valid @RequestBody FreemarkerFormVO bean, Model model) {
model.addAttribute("FreemarkerFormVO",bean);
Map root = new HashMap(1);
root.put("FreemarkerFormVO", bean);
String filePath = freeMarkerContent(root);
try {
File file = ResourceUtils.getFile(filePath);
String html = FileReader.create(file).readString();
String s = switchToPic(html);
s= s.replaceAll("\r\n", "");
base64StringToImage(s);
return ResultBeanUtil.success(s);
} catch (Exception e) {
log.error("", e);
}
return ResultBeanUtil.success(filePath);
}
//测试的时候 生成到D盘的AMD文件夹下
private String freeMarkerContent(Map root) {
try {
Template temp = cfg.getTemplate("index.html");
//以classpath下面的static目录作为静态页面的存储目录,同时命名生成的静态html文件名称
// File pathFile = new File(path.substring(path.indexOf('/')));
File pathFile = new File("D:\AMD\FreemarkerTemplates.html");
if (!pathFile.getParentFile().exists()) {
pathFile.getParentFile().mkdirs();
}
Writer file = new FileWriter(pathFile);
temp.process(root, file);
file.flush();
file.close();
return "D:\AMD\FreemarkerTemplates.html";
} catch (IOException | TemplateException e) {
log.error(e.getMessage(), e);
}
return null;
}
//变成base64格式
private String switchToPic(String html) {
HtmlImageGenerator imageGenerator = new HtmlImageGenerator();
imageGenerator.getBufferedImage();
// File path=new File(html);
// String urlPath=path.toURL().toString();
// imageGenerator.loadUrl(urlPath);
imageGenerator.loadHtml(html);
//这里如果指定了盘符,可以直接存在本地,自己本地写demo的话可以用
String imageName = imagePath + "html1.png";
imageGenerator.saveAsImage(imageName);
BufferedImage buffimg = imageGenerator.getBufferedImage();
ByteArrayOutputStream os = new ByteArrayOutputStream();
try {
ImageIO.write(buffimg, "png", os);
} catch (Exception e) {
e.printStackTrace();
}
byte[] bytes1 = os.toByteArray();
return encoder.encodeBuffer(bytes1).trim();
}
//base64转图片,生成到指定目录
private void base64StringToImage(String base64) {
try {
byte[] bytes1 = decoder.decodeBuffer(base64);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes1);
BufferedImage bi1 = ImageIO.read(bais);
File f = new File("D:\AMD\html.png");
ImageIO.write(bi1, "png", f);
} catch (IOException e) {
e.printStackTrace();
}
}
5.html模板层级结构
Best Regards!
Make a little progress every day!



