java web 导出word_JavaWeb Project使用FreeMaker导出Word文件
基本思路
1. 導入freemaker2.3.jar
2. 需要導出的Word模板
3. 在Word內填入值的標簽
4. Word另存為xml(2003版本)
5. Coding
6. 導出Word文件
具體操作
1. Intellij IDEA > FIle > Project Structure > Libraries > "+"(左下角) > OK
導入Freemaker Jar
2. Word模板有需求方提供
基本模板
3.?在Word內填入需要值的標簽
填入對應標簽
4. 另存為Word 2003 XML文檔
轉出XML
5. 放進項目文件
6. 實現代碼
'''
/**
* 獲取導出任務書所需要的數據,并封裝進dataMap
* @param studWorkProcess
* @param studWork1
* @param request
* @param response
* @return
*/
@RequiresPermissions("studwork:studwork1:studWork1:edit")
@RequestMapping(value = {"exportStudWork1"})
public StringexportStudWork1(StudWorkProcess studWorkProcess, StudWork1 studWork1, HttpServletRequest request, HttpServletResponse response) {
studWork1.setId(studWorkProcess.getId());
List studWork1List =studWork1Service.findList(studWork1);
if(studWork1List.size() ==1) {
Map dataMap =new HashMap();
// set this yaer
dataMap.put("year","2020");
User user =systemService.getUser(studWork1List.get(0).getStudId());
// get student user obj
dataMap.put("user",user);
dataMap.put("studWork1", studWork1List.get(0));
User currentStudent =systemService.getUser(studWork1.getStudId());
// file name
String fileName = currentStudent.getNo() +"_" + currentStudent.getName() +"_" +"任務書.doc";
try {
download(response, fileName, dataMap);
}catch (Exception e) {
e.printStackTrace();
}
}
return "modules/studwork/studwork1/studWork1List";
}
/**
* 導出任務書doc文件
* @param response
* @param newWordName
* @param dataMap
*/
public void download(HttpServletResponse response, String newWordName, Map dataMap) {
Configuration configuration =new Configuration();
// set encoding
configuration.setDefaultEncoding("utf-8");
String path =this.getClass().getResource("/").getPath();
StudWork1 studWork1 =new StudWork1();
// get template path
configuration.setClassForTemplateLoading(studWork1.getClass(), "/");
Template t =null;
try {
// word1.xml is a template(generate by file 01)
User user = UserUtils.getUser();
if(user.getIsTeacher() ==null || user.getIsTeacher() ==""){
t = configuration.getTemplate("word1.xml","utf-8");
}else{
t = configuration.getTemplate("word1_stamp.xml","utf-8");
}
}catch (Exception e) {
e.printStackTrace();
}
File outFile =null;
Writer out =null;
String filename = newWordName;
try {
outFile =new File(newWordName);
out =new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(outFile),"utf-8"));
}catch (Exception e1) {
e1.printStackTrace();
}
try {
t.process(dataMap, out);
}catch (Exception e) {
e.printStackTrace();
}
try {
out.flush();
out.close();
}catch (IOException e) {
e.printStackTrace();
}
InputStream fis =null;
OutputStream toClient =null;
try {
fis =new BufferedInputStream(new FileInputStream(outFile));
byte[] buffer =new byte[fis.available()];
fis.read(buffer);
fis.close();
// clear response
response.reset();
// set header and translate encoding
filename = URLEncoder.encode(filename, "utf-8");
response.addHeader("Content-Disposition", "attachment;filename=" + filename+"");
response.addHeader("Content-Length", "" + outFile.length());
toClient =new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
}catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(fis!=null){
fis.close();
}
}catch (IOException e) {
e.printStackTrace();
}
try {
if(toClient!=null){
toClient.close();
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
'''
采坑
1. Word導出格式一定要是2003版本的XML,不然生成的文件無法正常打開
2. Word另存為過程中,會將部分標簽分開,需要手動調整
'''
${
studwork.thesisTitle
}
'''
調整后
'''
${studwork.thesisTitle}
'''
總結
以上是生活随笔為你收集整理的java web 导出word_JavaWeb Project使用FreeMaker导出Word文件的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 【python】保存文件名不能含有win
- 下一篇: 喜马拉雅付费音频下载方法
