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());
    }

 

posted @ 2022-06-20 10:37  RM-RF?  阅读(70)  评论(0编辑  收藏  举报