吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10734|回复: 32
收起左侧

[Java 转载] java一键生成word操作,比poi简单

  [复制链接]
Acker 发表于 2018-7-17 11:57
最近用到java生成word,一想到要用poi各种逻辑各种写超级麻烦,去百度到某个插件poi-ti(操作word)

着实超级简单,有需要的朋友看过来了

上代码
[Java] 纯文本查看 复制代码
package com.jeeplus.modules.fact.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
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.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.data.NumbericRenderData;
import com.deepoove.poi.data.PictureRenderData;
import com.deepoove.poi.data.RenderData;
import com.deepoove.poi.data.TableRenderData;
import com.deepoove.poi.data.TextRenderData;
import cn.yygzs.common.config.Global;
import cn.yygzs.common.utils.DateUtils;

/**
 * doc操作工具
 * poi-ti
 * [url=home.php?mod=space&uid=686208]@AuThor[/url] 遥大叔
 * @projectName yygzs
 * @packageName cn.yygzs.modules.fact.util
 * [url=home.php?mod=space&uid=120849]@jdk[/url] 1.8.0_121
 * [url=home.php?mod=space&uid=686237]@date[/url] 2018年5月26日下午10:34:09
 * @version V1.0
 * @describe
 */
public class DocUtil {
	public static Logger logger = LoggerFactory.getLogger(DocUtil.class);
	//存储模板路径common/css/yygzs.css
//	public static final String template1="d:/testWord.docx";
	/*
	 * win的路径
	 */ 
	public static final String template1=Global.getConfig("linuxUploadWord")+"/01_供应链ABS项目_付款确认书(共同债务人)20180426.docx";
	public static final String template2=Global.getConfig("linuxUploadWord")+"/02_应收账款转让合同(适用于公开型无追索应收账款转让业务)20180426.docx";
	public static final String template3=Global.getConfig("linuxUploadWord")+"/03供应链ABS项目_买方确认函(债务人确认债务)20180426.docx";
	public static final String template4=Global.getConfig("linuxUploadWord")+"/04_供应链ABS项目_应收账款转让通知书(适用于供应商通知债务人)20180426.docx";
	public static final String template5=Global.getConfig("linuxUploadWord")+"/05_供应链ABS项目_应收账款转让通知书(适用于保理商通知债务人)20180426.docx";
	public static final String template6=Global.getConfig("linuxUploadWord")+"/06_应收账款转让登记协议.docx";
	/*
	 * linux
	 */
//	public static final String template1=Global.getConfig("linuxUploadWord")+"/01_供应链ABS项目_付款确认书(共同债务人)20180426.docx";
//	public static final String template2=Global.getConfig("linuxUploadWord")+"/02_应收账款转让合同(适用于公开型无追索应收账款转让业务)20180426.docx";
//	public static final String template3=Global.getConfig("linuxUploadWord")+"/03供应链ABS项目_买方确认函(债务人确认债务)20180426.doc";
//	public static final String template4=Global.getConfig("linuxUploadWord")+"/04_供应链ABS项目_应收账款转让通知书(适用于供应商通知债务人)20180426.docx";
//	public static final String template5=Global.getConfig("linuxUploadWord")+"/05_供应链ABS项目_应收账款转让通知书(适用于保理商通知债务人)20180426.docx";
//	public static final String template6=Global.getConfig("linuxUploadWord")+"/06_应收账款转让登记协议.docx";
	/**
	 * 生成word文档
	 * @param docName 文件名:xx合同书
	 * @param templatePath 模板路径  例如:"d:/test.docx"
	 * @param map 写入的模板信息数据
	 * 案例:
	 * XWPFTemplate template = XWPFTemplate.compile("d:/test.docx").render(new HashMap<String, Object>(){{
		        put("title", "我爱遥遥科技");
	   }});
	 * @param response 下载请求
	 */
	public static void exmDoc(String docName,String templatePath,Map<String, Object> map,HttpServletResponse response) {
		//生成文件名    例如:d:/out_template.docx 
		String fileName = Global.getConfig("linuxUploadDownLoad")+"/"+docName+".docx"; //win下面的路径
		//String fileName = Global.getConfig("linuxUploadDownLoad")+"/"+docName+DateUtils.getDate("yyyyMMdd")+".docx"; //linux
		//取出word模板
		XWPFTemplate template = XWPFTemplate.compile(templatePath).render(map);
		try {
			//输出生成好的文件
			FileOutputStream out = new FileOutputStream(fileName);
			template.write(out);
			logger.debug("生成成功");
			//如果需要下载执行下一条代码
			logger.debug("进入下载start");
//			DocUtil.download(fileName, response);
			logger.debug("进入下载end");
			System.out.println();
			out.flush();
			out.close();
			template.close();
			logger.debug("关闭导出流成功");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			logger.error("出现异常:"+e);
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			logger.error("出现异常:"+e);
			e.printStackTrace();
		}
	}

 	 public static void main(String[] args) {
	    	Map<String, Object> datas = new HashMap<String, Object>();
	    	map.put("temp1","测试word模板1");
	    	HttpServletResponse response=null;
			exmDoc("测试生成word", template1, map, response);
	}
	

	

}



所有的语法结构都是以 {{ 开始,以 }} 结束。

{{template}} 普通文本

{{@template}} 图片

{{#template}} 表格

{{*template}} 列表

{{+template}} 文档

免费评分

参与人数 1热心值 +1 收起 理由
kk1212 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Acker 发表于 2018-7-17 12:22
zhouze 发表于 2018-7-17 12:21
给你推荐一个easy-poi,也是对poi做的封装

好的   了解了  谢谢。但是建议你看看poi-ti。如果单独做一条数据生成开源用一句代码就搞定
[Java] 纯文本查看 复制代码
XWPFTemplate template = XWPFTemplate.compile("~/template.docx").render(new HashMap<String, Object>(){{
        put("title", "Poi-tl 模板引擎");
}});
zhouze 发表于 2018-7-17 12:26
Acker 发表于 2018-7-17 12:22
好的   了解了  谢谢。但是建议你看看poi-ti。如果单独做一条数据生成开源用一句代码就搞定[mw_shl_code= ...

额,为毛我google不到它的文档,甚至博客都木有
 楼主| Acker 发表于 2018-7-17 12:07
MIMIYA003 发表于 2018-7-17 12:12
不明觉厉
 楼主| Acker 发表于 2018-7-17 12:13

一个java生成word的插件,比poi简单
坐久落花多 发表于 2018-7-17 12:15
Java用得少,要是有js或php版本的就好了
曾经的树叶 发表于 2018-7-17 12:17
不明觉厉
 楼主| Acker 发表于 2018-7-17 12:18
坐久落花多 发表于 2018-7-17 12:15
Java用得少,要是有js或php版本的就好了

poi-ti官方貌似不支持php   其实用js应该也可以调用
zhouze 发表于 2018-7-17 12:18
excel了???能支持吗
 楼主| Acker 发表于 2018-7-17 12:19

仔细看看就知道了   哈哈
 楼主| Acker 发表于 2018-7-17 12:20
zhouze 发表于 2018-7-17 12:18
excel了???能支持吗

目前poi-ti只支持word,反正比poi简单,等晚点我再发一个操作excel的   包括多页生成数据
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 18:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表