日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

displaytag 导出

發布時間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 displaytag 导出 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

只使用displaytag的導出功能,表單展示用jqgrid實現。只需要后臺修改一部分代碼,其他的表單都能使用這個功能導出。導出四種文件格式:csv,excel,xml,pdf。

思路:在過濾器中處理,過濾器類中獲取查詢的數據,生成文件流傳給前臺。表單是分頁顯示的,導出需要全部內容,將rows的值設成-1,page設成1即可;請求中傳入顯示的字段和對應的名稱,用逗號隔開;加上表單查詢條件;

1           <a href='<c:url value="/bus/home/page?6578706f7274=1&rows=-1&page=1">
2                     <c:param name="filename" value="用戶信息TIME.csv"></c:param>
3                     <c:param name="fields" value="name;age;sex"></c:param>
4                     <c:param name="titles" value="姓名;年齡;性別"></c:param>
5                 </c:url>'><span class="export csv">CSV </span></a>|

displaytag通過判斷請求的參數中是否包含6578706f7274來判斷是否為導出,我把這個保留下來并修改下:6578706f7274=1導出csv,6578706f7274=2導出excel,6578706f7274=3導出xml,6578706f7274=4導出pdf。

 1   public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
 2         throws IOException, ServletException
 3     {
 4         
 5         if (servletRequest.getParameter(TableTagParameters.PARAMETER_EXPORTING) == null)
 6         {
 7             filterChain.doFilter(servletRequest, servletResponse);
 8             return;
 9         }
10         int exportType = Integer.valueOf(servletRequest.getParameter(TableTagParameters.PARAMETER_EXPORTING));
11         HttpServletRequest request = (HttpServletRequest) servletRequest;
12 
13         BufferedResponseWrapper wrapper = new BufferedResponseWrapper13Impl((HttpServletResponse) servletResponse);
14 
15         filterChain.doFilter(request, wrapper);
16         
17         switch (exportType) {
18         case 1:
19             ExportCsv.writeExport((HttpServletResponse) servletResponse, servletRequest, wrapper);
20             break;
21         case 2:
22             ExportExcel.writeExport((HttpServletResponse) servletResponse, servletRequest, wrapper);
23             break;
24         case 3:
25             ExportXml.writeExport((HttpServletResponse) servletResponse, servletRequest, wrapper);
26             break;
27         case 4:
28             ExportPdf.writeExport((HttpServletResponse) servletResponse, servletRequest, wrapper);
29             break;
30 
31         default: break;
32         }
33 
34     }

導出csv文件:

displaytag導出cvs文件的實現:把數據放到字符串中,字符串需要按照cvs內容格式拼接好:每行的數據用逗號(,)分開,每行最后加上換行即可,然后把數據字符串放入響應的流中傳到前臺產生csv文件。

 1   public static void writeExport(HttpServletResponse response,
 2             ServletRequest request, BufferedResponseWrapper wrapper)
 3             throws IOException {
 4         
 5         if(request.getParameter("fields") == null){
 6             return;
 7         }
 8         if(request.getParameter("titles") == null){
 9             return;
10         }
11         if(request.getParameter("filename") == null){
12             return;
13         }
14 
15         String filename = request.getParameter("filename").replace("TIME", DateUtils.dateToString(new Date(), "yyyyMMddHHmmss"));
16         String[] fields = request.getParameter("fields").split(";");
17         String[] titles = new String( request.getParameter("titles").getBytes("ISO8859-1"),"UTF-8").split(";");
18         String contentType = "text/csv; charset=GB2312";
19         response.setHeader("Content-Disposition", "attachment; filename=\""
20                 + filename + "\"");
21 
22         response.setContentType(contentType);
23         String strCon = wrapper.getContentAsString();
24         JSONObject object = JSONObject.fromObject(strCon);
25         JSONArray array = object.getJSONArray("rows");
26         String cons = formatContentCsv(array, titles, fields);
27         response.setContentLength(cons.getBytes("GB2312").length);
28         PrintWriter out = response.getWriter();
29         out.write(cons);
30         out.flush();
31 
32     }
33 
34     private static String formatContentCsv(JSONArray array, String[] titles, String[] fields) {
35         StringBuffer res = new StringBuffer();
36         Iterator iterator = array.iterator();
37         for (String s : titles) {
38             res.append(s + ",");
39         }
40         res.append("\r");
41         while (iterator.hasNext()) {
42             JSONObject jsonObj = (JSONObject) iterator.next();
43 
44             for (String s : fields) {
45                 res.append(jsonObj.getString(s)+",");
46             }
47             res.append("\r");
48         }
49         return res.toString();
50 
51     }

導出xml文件:

導出xml文件基本和導出csv文件相同,都是把數據以字符串形式放入流中傳到前臺。區別就是字符串拼接成xml內容格式和response.setContentType("text/xml; charset=UTF-8");

代碼略。

?

導出excel文件:

displaytag導出excel文件也是使用POI提供的導出功能。創建HSSFWorkbook wb = new HSSFWorkbook();然后將數據遍歷放入wb中,然后將wb寫入字節流中傳入前臺。

 1   public static void writeExport(HttpServletResponse response,
 2             ServletRequest request, BufferedResponseWrapper wrapper)
 3             throws IOException {
 4         if(request.getParameter("fields") == null){
 5             return;
 6         }
 7         if(request.getParameter("titles") == null){
 8             return;
 9         }
10         if(request.getParameter("filename") == null){
11             return;
12         }
13 
14         String filename = request.getParameter("filename").replace("TIME", DateUtils.dateToString(new Date(), "yyyyMMddHHmmss"));
15         String[] fields = request.getParameter("fields").split(";");
16         String[] titles = new String( request.getParameter("titles").getBytes("ISO8859-1"),"UTF-8").split(";");
17         String contentType = "application/vnd.ms-excel; charset=utf-8";
18         response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
19         
20         response.setContentType(contentType);
21         String strCon = wrapper.getContentAsString();
22         JSONObject object = JSONObject.fromObject(strCon);
23         JSONArray array = object.getJSONArray("rows"); 
24         OutputStream out = response.getOutputStream();
25         try {
26             createExcel(out, array, titles, fields);
27         } catch (JspException e) {
28             e.printStackTrace();
29         }
30         out.flush();
31         out.close();
32 
33     }
34 
35     public static void createExcel(OutputStream out, JSONArray array, String[] titles, String[] fields) throws JspException  {
36         try  
37         {  
38             HSSFWorkbook wb = new HSSFWorkbook();  
39             HSSFSheet sheet;  
40             sheet = wb.createSheet("-");  
41   
42             int rowNum = 0;  
43             int colNum = 0;  
44             
45             // Create an header row
46             HSSFRow xlsTitleRow = sheet.createRow(rowNum++);
47 
48             HSSFCellStyle headerStyle = wb.createCellStyle();
49             HSSFFont bold = wb.createFont();
50             bold.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
51             headerStyle.setFont(bold);
52             
53             for(String s: titles){
54                 HSSFCell cell = xlsTitleRow.createCell((short) colNum);
55                 cell.setCellValue(s);
56                 cell.setCellStyle(headerStyle);
57                 sheet.setColumnWidth(colNum, 33*180);
58                 colNum++;
59             }
60             Iterator ite = array.iterator();
61             while (ite.hasNext())  
62             {  
63                 HSSFRow xlsRow = sheet.createRow(rowNum++);
64                 colNum = 0;
65                 JSONObject jsonObj = (JSONObject)ite.next();
66                 for(String s: fields){
67                     int index = colNum;
68                     HSSFCell cell = xlsRow.createCell((short) colNum++);
69                     cell.setCellValue(jsonObj.getString(s));
70                 }
71                
72             }  
73             wb.write(out);  
74         }  
75         catch (Exception e)  
76         {  
77             e.printStackTrace();78         }  
79     }
80     

導出pdf文件:

displaytag導出pdf文件需要導入itext包,如果有中文,不要使用FontFactory.getFont()設置字體,否則中文不顯示(我用BaseFont.createFont可以正確顯示中文)。

  1     private static Table tablePDF;
  2     private static Font smallFont;
  3     private static BaseFont bfChinese;
  4     public static void writeExport(HttpServletResponse response,
  5             ServletRequest request, BufferedResponseWrapper wrapper)
  6             throws IOException {
  7         
  8         if(request.getParameter("fields") == null){
  9             return;
 10         }
 11         if(request.getParameter("titles") == null){
 12             return;
 13         }
 14         if(request.getParameter("filename") == null){
 15             return;
 16         }
 17 
 18         String filename = request.getParameter("filename").replace("TIME", DateUtils.dateToString(new Date(), "yyyyMMddHHmmss"));
 19         String[] fields = request.getParameter("fields").split(";");
 20         String[] titles = new String( request.getParameter("titles").getBytes("ISO8859-1"),"UTF-8").split(";");
 21         String contentType = "application/pdf; charset=utf-8";
 22         response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
 23         
 24         response.setContentType(contentType);
 25         String strCon = wrapper.getContentAsString();
 26         JSONObject object = JSONObject.fromObject(strCon);
 27         JSONArray array = object.getJSONArray("rows"); 
 28         OutputStream out = response.getOutputStream();
 29         try {
 30             createPdf(out, array, titles, fields);
 31         } catch (JspException e) {
 32             e.printStackTrace();
 33         }
 34         out.flush();
 35         out.close();
 36 
 37     }
 38 
 39     public static void createPdf(OutputStream out, JSONArray array, String[] titles, String[] fields) throws JspException  {
 40         try  
 41         {  
 42             initTable(titles.length);
 43              // Initialize the Document and register it with PdfWriter listener and the OutputStream
 44             Document document = new Document(PageSize.A4.rotate(), 60, 60, 40, 40);
 45             document.addCreationDate();
 46             
 47             HeaderFooter footer = new HeaderFooter(new Phrase(TagConstants.EMPTY_STRING, smallFont), true);
 48             footer.setBorder(Rectangle.NO_BORDER);
 49             footer.setAlignment(Element.ALIGN_CENTER);
 50 
 51             PdfWriter.getInstance(document, out);
 52 
 53             // Fill the virtual PDF table with the necessary data
 54            
 55             
 56             for(String s: titles){
 57                 Cell hdrCell = getCell(s);
 58                 hdrCell.setGrayFill(0.9f);
 59                 hdrCell.setHeader(true);
 60                 tablePDF.addCell(hdrCell);
 61             }
 62             Iterator ite = array.iterator();
 63             while (ite.hasNext())  
 64             {  
 65                 JSONObject jsonObj = (JSONObject)ite.next();
 66                 for(String s: fields){
 67                     Cell cell = getCell(jsonObj.getString(s));
 68                     tablePDF.addCell(cell);
 69                 }
 70                
 71             }  
 72             document.open();
 73             document.setFooter(footer);
 74             document.add(tablePDF);
 75             document.close();
 76         }  
 77         catch (Exception e)  
 78         {  
 79            e.printStackTrace(); 80         }  
 81     }
 82     private static Cell getCell(String value) throws BadElementException
 83     {
 84         Cell cell = new Cell(new Chunk(StringUtils.trimToEmpty(value), smallFont));
 85         cell.setVerticalAlignment(Element.ALIGN_TOP);
 86         cell.setLeading(8);
 87         return cell;
 88     }
 89     private static void initTable(int colNums) throws BadElementException
 90     {
 91         tablePDF = new Table(colNums);
 92         tablePDF.setDefaultVerticalAlignment(Element.ALIGN_TOP);
 93         tablePDF.setCellsFitPage(true);
 94         tablePDF.setWidth(100);
 95 
 96         tablePDF.setPadding(2);
 97         tablePDF.setSpacing(0);
 98         try {
 99             bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
100         } catch (DocumentException e) {
101             // TODO Auto-generated catch block
102             e.printStackTrace();
103         } catch (IOException e) {
104             // TODO Auto-generated catch block
105             e.printStackTrace();
106         }
107 //        smallFont = FontFactory.getFont(FontFactory.HELVETICA, 7, Font.NORMAL, new Color(0, 0, 0));
108         smallFont = new Font(bfChinese, 7, Font.NORMAL);
109 
110     }

由于本人對一些原理上的理解還有些不足,所以解釋的不是很多,不過基本所有代碼都以貼上,功能已經實現。

?

轉載于:https://www.cnblogs.com/yunp07/p/4250865.html

總結

以上是生活随笔為你收集整理的displaytag 导出的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。