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     }
原文地址:https://www.cnblogs.com/wangqc/p/javaWord.html