栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

freemarker模板框架生成图片

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

freemarker模板框架生成图片

freemarker框架生成图片使用

// 模板代码



  
  
  Document
  


    
!

Es importante que conserves el numero de folio del comp rob ante.

Puedes solicitar que el Punto RABEE te lo envie o tomar fotos de esta pantalla.

Comp rob ante de Dropoff

${misSendOutScanRecord.serialNumberTime}

34guias

Punto RABEE:${misSendOutScanRecord.deptName}.${misSendOutScanRecord.deptId}

Responsable:${misSendOutScanRecord.operator}.${misSendOutScanRecord.createBy}

Folio

${misSendOutScanRecord.serialNumber}

Numeros de guia RABEE

<#if waybillNos??> <#foreach waybillNo in waybillNos> ${waybillNo}
package com.rabee.common.utils;

import com.lowagie.text.pdf.BaseFont;
import com.rabee.common.utils.http.HttpUtils;
import com.rabee.common.utils.image.B64ImgReplacedElementFactory;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;
import org.springframework.stereotype.Component;
import org.w3c.dom.Document;
import org.xhtmlrenderer.pdf.ITextRenderer;
import org.xhtmlrenderer.swing.Java2DRenderer;
import org.xhtmlrenderer.util.FSImageWriter;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Base64;
import java.util.Map;
import java.util.UUID;

public class FreemarkerUtils {

    private String getTemplate(String template, Map map) throws IOException, TemplateException {
        Configuration cfg = new Configuration(Configuration.VERSION_2_3_25);
        cfg.setClassForTemplateLoading(this.getClass(), "/template/image");
        cfg.setDefaultEncoding("UTF-8");
        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
        cfg.setLogTemplateExceptions(false);
        Template temp = cfg.getTemplate(template);
        StringWriter stringWriter = new StringWriter();
        temp.process(map, stringWriter);
        stringWriter.flush();
        stringWriter.close();
        String resutl = stringWriter.getBuffer().toString();
        return resutl;
    }

    public byte[] generate(String template, Map map)throws Exception {
        String html = getTemplate(template, map);
        byte[] bytes=html.getBytes();
        ByteArrayInputStream bin=new ByteArrayInputStream(bytes);
        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
        DocumentBuilder builder=factory.newDocumentBuilder();
        Document document=builder.parse(bin);
        Java2DRenderer renderer = new Java2DRenderer(document,480,-1);
        BufferedImage img = renderer.getImage();
        return imageToBytes(img);
    }

    private byte[] imageToBytes(BufferedImage bImage) {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        try {
            ImageIO.write(bImage, "png", out);
        } catch (IOException e) {
            //log.error(e.getMessage());
        }
        return out.toByteArray();
    }

    public String turnImage(String template, Map map, HttpServletResponse response) throws Exception {
        String html = getTemplate(template, map);
        byte[] bytes=html.getBytes();
        ByteArrayInputStream bin=new ByteArrayInputStream(bytes);
        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
        DocumentBuilder builder=factory.newDocumentBuilder();
        Document document=builder.parse(bin);
        Java2DRenderer renderer = new Java2DRenderer(document,480,850);
        BufferedImage img = renderer.getImage();
        // 生成图片名字
        String uuid = UUID.randomUUID().toString();

        renderer.getSharedContext().setReplacedElementFactory(new B64ImgReplacedElementFactory());
        renderer.getSharedContext().getTextRenderer().setSmoothingThreshold(1);
        BufferedImage image = renderer.getImage();
        try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
            // 可以输出到流
            ImageIO.write(image, "jpg", outputStream);
            // 也可以直接保存到文件
            ImageIO.write(image, "jpg", new File("E:\java\"+ uuid + ".jpg"));
            return Base64.getEncoder().encodeToString(outputStream.toByteArray());
        } catch (Exception e) {
            throw new Exception("桌牌图片转换失败");
        }

    }

    public String turnImage(String template, Map map, int width, int height) throws Exception {
        String html = getTemplate(template, map);
        byte[] bytes=html.getBytes();
        ByteArrayInputStream bin=new ByteArrayInputStream(bytes);
        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
        DocumentBuilder builder=factory.newDocumentBuilder();
        Document document=builder.parse(bin);
        Java2DRenderer renderer = new Java2DRenderer(document,width,height);
        BufferedImage img = renderer.getImage();
//        response.setContentType("image/jpeg;charset=UTF-8");
//        response.setDateHeader("expries", -1);
//        response.setHeader("Cache-Control", "no-cache");
//        response.setHeader("Pragma", "no-cache");
//        ImageIO.write(img, "jpg", response.getOutputStream());

//        final FSImageWriter imageWriter = new FSImageWriter();
//        imageWriter.setWriteCompressionQuality(1.0f);
        // 生成图片名字
        String uuid = UUID.randomUUID().toString();
        // 输出路径
//        imageWriter.write(img, "E:\java\" + uuid + ".jpg");
//        ImageIO.write(img, "jpg", response.getOutputStream());


        renderer.getSharedContext().setReplacedElementFactory(new B64ImgReplacedElementFactory());
        renderer.getSharedContext().getTextRenderer().setSmoothingThreshold(1);
        BufferedImage image = renderer.getImage();
        try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
            // 可以输出到流
            ImageIO.write(image, "jpg", outputStream);
            // 也可以直接保存到文件
            ImageIO.write(image, "jpg", new File("E:\java\"+ uuid + ".jpg"));
            return Base64.getEncoder().encodeToString(outputStream.toByteArray());
        } catch (Exception e) {
            throw new Exception("桌牌图片转换失败");
        }

    }

    
    public ByteArrayOutputStream createPDF(Map data, String templateFileName) throws Exception {
        // 创建一个FreeMarker实例, 负责管理FreeMarker模板的Configuration实例
        Configuration cfg = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
        // 指定FreeMarker模板文件的位置
        cfg.setClassForTemplateLoading(this.getClass(), "/template/ceetificate/");
        ITextRenderer renderer = new ITextRenderer();
        OutputStream out = new ByteArrayOutputStream();
        try {
            // 设置 css中 的字体样式(暂时仅支持宋体和黑体) 必须,不然中文不显示
            renderer.getFontResolver().addFont("/template/ceetificate/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            // 设置模板的编码格式
            cfg.setDefaultEncoding("UTF-8");
            // 获取模板文件
            Template template = cfg.getTemplate(templateFileName, "UTF-8");
            StringWriter writer = new StringWriter();

            // 将数据输出到html中
            template.process(data, writer);
            writer.flush();

            String html = writer.toString();
            // 把html代码传入渲染器中
            renderer.getSharedContext().setReplacedElementFactory(new B64ImgReplacedElementFactory());
            renderer.getSharedContext().getTextRenderer().setSmoothingThreshold(0);
            renderer.setDocumentFromString(html);
            System.setProperty("java.net.useSystemProxies", "true");
            renderer.layout();
            renderer.createPDF(out, false);
            renderer.finishPDF();
            out.flush();
            return (ByteArrayOutputStream)out;
        } finally {
            if(out != null){
                out.close();
            }
        }
    }

    public static void main(String[] args) {
        String res = HttpUtils.sendGet("https://maps.googleapis.com/maps/api/staticmap","center=20.7140616,-103.3612198&size=600x300&markers=color:red%7C20.7140616,-103.3612198&key=AIzaSyCauC0gY3UaaBEuzsic78QdzZWvcgTPJ6w");
        System.out.println(res);
    }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/988443.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号