word自定义格式 并下载
1 /** 2 * 3 * @param pRun 4 * @param 20 间距 5 * @param fontSize 字体大小 6 * @param bold 是否加粗 7 * @param underLine 是否下划线 8 * @param underLineColor 下划线的颜色 9 * @param underLineStyle 下划线的样式 1 10 */ 11 private static void setCommonRunStyle(XWPFRun pRun,int Textposition,int fontSize,boolean bold,boolean underLine,String underLineColor,int underLineStyle){ 12 pRun.setFontSize(fontSize);//设置字体大小 13 pRun.setFontFamily("Courier"); // 设置使用何种字体 14 pRun.setTextPosition(Textposition); // 设置上下两行之间的间距 15 pRun.setBold(bold); // 设置加粗 16 17 CTRPr pRpr = null; 18 if (pRun.getCTR() != null) { 19 pRpr = pRun.getCTR().getRPr(); 20 if (pRpr == null) { 21 pRpr = pRun.getCTR().addNewRPr(); 22 } 23 } 24 if(underLine){ 25 CTUnderline u = pRpr.isSetU() ? pRpr.getU() : pRpr.addNewU(); 26 u.setVal(STUnderline.Enum.forInt(Math.abs(underLineStyle % 19))); 27 if (underLineColor != null) { 28 u.setColor(underLineColor); 29 } 30 } 31 } 32 33 /**** 34 * word 中添加换行 35 * @param i i必须要大于0 i为几 就是中间添加几个20的高度 36 */ 37 private static void wordHeight(int j,XWPFDocument doc){ 38 for(int i=0;i<j;i++){ 39 XWPFParagraph kongP1= doc.createParagraph(); 40 XWPFRun kongP1Run = kongP1.createRun(); 41 setCommonRunStyle(kongP1Run,100,100,false,false,"666666",1); 42 kongP1Run.setText(" "); 43 } 44 } 45 46 47 /** 48 * 下载计划书word 49 * @author 50 * @time 51 * @description 52 */ 53 public static String downloadPlanWord(HttpServletRequest request,HttpServletResponse response){ 54 LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher"); 55 Delegator delegator = (Delegator)request.getAttribute("delegator"); 56 GenericValue userLogin = (GenericValue) request.getSession().getAttribute("userLogin"); 57 Map<String, Object> outResult = ServiceUtil.returnSuccess(); 58 String startTime = request.getParameter("startTime"); 59 String endTime = request.getParameter("endTime"); 60 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 61 XWPFDocument doc = new XWPFDocument(); 62 try { 63 //根据农户进行计划查询的分组 未执行的 64 List<EntityCondition> Conds = FastList.newInstance(); 65 Conds.add(EntityCondition.makeCondition("executeStatusId", EntityOperator.EQUALS,"PPLECT_UNEXECUTED")); 66 if(UtilValidate.isNotEmpty(startTime)){ 67 Conds.add(EntityCondition.makeCondition("planStartTime",EntityOperator.GREATER_THAN_EQUAL_TO,Timestamp.valueOf(startTime+" 00:00:00"))); 68 } 69 if(UtilValidate.isNotEmpty(endTime)){ 70 Conds.add(EntityCondition.makeCondition("planStartTime",EntityOperator.LESS_THAN_EQUAL_TO,Timestamp.valueOf(endTime+" 00:00:00"))); 71 } 72 List<GenericValue> planList = delegator.findList("MaterialProductionPlanInfo", 73 EntityCondition.makeCondition(Conds),null, null, null, false); 74 if(UtilValidate.isEmpty(planList)){ 75 XWPFParagraph noFarmer = doc.createParagraph(); 76 noFarmer.setAlignment(ParagraphAlignment.CENTER); 77 noFarmer.setVerticalAlignment(TextAlignment.TOP); 78 XWPFRun noFarmerRun = noFarmer.createRun(); 79 setCommonRunStyle(noFarmerRun,20,20,true,false,"666666",1); 80 noFarmerRun.setText("没有农户存在种植计划"); 81 response.reset(); 82 String fileName = "种植计划书.doc"; 83 response.setContentType("application/x-msdownloadoctet-stream;charset=utf-8"); 84 response.setHeader("Content-Disposition","attachment;filename=\"" + URLEncoder.encode(fileName, "UTF-8")); 85 OutputStream out = response.getOutputStream(); 86 doc.write(out); 87 out.flush(); 88 doc.write(out); 89 out.close(); 90 return "error"; 91 } 92 Map<String,List<GenericValue>> farmerMap = FastMap.newInstance(); 93 for(GenericValue plan:planList){ 94 if(farmerMap.containsKey(plan.getString("farmerId"))){ 95 farmerMap.get(plan.getString("farmerId")).add(plan); 96 }else{ 97 List<GenericValue> planEntityList = FastList.newInstance(); 98 planEntityList.add(plan); 99 farmerMap.put(plan.getString("farmerId"),planEntityList); 100 } 101 } 102 int i =0; 103 XWPFParagraph titleP = null; 104 GenericValue farmerEntity = null; 105 for(String key : farmerMap.keySet()){ 106 farmerEntity = delegator.findOne("Farmer", false, UtilMisc.toMap("farmerId", key)); 107 planList = farmerMap.get(key); 108 titleP = doc.createParagraph(); 109 if(i>0){ 110 titleP.setPageBreak(true); 111 } 112 i++; 113 titleP.setAlignment(ParagraphAlignment.CENTER);// 设置字体对齐方式 114 XWPFRun titlePRun = titleP.createRun(); // 第一页要使用p1所定义的属性 115 setCommonRunStyle(titlePRun,40,20,true,false,"666666",1); 116 titlePRun.setText("种植计划下达通知书"); 117 // 农户 118 XWPFParagraph farmerP = doc.createParagraph(); 119 XWPFRun farmerRunLabel = farmerP.createRun();// 第一页要使用p1所定义的属性 120 setCommonRunStyle(farmerRunLabel,20,16,false,false,"666666",1); 121 farmerRunLabel.setText("农户:"); 122 XWPFRun farmerRun = farmerP.createRun();// 第一页要使用p1所定义的属性 123 setCommonRunStyle(farmerRun,20,16,false,true,"666666",1); 124 farmerRun.setText(farmerEntity.getString("farmerName")); 125 //计划数目 126 XWPFParagraph sizeP = doc.createParagraph(); 127 XWPFRun sizeRunLabel1 = sizeP.createRun(); 128 setCommonRunStyle(sizeRunLabel1,20,16,false,false,"666666",1); 129 sizeRunLabel1.setText(" 根据农场生产计划总体安排,对您提出的"); 130 XWPFRun sizeRunValue = sizeP.createRun(); 131 setCommonRunStyle(sizeRunValue,20,16,false,true,"666666",1); 132 sizeRunValue.setText(String.valueOf(planList.size())); 133 XWPFRun sizeRunLabel2 = sizeP.createRun(); 134 setCommonRunStyle(sizeRunLabel2,20,16,false,false,"666666",1); 135 sizeRunLabel2.setText("座棚种植请求,现通知如下:"); 136 //空行 137 wordHeight(1,doc); 138 //种植计划 139 int planIndex=0; 140 for(GenericValue plan:planList){ 141 planIndex ++ ; 142 XWPFParagraph planP = doc.createParagraph(); 143 planP.setVerticalAlignment(TextAlignment.TOP); 144 XWPFRun farmFieldNameRun = planP.createRun(); 145 setCommonRunStyle(farmFieldNameRun,20,16,false,true,"666666",1); 146 farmFieldNameRun.setText(plan.getString("farmFieldName")); 147 148 XWPFRun planRunLabel1 = planP.createRun(); 149 setCommonRunStyle(planRunLabel1,20,16,false,false,"666666",1); 150 planRunLabel1.setText("棚,种植品种"); 151 152 XWPFRun materialNameRun = planP.createRun(); 153 setCommonRunStyle(materialNameRun,20,16,false,true,"666666",1); 154 materialNameRun.setText(plan.getString("materialName")); 155 156 XWPFRun planRunLabel2 = planP.createRun(); 157 setCommonRunStyle(planRunLabel2,20,16,false,false,"666666",1); 158 planRunLabel2.setText(",种植时间"); 159 160 String planStartTimeStr = sdf.format(new Date(plan.getTimestamp("planStartTime").getTime())); 161 XWPFRun planStartTimeRun = planP.createRun(); 162 setCommonRunStyle(planStartTimeRun,20,16,false,true,"666666",1); 163 planStartTimeRun.setText(planStartTimeStr); 164 if(planIndex==planList.size()){ 165 wordHeight(4,doc); 166 } 167 } 168 //提示 169 XWPFParagraph tipP = doc.createParagraph(); 170 tipP.setAlignment(ParagraphAlignment.CENTER); 171 tipP.setVerticalAlignment(TextAlignment.TOP); 172 XWPFRun tipPRun = tipP.createRun(); 173 setCommonRunStyle(tipPRun,120,14,false,false,"666666",1); 174 tipPRun.setText("请务必按照通知下达的计划种植,否则公司不负责收购。"); 175 //农户 176 XWPFParagraph farmerSignP = doc.createParagraph(); 177 XWPFRun farmerSignPRun = farmerSignP.createRun(); 178 setCommonRunStyle(farmerSignPRun,30,16,false,false,"666666",1); 179 farmerSignPRun.setText("农户:"); 180 //技术员 181 XWPFParagraph technicianP = doc.createParagraph(); 182 XWPFRun technicianPRun = technicianP.createRun(); 183 setCommonRunStyle(technicianPRun,30,16,false,false,"666666",1); 184 technicianPRun.setText("技术员:"); 185 //负责人 186 XWPFParagraph chargerP = doc.createParagraph(); 187 XWPFRun chargerPRun = chargerP.createRun(); 188 setCommonRunStyle(chargerPRun,30,16,false,false,"666666",1); 189 chargerPRun.setText("负责人:"); 190 //通知送达时间 191 XWPFParagraph deliveryTimeP = doc.createParagraph(); 192 XWPFRun deliveryTimePRun = deliveryTimeP.createRun(); 193 setCommonRunStyle(deliveryTimePRun,30,16,false,false,"666666",1); 194 deliveryTimePRun.setText("通知送达时间: 年 月 日"); 195 //苏星生态农业生产科 196 XWPFParagraph suxP = doc.createParagraph(); 197 suxP.setAlignment(ParagraphAlignment.RIGHT); 198 XWPFRun suxPRun = suxP.createRun(); 199 setCommonRunStyle(suxPRun,30,16,false,false,"666666",1); 200 suxPRun.setText("苏星生态农业生产科"); 201 } 202 response.reset(); 203 String fileName = "种植计划书.doc"; 204 response.setContentType("application/x-msdownloadoctet-stream;charset=utf-8"); 205 response.setHeader("Content-Disposition","attachment;filename=\"" + URLEncoder.encode(fileName, "UTF-8")); 206 OutputStream out = response.getOutputStream(); 207 doc.write(out); 208 out.flush(); 209 doc.write(out); 210 out.close(); 211 } catch (GenericEntityException e) { 212 // TODO Auto-generated catch block 213 Debug.logError(e, "查询农户种植计划异常" + e.toString(), module); 214 CommonEvents.writeResultToResponse(ServiceUtil.returnError("查询农户种植计划异常"), response); 215 return "error"; 216 } catch (IOException e) { 217 // TODO Auto-generated catch block 218 e.printStackTrace(); 219 } 220 return "success"; 221 }
作者:wangqc
出处:http://www.cnblogs.com/wangqc/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-wangqc。