html转base64整理

引入jar html转图片

    <dependency>
        <groupId>net.sf.cssbox</groupId>
        <artifactId>cssbox</artifactId>
        <version>4.14</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.12.1</version>
    </dependency>
    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.28</version>
    </dependency>
 public Long baseProve(Object obj) throws Exception {
        Class<?> cla = obj.getClass();
        Map<String, Object> map = JSONObject.parseObject(JSON.toJSONString(obj), Map.class);
        //选择模板
        ProveTemplateEntity entity = proveTemplateDao.selectOne(new QueryWrapper<ProveTemplateEntity>().eq("entity", cla.getName()));
        if (null == entity) {
            return null;
        }
        ProveDto proveDto = new ProveDto();
         FreemarkerUtils.turnImage(entity.getTemplate(), map);
        proveDto.setInstruction(resultMap.get(FreemarkerUtils.INSTRUCTION));
        proveDto.setValue(resultMap.get(FreemarkerUtils.TEMPLATE_VALUE));
        super.save(proveDto);
        return proveDto.getId();
    }

public class FreemarkerUtils {
    private static String mediaType = "screen";
    private static Dimension windowSize = new Dimension(672, 1032);
    private static boolean cropWindow = false;
    private static boolean loadImages = true;
    private static boolean loadBackgroundImages = true;

    public static final String INSTRUCTION = "instruction";
    public static final String TEMPLATE_VALUE = "value";

    public FreemarkerUtils() {
    }

    public void setMediaType(String media) {
        this.mediaType = new String(media);
    }

    public void setWindowSize(Dimension size, boolean crop) {
        this.windowSize = new Dimension(size);
        this.cropWindow = crop;
    }

    public void setLoadImages(boolean content, boolean background) {
        this.loadImages = content;
        this.loadBackgroundImages = background;
    }

    private static String getTemplate(String template, Map<String, Object> model) throws IOException, TemplateException {

        if (null == template) {
            return null;
        }
        StringWriter out = new StringWriter();
        new Template("template", new StringReader(template)).process(model, out);
        return out.toString();
    }

    public static  Map<String, String> turnImage(String template, Map<String, Object> map) throws Exception {
        String html = getTemplate(template, map);
        if (StringUtils.isEmpty(html)) {
            return null;
        }
        Document document = Jsoup.parse(html);
        W3CDom w3CDom = new W3CDom();
        org.w3c.dom.Document w3cDoc = w3CDom.fromJsoup(document);
        DOMAnalyzer da = new DOMAnalyzer(w3cDoc, null);
        MediaSpec media = new MediaSpec(mediaType);
        media.setDimensions((float) windowSize.width, (float) windowSize.height);
        media.setDeviceDimensions((float) windowSize.width, (float) windowSize.height);
        media.setResolution(300);
        da.setMediaSpec(media);
        da.attributesToStyles();
        da.addStyleSheet((URL) null, CSSNorm.stdStyleSheet(), DOMAnalyzer.Origin.AGENT);
        da.addStyleSheet((URL) null, CSSNorm.userStyleSheet(), DOMAnalyzer.Origin.AGENT);
        da.addStyleSheet((URL) null, CSSNorm.formsStyleSheet(), DOMAnalyzer.Origin.AGENT);
        da.getStyleSheets();
        BrowserCanvas contentCanvas = new BrowserCanvas(w3cDoc.getDocumentElement(), da, null);
        contentCanvas.setFont(Font.getFont("宋体"));
        contentCanvas.setAutoMediaUpdate(false);
        contentCanvas.getConfig().setClipViewport(cropWindow);
        contentCanvas.getConfig().setUseHTML(false);
        contentCanvas.getConfig().setLoadImages(loadImages);
        contentCanvas.getConfig().setLoadBackgroundImages(loadBackgroundImages);
        contentCanvas.createLayout(windowSize);
	    ImageIO.write(contentCanvas.getImage(), "png", outputStream);
        byte[] bytes = outputStream.toByteArray();
        BASE64Encoder encoder = new BASE64Encoder();
        resultMap.put(INSTRUCTION, encoder.encode(bytes));
        resultMap.put(TEMPLATE_VALUE, html);

        return resultMap;
    }

}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值