POI 生成word 文档 一般有两种方法:

① word模板 生成word 文档 ;

② 写代码直接生成 word 文档;

我这里演示的是第二种方法,即写代码生成 word文档,不多说废话,直接代码;

/**
* 镇街日报导出word
*/
@RequestMapping(params = "exportWordForTownDaily")
public void exportWordForTownDaily(HttpServletResponse response ,String selectDate){
if(StringUtils.isNullOrEmpty(selectDate)){
return;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try{
sdf.parse(selectDate);
}catch (Exception e){
e.printStackTrace();
return;
}
CaseEntity entity = new CaseEntity();
entity.setRepotingTime_begin(selectDate + " 00:00:00");
entity.setRepotingTime_end(selectDate + " 23:59:59");
//获取镇街实际扣分
List<CaseEntity> caseEntityList = statisticsService.getTownActualScore(entity);
//获取各镇街情况
List<Map<String, Object>> townDaily = statisticsService.townDaily(entity);
//格式化查询日期(年月日)
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");
try {
selectDate = sdf2.format(sdf.parse(selectDate));
} catch (ParseException e) {
e.printStackTrace();
} //------------------------------------生成word文档------------------------------------------------
//创建document对象
XWPFDocumentUtil document = new XWPFDocumentUtil();
//创建标题段落
XWPFParagraph titleParag = document.createParagraph();
XWPFRun titleRun = titleParag.createRun();
titleRun.setText("镇街日报");
titleRun.setFontSize(20);
titleRun.setBold(true);//字体是否加粗
titleParag.setAlignment(ParagraphAlignment.LEFT);//段落居左 //换行
//XWPFParagraph brParagraph1 = document.createParagraph();
//XWPFRun brRun = brParagraph1.createRun();
//brRun.setText("\n");
//创建一个段落
XWPFParagraph p = document.createParagraph();
int rows = caseEntityList.size()+1;
int cols = 3;
//创建一个表格
XWPFTable table= document.createTable(rows, cols);
//表格属性
CTTblPr tablePr = table.getCTTbl().addNewTblPr();
//表格宽度
CTTblWidth width = tablePr.addNewTblW();
width.setW(BigInteger.valueOf(5000));
//设置表格宽度为非自动
width.setType(STTblWidth.DXA); //表头行
XWPFTableRow headRow = table.getRow(0);
XWPFTableCell headCell0 = headRow.getCell(0);
XWPFTableCell headCell1 = headRow.getCell(1);
XWPFTableCell headCell2 = headRow.getCell(2); p = headCell0.addParagraph();
XWPFRun headRun0 = p.createRun();
headRun0.setText("序号");
headRun0.setFontSize(12);
headRun0.setBold(true);//是否粗体
headCell0.setColor("DEDEDE");
//垂直居中
p.setVerticalAlignment(TextAlignment.CENTER);
//水平居中
p.setAlignment(ParagraphAlignment.CENTER); p = headCell1.addParagraph();
XWPFRun headRun1 = p.createRun();
headRun1.setText("镇街");
headRun1.setFontSize(12);
headRun1.setBold(true);
headCell1.setColor("DEDEDE");
//垂直居中
p.setVerticalAlignment(TextAlignment.CENTER);
//水平居中
p.setAlignment(ParagraphAlignment.CENTER); p = headCell2.addParagraph();
XWPFRun headRun2 = p.createRun();
headRun2.setFontSize(12);
headRun2.setText("总扣分");
headRun2.setBold(true);
headCell2.setColor("DEDEDE");
//垂直居中
p.setVerticalAlignment(TextAlignment.CENTER);
//水平居中
p.setAlignment(ParagraphAlignment.CENTER); //表主体行
for(int i=0 ;i<caseEntityList.size();i++){
CaseEntity caseEntity = caseEntityList.get(i);
XWPFTableRow contentRow = table.getRow(i+1);
XWPFTableCell cell0 = contentRow.getCell(0);
XWPFTableCell cell1 = contentRow.getCell(1);
XWPFTableCell cell2 = contentRow.getCell(2); p = cell0.addParagraph();
XWPFRun pRun0=p.createRun();
pRun0.setText(i+1+"");
//垂直居中
cell0.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
//水平居中
p.setAlignment(ParagraphAlignment.CENTER); p = cell1.addParagraph();
XWPFRun pRun1=p.createRun();
pRun1.setText(caseEntity.getTownName());
//垂直居中
cell1.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
//水平居中
p.setAlignment(ParagraphAlignment.CENTER); p = cell2.addParagraph();
XWPFRun pRun2=p.createRun();
pRun2.setText(caseEntity.getTownActualScore().toString());
//垂直居中
cell2.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
//水平居中
p.setAlignment(ParagraphAlignment.CENTER);
}
//-----------------------------各镇街情况------------------------------
//创建标题段落
XWPFParagraph title1 = document.createParagraph();
XWPFRun title1Run = title1.createRun();
title1Run.setText("\r各镇街比较严重的问题");
title1Run.setFontSize(20);
title1Run.setBold(true); try {
for(Map<String,Object> townMap:townDaily){
CaseEntity townCase = (CaseEntity)townMap.get("townCase");
XWPFParagraph xwpfParagraph = document.createParagraph();
XWPFRun xwpfRun_town = xwpfParagraph.createRun();
XWPFRun xwpfRun = xwpfParagraph.createRun();
xwpfRun_town.setText(townCase.getTownName());
xwpfRun_town.setFontSize(14);
xwpfRun_town.setBold(true);
xwpfRun_town.setColor("00cc44");
xwpfRun.setText(","+selectDate+"当天扣分较多的问题有:");
xwpfRun.setFontSize(14);
xwpfRun.setBold(true);
List<Map<String,Object>> caseInfoList = (List<Map<String,Object>>)townMap.get("caseInfoList");
Integer no = 0;
for(Map<String,Object> map:caseInfoList){
CaseEntity caseInfo = (CaseEntity)map.get("caseInfo");
XWPFParagraph xwpfParagraph1 = document.createParagraph();
XWPFRun xwpfRun1 =xwpfParagraph1.createRun();
XWPFRun xwpfRun2 = xwpfParagraph1.createRun();
XWPFRun xwpfRun3 = xwpfParagraph1.createRun();
xwpfRun1.setText((++no)+"、");
xwpfRun2.setText(caseInfo.getProblemStreet());
xwpfRun3.setText(","+caseInfo.getProblemNotes());
xwpfRun1.setFontSize(14);
xwpfRun2.setFontSize(14);
xwpfRun2.setColor("4747d1");
xwpfRun3.setFontSize(14);
List<AttachmentEntity> fileList = (List<AttachmentEntity>)map.get("fileList");
for(AttachmentEntity at:fileList){
String mainPath = at.getMainPath();
String path = at.getPath();
if(!StringUtils.isNullOrEmpty(mainPath) && !StringUtils.isNullOrEmpty(path)){
//第一张图片
document.addPictureData(new FileInputStream(mainPath+path), XWPFDocumentUtil.PICTURE_TYPE_JPEG);
document.createPicture(document.getAllPictures().size() - 1, 300, 400, document.createParagraph());
}
}
}
} OutputStream output = response.getOutputStream();
//生成word文件的文件名
String fileName= new String(("镇街日报.docx").getBytes("UTF-8"),"iso-8859-1");
response.setHeader("Content-disposition", "attachment; filename=" + fileName);
//把word文档写到输出流
document.write(output);
} catch (InvalidFormatException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//--------------------------------word文档结束-----------------------------------------------------
}

  

   效果如下图所示:

 

POI 生成 word 文档 简单版(包括文字、表格、图片、字体样式设置等)的更多相关文章

  1. POI生成WORD文档

    h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...

  2. POI生成word文档完整案例及讲解

    一,网上的API讲解 其实POI的生成Word文档的规则就是先把获取到的数据转成xml格式的数据,然后通过xpath解析表单式的应用取值,判断等等,然后在把取到的值放到word文档中,最后在输出来. ...

  3. 使用poi根据模版生成word文档,支持插入数据和图片

    一.制作word模版,${xxxx}是一会要替换的内容,最下面的表格是要插入数据,根据是否以$开头来判断是需要替换还是插入数据, 注意如果是需要插入数据,制作的表格模版需要一行空行,也只能有一行空行, ...

  4. java POI往word文档中指定位置插入表格

    1.Service  demo import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.a ...

  5. Poi之Word文档结构介绍

    1.poi之word文档结构介绍之正文段落 一个文档包含多个段落,一个段落包含多个Runs,一个Runs包含多个Run,Run是文档的最小单元 获取所有段落:List<XWPFParagraph ...

  6. Aspose.Words简单生成word文档

    Aspose.Words简单生成word文档 Aspose.Words.Document doc = new Aspose.Words.Document(); Aspose.Words.Documen ...

  7. POI加dom4j将数据库的数据按一定格式生成word文档

    一:需求:将从数据库查处来的数据,生成word文档,并有固定的格式.(dom4j的jar包+poi的jar包) 二:解决:(1)先建立固定格式的word文档(2007版本以上),另存成为xml文件,作 ...

  8. C#简单实现动态数据生成Word文档并保存

    今天正好有人问我,怎么生成一个报表式的Word文档. 就是文字的样式和位置相对固定不变,只是里面的内容从数据中读取. 我觉得类似这种的一般用第三方报表来做比较简便.但既然要求了Word,只好硬着头皮来 ...

  9. Android根据word模板文档将表单数据生成word文档的方案整理

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 尝试的方案包括以下几种: freemarker 只能在java项目上运行,无法在Android项目上运行: 参考资料:<Fre ...

随机推荐

  1. 深入探究js中的隐式变量声明

    前两天遇到的问题,经过很多网友的深刻讨论,终于有一个相对可以解释的通的逻辑了,然后我仔细研究了一下相关的点,顺带研究了一下js中的隐式变量. 以下文章中提到的隐式变量都是指没有用var,let,con ...

  2. cp -rf 操作时依然会提示覆盖

    在linux上经常会使用cp -rf命令,该命令就是强制覆盖指定目录下的文件,但有时使用该命令依然会提示是否覆盖,cp命令的参数有如下一些: 参数说明: -a:此选项通常在复制目录时使用,它保留链接. ...

  3. Mybatis面试题吐血总结

    高强度训练第二十天总结:Mybatis面试题 什么是Mybatis? Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时 只需要关注 SQL 语句本身,不需要花费精力 ...

  4. 利用Helm简化Kubernetes应用部署(1)

    目录 利用Helm简化Kubernetes应用部署  Helm基础  安装Helm  使用Visual Studio 2019为Helm编写一个简单的应用    利用Helm简化Kubernetes应 ...

  5. (八十四)c#Winform自定义控件-导航菜单(类Office菜单)

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...

  6. charles抓包小程序

    charles抓包小程序: 原理呢,简单理解,通过charles开代理,然后手工wifi设置代理上网. 但是要做一些准备:手机要安装charles 证书. 注意的是安卓和ios有区别:目前安卓7.0版 ...

  7. 人生,还没困难到"非死不可"

    最近半个月,美国著名的Facebook公司,出了好几件大事.第一件事,2019年9月19日,一名陈姓中国软件工程师在Facebook加州总部跳楼自杀.第二件事,2019年10月4日,一名软件工程师在座 ...

  8. k8s运维记 - 如何让部署到k8s的kong网关托管自定义静态资源?

    目的 使用kong作为目录/data/reports的静态资源服务器,为了测试,已于目录/data/reports下创建文件report.html,如下: <html> <head& ...

  9. MyBatis resultType用Map 返回值中有NULL则缺少字段 返回值全NULL则map为null

    这个问题我大概花了2个小时才找到结果 总共需要2个设置 这里是对应springboot中的配置写法 @select("select sum(a) a,sum(b) b from XXX wh ...

  10. centos 7安装rac 11gR2时运行root.sh报错找不到ohas服务(ohasd failed to start)

    单独在linux 7中为ohasd设置一个服务.步骤如下1. 创建服务ohas.service的服务文件并赋予权限touch /usr/lib/systemd/system/ohas.servicec ...