Thymeleaf模板
将HTML转换为图片:
当前路径为静态路径,可以引入reids 将静路径变更为动态路经
前台代码:
前台代码为自己手画HTML
后台代码:
@GetMapping("/getModelPng") public String main(String ossPath, String modePath, Map<String, Object> jsonObject) { //传入的数据 Map<String, Object> attributes = new HashMap<>(4); attributes.put("data", jsonObject); Context ctx = new Context(Locale.getDefault(), attributes); //模板地址 这地方引入的路径为静态路径,在项目静态资源的下面 String resolvedHtml = viewResolver.getTemplateEngine().process("tickets/substationFirst", ctx); //模板属性地址 字体为雅黑字体,去网上搜下这地方就不再提供了 try (ByteArrayOutputStream os = new ByteArrayOutputStream()) { Java2DRendererBuilder builder = new Java2DRendererBuilder() .withHtmlContent(resolvedHtml, null).useFont(() -> new ClassPathResource("/static/msyh.ttf").getStream(), "Microsoft YaHei") .useFastMode() .useDefaultPageSize(500, 5000, BaseRendererBuilder.PageSizeUnits.MM); BufferedImagePageProcessor bufferedImagePageProcessor = new BufferedImagePageProcessor(BufferedImage.TYPE_INT_RGB, 1.0); builder.toSinglePage(bufferedImagePageProcessor); builder.runFirstPage(); //输出类型 文件地址 String projectPath = this.getProjectPath() + modePath + UUID.randomUUID().toString().replace("-", "") + this.lessThan() + ".jpg"; //创建层级 File file = new File(projectPath); if (!file.exists()) { file.mkdir(); } ImageIO.write(bufferedImagePageProcessor.getPageImages().get(0), "png", os); ResponseEntity<byte[]> body = ResponseEntity.ok().contentType(MediaType.IMAGE_JPEG).body(os.toByteArray()); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBody()); BufferedImage read = ImageIO.read(byteArrayInputStream); ImageIO.write(read, "jpe", file); //存储到某个地方如 oss 或者本地 这地方我没有做处理 只是demo //删除层级 //this.deleteDir(file); return projectPath; } catch (IOException e) { log.error("输出pdf异常", e); throw new RuntimeException(e); } } //获取当前层级目录 private String getProjectPath() { String property = System.getProperty("user.dir"); String substring = property.substring(property.lastIndexOf("\\") + 1); return property.substring(0, property.lastIndexOf(substring)).replace("\\", "/"); } //删除层级 private boolean deleteDir(File dir) { String[] children = dir.list(); for (String child : children) { boolean success = deleteDir(new File(dir, child)); if (!success) { return false; } } return dir.delete(); } //转换时分秒 public String lessThan() { return new SimpleDateFormat("HHmmss").format(new Date()); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界