@SuppressWarnings("resource") public IGITF01DTO interfaceDefExportWords(IGITF01DTO dto) throws BLException{ log.info("==========接口定义信息-导出处理开始=========="); HttpServletResponse response = dto.getResponse(); response.reset(); response.setContentType("binary/octet-stream"); OutputStream output = null; try { //调用查询要导出的结果 InterfaceDefInfo interinfo = interfaceDefBL.searchInterfaceDefByPK(Integer.parseInt(dto.getIfdid_opt())); //查询接口校验信息 InterfaceCheckSearchCondImpl ifccond = new InterfaceCheckSearchCondImpl(); ifccond.setIfdid_eq(Integer.parseInt(dto.getIfdid_opt())); List<InterfaceCheckInfo> dellistifc = interfaceCheckBL.searchInterfaceCheck(ifccond); //文档名称 String doctitle = "需要导出的文件.docx"; response.setHeader("Content-Disposition", "attachment;filename=" + new String(doctitle.getBytes("gb2312"), "iso-8859-1")); output = response.getOutputStream(); //Blank Document XWPFDocument document= new XWPFDocument(); document = exportInterfaceDef(document,interinfo,dellistifc); //执行导出 document.write(output); } catch (Exception e) { log.error("错误信息:"+e); } finally { try { // 关闭输出流 if (output != null) { output.flush(); output.close(); } } catch (Exception e) { log.error(">>导出Word关闭输出流异常:" + e.getMessage()); } } log.info("==========导出处理结束=========="); return dto; } /** * @Description 导出Word文档 * @param document 文档操作对象 * @return XWPFDocument * @throws BLException */ public XWPFDocument exportInterfaceDef(XWPFDocument document, InterfaceDefInfo ifdinfo,List<InterfaceCheckInfo> dellistifc) throws BLException { //添加标题 XWPFParagraph titleParagraph = document.createParagraph(); //设置段落居中 titleParagraph.setAlignment(ParagraphAlignment.CENTER); XWPFRun titleParagraphRun = titleParagraph.createRun(); titleParagraphRun.setText("***");//设置文本 titleParagraphRun.setColor("000000"); titleParagraphRun.setFontSize(22); titleParagraphRun.setFontFamily("黑体"); //换行 XWPFParagraph paragraph1 = document.createParagraph(); XWPFRun paragraphRun1 = paragraph1.createRun(); paragraphRun1.setText("\r"); titleParagraph = document.createParagraph(); titleParagraph.setAlignment(ParagraphAlignment.LEFT); titleParagraphRun = titleParagraph.createRun(); titleParagraphRun.setText("1.总体业务说明"); titleParagraphRun.setColor("000000"); titleParagraphRun.setBold(true); titleParagraphRun.setFontSize(16); titleParagraphRun.setFontFamily("仿宋"); paragraph1 = document.createParagraph(); paragraphRun1 = paragraph1.createRun(); paragraphRun1.setText("\r"); //二级标题 titleParagraph = document.createParagraph(); titleParagraph.setAlignment(ParagraphAlignment.LEFT); titleParagraphRun = titleParagraph.createRun(); titleParagraphRun.setText("2.详细设计"); titleParagraphRun.setColor("000000"); titleParagraphRun.setBold(true); titleParagraphRun.setFontSize(16); titleParagraphRun.setFontFamily("仿宋"); paragraph1 = document.createParagraph(); paragraphRun1 = paragraph1.createRun(); paragraphRun1.setText("\r"); //二级标题 //查询来源下拉列表 String resourcename = ""; CodeDetailSearchCondImpl codeDetailhCond = new CodeDetailSearchCondImpl(); codeDetailhCond.setCcid(CodeDefine.ITF_RESOURCE.getCcid()); codeDetailhCond.setCid(ifdinfo.getIfdresource()); List<CodeDetail> resourceList = codeDetailBL.searchCodeDetail(codeDetailhCond, CommonDefineUtils.CODE_DETAIL_ORDER_BY_MODE_0); if(resourceList!=null&&resourceList.size()>0){ resourcename =resourceList.get(0).getCvalue(); } titleParagraph = document.createParagraph(); titleParagraph.setAlignment(ParagraphAlignment.LEFT); titleParagraphRun = titleParagraph.createRun(); titleParagraphRun.setText("2.1."+resourcename+"接口集成"); titleParagraphRun.setColor("000000"); titleParagraphRun.setBold(true); titleParagraphRun.setFontSize(16); titleParagraphRun.setFontFamily("仿宋"); paragraph1 = document.createParagraph(); paragraphRun1 = paragraph1.createRun(); paragraphRun1.setText("\r"); //三级标题 titleParagraph = document.createParagraph(); titleParagraph.setAlignment(ParagraphAlignment.LEFT); titleParagraphRun = titleParagraph.createRun(); titleParagraphRun.setText("2.1.1."+ifdinfo.getIfdflag()+"接口"); titleParagraphRun.setColor("000000"); titleParagraphRun.setBold(true); titleParagraphRun.setFontSize(16); titleParagraphRun.setFontFamily("仿宋"); paragraph1 = document.createParagraph(); paragraphRun1 = paragraph1.createRun(); paragraphRun1.setText("\r"); //三级标题 titleParagraph = document.createParagraph(); titleParagraph.setAlignment(ParagraphAlignment.LEFT); titleParagraphRun = titleParagraph.createRun(); titleParagraphRun.setText("2.1.2.功能描述"); titleParagraphRun.setColor("000000"); titleParagraphRun.setBold(true); titleParagraphRun.setFontSize(16); titleParagraphRun.setFontFamily("仿宋"); paragraph1 = document.createParagraph(); paragraphRun1 = paragraph1.createRun(); paragraphRun1.setText("\r"); titleParagraph = document.createParagraph(); titleParagraph.setAlignment(ParagraphAlignment.LEFT); titleParagraphRun = titleParagraph.createRun(); titleParagraphRun.setText(ifdinfo.getIfddesc()); titleParagraphRun.setColor("000000"); titleParagraphRun.setBold(false); titleParagraphRun.setFontSize(14); titleParagraphRun.setFontFamily("仿宋"); paragraph1 = document.createParagraph(); paragraphRun1 = paragraph1.createRun(); paragraphRun1.setText("\r"); titleParagraph = document.createParagraph(); titleParagraph.setAlignment(ParagraphAlignment.LEFT); titleParagraphRun = titleParagraph.createRun(); titleParagraphRun.setText("2.1.3.消息体格式及说明"); titleParagraphRun.setColor("000000"); titleParagraphRun.setBold(true); titleParagraphRun.setFontSize(16); titleParagraphRun.setFontFamily("仿宋"); paragraph1 = document.createParagraph(); paragraphRun1 = paragraph1.createRun(); paragraphRun1.setText("\r"); titleParagraph = document.createParagraph(); titleParagraph.setAlignment(ParagraphAlignment.LEFT); titleParagraphRun = titleParagraph.createRun(); titleParagraphRun.setText(ifdinfo.getIfprecontent()); titleParagraphRun.setColor("000000"); titleParagraphRun.setBold(false); titleParagraphRun.setFontSize(14); titleParagraphRun.setFontFamily("仿宋"); paragraph1 = document.createParagraph(); paragraphRun1 = paragraph1.createRun(); paragraphRun1.setText("\r"); titleParagraph = document.createParagraph(); titleParagraph.setAlignment(ParagraphAlignment.LEFT); titleParagraphRun = titleParagraph.createRun(); titleParagraphRun.setText("2.1.4.接口定义"); titleParagraphRun.setColor("000000"); titleParagraphRun.setBold(true); titleParagraphRun.setFontSize(16); titleParagraphRun.setFontFamily("仿宋"); //基本信息表格 if(dellistifc!=null&&dellistifc.size()>0){ XWPFTable infoTable = document.createTable(); //列宽自动分割 CTTblWidth infoTableWidth = infoTable.getCTTbl().addNewTblPr().addNewTblW(); infoTableWidth.setType(STTblWidth.DXA); infoTableWidth.setW(BigInteger.valueOf(8000)); XWPFTableRow firstRowOne = infoTable.getRow(0); XWPFTableCell titleCell1 = firstRowOne.getCell(0); setStyles(titleCell1, "变量名称",false,5000,14,ParagraphAlignment.CENTER); XWPFTableCell titleCell2 = firstRowOne.addNewTableCell(); setStyles(titleCell2, "类型",false,5000,14,ParagraphAlignment.LEFT); XWPFTableCell titleCell3 = firstRowOne.addNewTableCell(); setStyles(titleCell3, "说明",false,5000,14,ParagraphAlignment.LEFT); XWPFTableCell titleCell4 = firstRowOne.addNewTableCell(); setStyles(titleCell4, "是否必填",false,5000,14,ParagraphAlignment.LEFT); XWPFTableCell titleCell5 = firstRowOne.addNewTableCell(); setStyles(titleCell5, "描述",false,5000,14,ParagraphAlignment.LEFT); //设置行高与垂直居中 firstRowOne.setHeight(500); titleCell1.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); titleCell2.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); titleCell3.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); titleCell4.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); titleCell5.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); for(InterfaceCheckInfo ifcinfo:dellistifc){ //表格第1行 XWPFTableRow tableRow = infoTable.createRow(); XWPFTableCell tableCell1 = tableRow.getCell(0); setStyles(tableCell1, ifcinfo.getIfckey(),false,5000,14,ParagraphAlignment.CENTER); XWPFTableCell tableCell2 = tableRow.getCell(1); setStyles(tableCell2, ifcinfo.getIfctype(),false,5000,14,ParagraphAlignment.LEFT); XWPFTableCell tableCell3 = tableRow.getCell(2); setStyles(tableCell3, ifcinfo.getIfcname(),false,5000,14,ParagraphAlignment.LEFT); XWPFTableCell tableCell4 = tableRow.getCell(3); setStyles(tableCell4, ifcinfo.getIfcname(),false,5000,14,ParagraphAlignment.LEFT); //判断当前是否必填 String isnull = ""; if("0".equals(ifcinfo.getIfcnotnull())){ isnull = "是"; }else if("1".equals(ifcinfo.getIfcnotnull())){ isnull = "否"; } XWPFTableCell tableCell5 = tableRow.getCell(4); setStyles(tableCell5, ifcinfo.getIfcdesc(),false,5000,14,ParagraphAlignment.LEFT); //设置行高与垂直居中 tableRow.setHeight(500); tableCell1.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); tableCell2.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); tableCell3.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); tableCell4.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); tableCell5.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); } } return document; } /** * @Description 设置样式 * @param cell 单元格 * @param val 单元格的值 * @param changeLine 是否换行 * @param colWidth 表格列宽 * @param fontsize 字体大小 * @param align 对齐方式 */ public void setStyles(XWPFTableCell cell,String val,boolean changeLine,Integer colWidth,int fontsize,ParagraphAlignment align) { // 关键的一步,删掉原有的段落 cell.removeParagraph(0);// 感觉注释有些问题,这个好像只是删除单元格原有内容,而不是删掉整个段落 XWPFParagraph newPara = new XWPFParagraph(cell.getCTTc().addNewP(), cell); //内容居中显示 newPara.setAlignment(align); XWPFRun xr = newPara.createRun(); xr.setFontFamily("仿宋"); xr.setFontSize(fontsize); if(StringUtils.isNotEmpty(val)) { //判断是否需要单元格内换行 String[] valArr = {val}; if(val.indexOf("#hh#")>0) { valArr = val.split("#hh#"); } for(int i=0;i<valArr.length;i++) { String inval = valArr[i]; xr.setText(inval); if(i<valArr.length-1) { xr.addBreak(); } } } else { xr.setText(""); } //换行方法(语句) if(changeLine){ xr.addBreak(); } if(colWidth!=0){ //设置表格里列宽 CTTc cttc = cell.getCTTc(); CTTcPr cellPr = cttc.addNewTcPr(); cellPr.addNewTcW().setW(BigInteger.valueOf(colWidth)); } }
java导出word
最新推荐文章于 2024-05-07 14:12:15 发布