1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【day22】java导出word文档(包含导出图片)

【day22】java导出word文档(包含导出图片)

时间:2019-02-02 21:03:47

相关推荐

【day22】java导出word文档(包含导出图片)

1、【Java】使用freemarker模板技术导出word main方法测试

package com.havenliu.document;import java.io.UnsupportedEncodingException;import java.util.HashMap;import java.util.Map;public class Main {/*** @param args* @throws UnsupportedEncodingException*/public static void main(String[] args) throws UnsupportedEncodingException {// DocumentHandler dh=new DocumentHandler();// dh.createDoc();// MyTest mt=new MyTest();// mt.createDoc();Map<String, Object> dataMap = new HashMap<String, Object>();dataMap.put("name", "你好邱林和");MDoc mdoc = new MDoc();mdoc.createDoc(dataMap, "D:/outFile.doc");System.out.println("模板生成成功");}}

Jfinal接口测试

/*** 导出领导人员考核报告word*/@Clear(AppSessionInterceptor.class)public void exportLdrykhbgWord(JSONObject jsonParam) {JSONObject params = kit.get(jsonParam, "params");Khry khry = params.toJavaObject(Khry.class);Map<String, Object> dataMap = new HashMap<String, Object>();dataMap.put("name", khry.getName());dataMap.put("image", MDoc.getImgFileToBase64(khry.getSex()));MDoc mdoc = new MDoc();try {mdoc.createDoc(dataMap, "d:/ldrykhbg-" + new Date().getTime() + ".doc");} catch (UnsupportedEncodingException e) {e.printStackTrace();}System.out.println("模板生成成功");}

工具类

package com.longway.core.toolbox.utils;import java.io.*;import java.util.Map;import freemarker.template.Configuration;import freemarker.template.Template;import freemarker.template.TemplateException;import sun.misc.BASE64Encoder;public class MDoc {private Configuration configuration = null;public MDoc() {configuration = new Configuration();configuration.setDefaultEncoding("utf-8");}public void createDoc(Map<String, Object> dataMap, String fileName) throws UnsupportedEncodingException {// dataMap 要填入模本的数据文件// 设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载,// 这里我们的模板是放在com.havenliu.document.template包下面configuration.setClassForTemplateLoading(this.getClass(), "/_template");Template t = null;try {// test.ftl为要装载的模板// t = configuration.getTemplate("test_word.ftl");t = configuration.getTemplate("img.ftl");} catch (IOException e) {e.printStackTrace();}// 输出文档路径及名称File outFile = new File(fileName);Writer out = null;FileOutputStream fos = null;try {fos = new FileOutputStream(outFile);OutputStreamWriter oWriter = new OutputStreamWriter(fos, "UTF-8");// 这个地方对流的编码不可或缺,使用main()单独调用时,应该可以,但是如果是web请求导出时导出后word文档就会打不开,并且包XML文件错误。主要是编码格式不正确,无法解析。// out = new BufferedWriter(new OutputStreamWriter(new// FileOutputStream(outFile)));out = new BufferedWriter(oWriter);} catch (FileNotFoundException e1) {e1.printStackTrace();}try {t.process(dataMap, out);out.close();fos.close();} catch (TemplateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}/*** 根据图片路径获取图片并转换位base64格式字符串* imgFile 图片本地存储路径*/public static String getImgFileToBase64(String imgFile) {//将图片文件转化为字节数组字符串,并对其进行Base64编码处理InputStream inputStream = null;byte[] buffer = null;//读取图片字节数组try {inputStream = new FileInputStream(imgFile);int count = 0;while (count == 0) {count = inputStream.available();}buffer = new byte[count];inputStream.read(buffer);} catch (IOException e) {e.printStackTrace();} finally {if (inputStream != null) {try {// 关闭inputStream流inputStream.close();} catch (IOException e) {e.printStackTrace();}}}// 对字节数组Base64编码return new BASE64Encoder().encode(buffer);}}

2、【Java】用Freemarker完美导出word文档(带图片)将图片写入word

在加入了图片占位的地方,会看到一片base64编码后的代码,把base64替换成${image},也就是Map<String, Object>中key,值必须要处理成base64;

代码如:<w:binData w:name=“wordml://自定义.png” xml:space=“preserve”>${image}</w:binData>

注意:“>${image}<”这尖括号中间不能加任何其他的诸如空格,tab,换行等符号。

Java中根据图片路径 读取本地图片 并转为base64解决办法

/*** imgFile 图片本地存储路径*/public static String getImgFileToBase64(String imgFile) {//将图片文件转化为字节数组字符串,并对其进行Base64编码处理InputStream inputStream = null;byte[] buffer = null;//读取图片字节数组try {inputStream = new FileInputStream(imgFile);int count = 0;while (count == 0) {count = inputStream.available();}buffer = new byte[count];inputStream.read(buffer);} catch (IOException e) {e.printStackTrace();} finally {if (inputStream != null) {try {// 关闭inputStream流inputStream.close();} catch (IOException e) {e.printStackTrace();}}}// 对字节数组Base64编码return new BASE64Encoder().encode(buffer);}

项目实例

public static void main(String[] args) throws UnsupportedEncodingException {Map<String, Object> dataMap = new HashMap<String, Object>();dataMap.put("name", "szm");dataMap.put("image", getImgFileToBase64("d://wxm.jpeg"));MDoc mdoc = new MDoc();mdoc.createDoc(dataMap, "d:/ldrykhbg-" + new Date().getTime() + ".doc");System.out.println("模板生成成功");}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。