通过freemarker将生成的html转为图片

最近做得项目中要将html转为图片,觉得下面这种方法比较适合公司需求。其中用到了org.xhtmlrenderer类库,该库网上的资料比较少,而且官网也上不去了。相比之下org.docx4j库的资料比较全,而且对于org.xhtmlrenderer也有一整套实现,可是我用org.docx4j库生成的图片是空白一片不知道什么原因,最后还是用的org.xhtmlrenderer类库。

1.freemarker模板




    
    Title
    


    
            <#list goodsInfoList1 as goods>
                
            <#list goodsInfoList2 as goods>
                
        <#list dataList2 as element>
        
            <#list element.promotionGoodsList as goods>
                
            <#list element.importantGoodsList as goods>
                
地区 店号 店名 区域 营业督导 来客数 客单价 加价购 重点商品
${goods.goodsName} 客销率${goods.goodsName}
${element.city} ${element.code} ${element.name} ${element.area} ${element.supervisor} <#if element.saleCountNow??> ${element.saleCountNow} <#else> 0 <#if element.priceNow??> ${element.priceNow} <#else> 0 <#if goods.quantity??> ${goods.quantity} <#else> 0 <#if element.goodsRate??> ${element.goodsRate*100}% <#else> 0 <#if goods.quantity??> ${goods.quantity} <#else> 0

2.加载freemarker模板,生成html


//加载邮件模板并生成邮件正文
Map model = new HashMap();
model.put("num1",num1);
model.put("num2",num2);
model.put("goodsInfoList1",goodsInfoList1);
model.put("goodsInfoList2",goodsInfoList2);
model.put("dataList",list);
model.put("dataList2",list2);

Template t2 = configuration.getTemplate("storeDataActual3.ftl"); // freeMarker template
 String content2 = FreeMarkerTemplateUtils.processTemplateIntoString(t2, model);
 int widthImage = 1600;
 int heightImage = 1000;
 String inputFileName = source.xhtml;
 String outFileName = image.jpg;
 File image=
 XhtmlToImageUtils.convertXhtmlToImage(content2,inputFileName,outFileName,widthImage,heightImage);

3.将html转成image的工具类

package com.uhome.common.utils;



import org.xhtmlrenderer.swing.Java2DRenderer;
import org.xhtmlrenderer.util.FSImageWriter;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

/**
 * Created by uh on 2018/9/13.
 */
public class XhtmlToImageUtils {

    public static File convertXhtmlToImage(String html,String inputFilename,String outputFilename,int widthImage,int heightImage)throws IOException{
        //将html转成文件
        FileWriter writer = new FileWriter(inputFilename);
        writer.write(html);
        writer.flush();
        writer.close();
        //将xhtml文件转成图片
        final File f = new File(inputFilename);
        final Java2DRenderer renderer = new Java2DRenderer(f, widthImage, heightImage);
        final BufferedImage img = renderer.getImage();
        final FSImageWriter imageWriter = new FSImageWriter();
        imageWriter.setWriteCompressionQuality(0.9f);
        imageWriter.write(img, outputFilename);
        final File fout = new File(outputFilename);
        return fout;
    }
}

4.需要用到的库


    org.xhtmlrenderer
    core-renderer
    R8

生成图片效果

通过freemarker将生成的html转为图片_第1张图片

在开发中遇到的问题:

a.生成的image中有中文,在windows下部署测试没问题,在linux下汉显示为乱码。

解决办法https://blog.csdn.net/leo3070/article/details/82773405

你可能感兴趣的:(java,经验)