freemaker+echarts匯出word文件
阿新 • • 發佈:2018-12-13
廢話不多說了 先上程式碼吧 程式碼完了之後 在整模板
這是dem的目錄結構
好了 作為社會主義接班人 秉承著MVC思想 我寫程式碼的習慣是 先controller 再service
controller 詳情 如下
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.transitmonthlyreport.dto.BaseTransferEntity; import com.transitmonthlyreport.util.MobileConfig; /** * 這是一個測試的例子 * @author ZiAn * */ @Controller @RequestMapping(value = "") public class TestController { private static Logger log = Logger.getLogger(TestController.class); /** * 注入 測試匯出的 TestServiceImpl */ @Autowired private TestServiceImpl testServiceImpl; /** * 這是個測試的demo 所以 有些定義的名字比較隨意 * * @param request * @param response * @return */ @RequestMapping(value = "/service/exportDemo") @ResponseBody public BaseTransferEntity export(HttpServletRequest request, HttpServletResponse response) { BaseTransferEntity baseTransferEntity = new BaseTransferEntity();//這是自己封裝的東西 try { //第一張圖片 傳圖片base64的碼 String a = request.getParameter("a"); Map<String, Object> mapImageDown = new HashMap<String, Object>(); mapImageDown.put("a", a); List<Map<String, Object>> lst = new ArrayList<Map<String,Object>>(); Map<String,Object> newMap = new HashMap<String, Object>(); // 添加個假資料 newMap.put("y", "2020--nian---"); lst.add(newMap); System.out.println(lst); // 下載文件到本地 Map<String, Object> maplst = testServiceImpl.downWord(lst, mapImageDown); // 將上述得到的資料返回給頁面 ----自己定義的東西 不重要 baseTransferEntity.setResultcode(MobileConfig.getStringCode("code.global.success")); baseTransferEntity.setData(maplst); baseTransferEntity.setDesc(MobileConfig.get("msg.global.success")); } catch (Exception e) { log.error("Test exportDemo--------->" + e.getMessage(), e); baseTransferEntity.setResultcode(MobileConfig.getStringCode("code.global.error.exception")); baseTransferEntity.setDesc("系統介面異常,請聯絡管理員!"); baseTransferEntity.setData(null); } return baseTransferEntity; } }
接下來 就是serviceImpl了
睜大眼睛哈
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.stereotype.Service; import sun.misc.BASE64Decoder; /** * TODO * <p> * This contains the following methods:<br/> * <p> * * @author ZiAn * @version 1.0 * @since 1.0 */ @Service public class TestServiceImpl implements TestService { @Override public Map<String, Object> downWord(List<Map<String, Object>> lst,Map<String, Object> mapImageDown) throws Exception{ Map<String, Object> retMap = new HashMap<String,Object>(); String a = mapImageDown.get("a").toString(); //下載圖片 TestWordUtil wordUtil = new TestWordUtil(); String fileStr = wordUtil.saveFile(); try{ String[] url = a.split(","); String u = url[1]; // Base64解碼 byte[] b1 = new BASE64Decoder().decodeBuffer(u); // 生成第一張圖片 OutputStream out = new FileOutputStream(new File(fileStr+"\\test1.png")); out.write(b1); out.flush(); out.close(); //為模板賦值 Map<String, Object> dataMap = new HashMap<String, Object>(); //dataMap =lst.get(0); dataMap.putAll(lst.get(0)); dataMap.put("a", TestWordUtil.getImageStr(fileStr+"\\test1.png")); String wordName ="這是檔名稱.doc"; //生成word wordUtil.createWord("TextXML.ftl", fileStr+"\\"+wordName, dataMap); //返回生成檔案路徑 以及 檔名稱 retMap.put("wordDir", fileStr); retMap.put("wordName", wordName); System.out.println("目錄="+fileStr+"\\"+wordName); } catch (IOException e) { e.printStackTrace(); } return retMap; } }
有了 impl 那肯定得來個介面呀
import java.util.List; import java.util.Map; /** * TODO * <p> * This contains the following methods:<br/> * <p> * * @author ZiAn * @version 1.0 * @since 1.0 */ public interface TestService { /** * 下載文件到本地 * @param lst * @param mapImageDown * @return * @throws Exception */ public Map<String, Object> downWord(List<Map<String, Object>> lst, Map<String, Object> mapImageDown) throws Exception; }
接下來 就是最重要的玩意兒了 util hahaha
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.Map;
import sun.misc.BASE64Encoder;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class TestWordUtil {
private Configuration configuration = null;
public TestWordUtil() {
configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
}
public void createWord(String templetName, String filePathName, Map<String, Object> dataMap) {
configuration.setClassForTemplateLoading(this.getClass(), "/com/transitmonthlyreport/template"); // FTL檔案所存在的位置 我這是放在專案底下了 自己的實際路徑自己比對
Template t = null;
try {
// 獲取模版檔案
t = configuration.getTemplate(templetName);
} catch (IOException e) {
e.printStackTrace();
}
// 生成檔案的路徑和名稱
File outFile = new File(filePathName);
Writer out = null;
try {
try {
out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(outFile),"UTF-8"));
} catch (UnsupportedEncodingException e) {
// TODO
e.printStackTrace();
}
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
try {
t.process(dataMap, out);
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static String getImageStr(String imgFile) {
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 String saveFile() {
String nowpath = System.getProperty("user.dir");
String path = nowpath.replace("bin", "webapps");
path += "\\"+"testWord"+"\\"+"word";
File tmp = new File(path);
System.out.println("path==="+path);
if (!tmp.exists()) {
tmp.mkdirs();
}
return path;
}
public String getEncodeImageStr(String imgFile) {
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);
}
}
好了 到這個地方 重要的 就來了
製作模板
然後 另存為 xml 格式
都修改好之後 再儲存 字尾 修改為 ftl 然後 把這個檔案 扔到你的專案裡 (就是 模板存放的路徑)
然後 執行 tomcat
然後 來自己的路徑裡看
寫這麼詳細 要是 再看不懂 那我就沒辦法了