1.需求是这样的:
一个对象可能有图片,也可能没有,在对象有图片的时候输出图片,没有的时候不做处理。
2.新建一个doc文档,另存为Xml文档(2003版本的)。
修改Xml文档:用Freemarker的if标签包住图片那一行,如果不为空显示,否则不做处理。
<#if test.img??> <w:p wsp:rsidR="00602F11" wsp:rsidRDefault="00602F11">
<w:r wsp:rsidRPr="009527B6"><w:rPr><w:noProof/></w:rPr><w:pict>
<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/><v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/><v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/></v:shapetype> <w:binData w:name="${"wordml://0200000"+test_index+1+".jpg"}" xml:space="preserve">
${test.img}
</w:binData> <v:shape id="图片 1" o:spid="_x0000_i1025" type="#_x0000_t75" style="width:236pt;height:144.5pt;visibility:visible;mso-wrap-style:square">
<v:imagedata src="${"wordml://0200000"+test_index+1+".jpg"}" o:title=""/>
</v:shape>
</w:pict>
</w:r>
</w:p> </#if>
4.Java测试代码
package Test8; import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.junit.Test; import bean.TestFreemarkerBean;
import freemarker.template.Configuration;
import freemarker.template.Template;
import sun.misc.BASE64Encoder; /**
* 如果图片不为空才显示图片,为空则不显示。
* @author: qlq
* @date : 2017年7月26日下午4:44:59
*/
public class FreeamrkExport { @Test
public void exportSimpleWord() throws Exception {
// 要填充的数据, 注意map的key要和word中${xxx}的xxx一致
Map<String, Object> dataMap = new HashMap<String, Object>(); // Configuration用于读取ftl文件
Configuration configuration = new Configuration();
configuration.setDefaultEncoding("utf-8"); /*
* 以下是两种指定ftl文件所在目录路径的方式, 注意这两种方式都是 指定ftl文件所在目录的路径,而不是ftl文件的路径
*/
// 指定路径的第一种方式(根据某个类的相对路径指定)
configuration.setClassForTemplateLoading(this.getClass(), "");
// 指定路径的第二种方式,我的路径是C:/a.ftl
// configuration.setDirectoryForTemplateLoading(new File("C:/")); List<person> mylist = new ArrayList<person>();
mylist.add(new person("QQQ", getImageStr("C:/Users/liqiang/Desktop/tupian/kdmt.jpg"), "11111111111111"));
mylist.add(new person("QQQ", getImageStr("C:/Users/liqiang/Desktop/tupian/2.jpg"), "11111111111111"));
mylist.add(new person("QQQ", getImageStr("C:/Users/liqiang/Desktop/tupian/1.jpg"), "11111111111111"));
mylist.add(new person("QQQ", getImageStr("C:/Users/liqiang/Desktop/tupian/3.jpg"), "11111111111111"));
mylist.add(new person("QQQ", getImageStr("C:/Users/liqiang/Desktop/tupian/4.jpg"), "11111111111111"));
mylist.add(new person("QQQ", "11111111111111"));
mylist.add(new person("QQQ", "11111111111111"));
dataMap.put("mylist", mylist);
// 输出文档路径及名称
File outFile = new File("F:/test8.doc"); // 以utf-8的编码读取ftl文件
Template t = configuration.getTemplate("test8.ftl", "utf-8");
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"), 10240);
t.process(dataMap, out);
out.close();
}
private String getImageStr(String imgFile) throws Exception {
InputStream inputStream = null;
byte []data=null;
inputStream = new FileInputStream(imgFile);
data = new byte[inputStream.available()];
inputStream.read(data);
inputStream .close();
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data); }
}
5.结果:
最后两个img属性为null,则不输出。
aaarticlea/png;base64,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" alt="" />