导出word带图片
如果你需要在word中添加图片,那你就在第一步制作模板时,加入一张图片占位,然后打开xml文档,可以看到如下的一片base64编码后的代码:
<w:binData w:name="wordml://03000001.png" xml:space="preserve">iVBORw0…(很省略很省略)…CC</w:binData>
只要将
base64
的代码替换成例如:
${image}
,如下:
<w:binData w:name="wordml://03000001.png" xml:space="preserve">${image}</w:binData>
这里要注意“>${image}<”这尖括号中间不能加任何其他的诸如空格,tab,换行等符号。
然后用代码生成:
import freemarker.template.Configuration; import freemarker.template.Template; import sun.misc.BASE64Encoder; import java.io.*; import java.util.HashMap; import java.util.Map; /** * @description freemarker导出word带图片 * @author: YHZ * @date 2013-7-9 */ public class CreateDocWithImage { private Configuration configuration = null; public CreateDocWithImage() { configuration = new Configuration(); configuration.setDefaultEncoding("utf-8"); } public void create() throws Exception { Map<String, Object> map = new HashMap<String, Object>(); map.put("year", "2011"); map.put("person", "Zhu You Feng"); map.put("image", getImageStr()); configuration.setClassForTemplateLoading(this.getClass(), "/docTemplate/"); Template t = configuration.getTemplate("doc2.ftl"); File outFile = new File("D:/outFile.doc"); Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile))); t.process(map, out); } private String getImageStr() { String imgFile = "d:/test.jpg"; InputStream in = null; byte[] data = null; try { in = new FileInputStream(imgFile); data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(data); } public static void main(String[] args) throws Exception { new CreateDocWithImage().create(); } }
地址:http://www.cnblogs.com/zhuyoufeng/archive/2011/09/01/2161558.html
来源:https://www.cnblogs.com/dyllove98/p/3181579.html