前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >java将html转为图片

java将html转为图片

原创
作者头像
在下是首席架构师
发布2025-03-08 08:19:44
发布2025-03-08 08:19:44
210
举报
文章被收录于专栏:从入门到出门从入门到出门

文中的例子是将一个list数据,转化为表格,然后加上css样式,转为图片流

代码语言:java
复制
public void send() throws IOException {
        StringBuilder markdown = new StringBuilder();
        markdown.append("| 坐席人员姓名 | 外呼次数 | 未上传录音次数 |\n");
        markdown.append("| ---- | -------- | -------------- |\n");

        for (QueryNoFileCallDTO record : list) {
            markdown.append(String.format("| %s | %d | %d |\n",
                    record.getUserName(), record.getTotalCall(), record.getNoFileCall()));
        }
        log.info("打印markdown:{}", markdown);
        
        String htmlContent = convert(markdown.toString());
        Html2Image html2Image = Html2Image.fromHtml(htmlContent);
        ImageRenderer imageRenderer = html2Image.getImageRenderer();
        imageRenderer.setWidth(380);
        BufferedImage bufferedImage = imageRenderer.getBufferedImage();

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        boolean success = ImageIO.write(bufferedImage, "PNG", byteArrayOutputStream);
        if (!success) {
            throw new IllegalArgumentException("Unsupported image format: " + "PNG");
        }
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
        
}

public static String convert(String markdown) {
        // 配置选项(可选)
        MutableDataSet options = new MutableDataSet();
        options.set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create()));

        // 创建解析器和渲染器
        Parser parser = Parser.builder(options).build();
        HtmlRenderer renderer = HtmlRenderer.builder(options).build();

        // 将 Markdown 转换为 HTML
        String render = renderer.render(parser.parse(markdown));

        return "<!DOCTYPE html>" +
                "<html>" +
                "<head>" +
                "<title>未上传录音</title> " +
                "<style>\n" +
                "        /* 添加黑色边框样式 */\n" +
                "        table {\n" +
                "            border-collapse: collapse; /* 合并边框 */\n" +
                "            width: 100%; /* 设置表格宽度 */\n" +
                "        }\n" +
                "        th, td {\n" +
                "            border: 1px solid black; /* 黑色边框 */\n" +
                "            padding: 8px; /* 内边距 */\n" +
                "            text-align: center; /* 居中对齐 */\n" +
                "        }\n" +
                "        th {\n" +
                "            background-color: #f2f2f2; /* 表头背景颜色 */\n" +
                "        }\n" +
                "    </style>" +
                "</head>" +
                "<body>" +
                render +
                "</body>" +
                "</html>";
    }
代码语言:xml
复制
        <dependency>
            <groupId>com.vladsch.flexmark</groupId>
            <artifactId>flexmark-all</artifactId>
            <version>0.64.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/gui.ava/html2image -->
        <dependency>
            <groupId>gui.ava</groupId>
            <artifactId>html2image</artifactId>
            <version>2.0.1</version>
        </dependency>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档