PrintController.java 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. package com.uas.report.controller;
  2. import java.io.IOException;
  3. import java.io.OutputStream;
  4. import java.util.Map;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import org.apache.commons.lang.ArrayUtils;
  8. import org.apache.log4j.Logger;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.stereotype.Controller;
  11. import org.springframework.util.StringUtils;
  12. import org.springframework.web.bind.annotation.RequestMapping;
  13. import org.springframework.web.bind.annotation.ResponseBody;
  14. import com.uas.report.core.exception.SystemError;
  15. import com.uas.report.service.PrintService;
  16. /**
  17. * 报表打印
  18. *
  19. * @author sunyj
  20. * @since 2016年8月16日 下午3:49:02
  21. */
  22. @Controller
  23. @RequestMapping("/print")
  24. public class PrintController {
  25. private static Logger logger = Logger.getLogger(PrintController.class);
  26. @Autowired
  27. private PrintService printService;
  28. /**
  29. * 导出报表
  30. *
  31. * @param userName
  32. * 不为null;当前账套用户名
  33. * @param reportName
  34. * 不为null;需要导出的报表的名称,不带任何后缀(如导出采购单,即为"Purchase")
  35. * @param whereCondition
  36. * 可为null;where之后的条件(包括where)
  37. * @param otherParameters
  38. * 若模板已指定需要的参数,则不可为null;其他参数,区别于whereCondition,报表某些字段的值取决于这些参数;
  39. * JSON格式,数据为键值对
  40. * @param exportFileType
  41. * 报表导出的格式,默认为pdf
  42. * @param request
  43. * @param response
  44. * @return
  45. */
  46. @RequestMapping("/export")
  47. @ResponseBody
  48. public void export(String userName, String reportName, String whereCondition, String otherParameters,
  49. String exportFileType, HttpServletRequest request, HttpServletResponse response) {
  50. String message = "";
  51. if (StringUtils.isEmpty(userName)) {
  52. message = "未传入当前账套用户名!";
  53. logger.error(message);
  54. throw new SystemError(message);
  55. }
  56. if (StringUtils.isEmpty(reportName)) {
  57. message = "报表名称无效!";
  58. logger.error(message);
  59. throw new SystemError(message);
  60. }
  61. logger.info("开始导出报表:" + reportName);
  62. if (StringUtils.isEmpty(exportFileType)) {
  63. exportFileType = "pdf";
  64. }
  65. byte[] data = printService.export(userName, reportName, whereCondition, otherParameters, exportFileType);
  66. if (ArrayUtils.isEmpty(data)) {
  67. message = "报表导出失败:" + reportName;
  68. logger.error(message);
  69. throw new SystemError(message);
  70. }
  71. try {
  72. String exportFileName = reportName;
  73. if (exportFileType.equals("xls_with_only_data")) {
  74. exportFileName += ".xls";
  75. } else {
  76. exportFileName += "." + exportFileType;
  77. }
  78. response.setHeader("Content-Disposition", "attachment;filename=" + exportFileName);
  79. OutputStream outputStream = response.getOutputStream();
  80. outputStream.write(data);
  81. outputStream.flush();
  82. outputStream.close();
  83. } catch (IOException e) {
  84. logger.error("浏览器重复请求!");
  85. }
  86. logger.info("报表导出完成:" + reportName);
  87. }
  88. /**
  89. * 报表预览时获取pdf流
  90. *
  91. * @param userName
  92. * 不为null;当前账套用户名
  93. * @param reportName
  94. * 不为null;需要预览的报表的名称,不带任何后缀(如预览采购单,即为"Purchase")
  95. * @param whereCondition
  96. * 可为null;where之后的条件(包括where)
  97. * @param otherParameters
  98. * 若模板已指定需要的参数,则不可为null;其他参数,区别于whereCondition,报表某些字段的值取决于这些参数;
  99. * JSON格式,数据为键值对
  100. * @param pageIndex
  101. * 分页展示,当前页码,从0开始
  102. * @return
  103. */
  104. @RequestMapping(value = "/loadPdfData")
  105. @ResponseBody
  106. public Map<String, Object> loadPdfData(String userName, String reportName, String whereCondition,
  107. String otherParameters, Integer pageIndex, HttpServletResponse response) {
  108. String message = "";
  109. if (StringUtils.isEmpty(userName)) {
  110. message = "未传入当前账套用户名!";
  111. logger.error(message);
  112. throw new SystemError(message);
  113. }
  114. if (StringUtils.isEmpty(reportName)) {
  115. message = "报表名称无效!";
  116. logger.error(message);
  117. throw new SystemError(message);
  118. }
  119. logger.info("开始预览报表:" + reportName);
  120. Map<String, Object> result = printService.preview(userName, reportName, whereCondition, otherParameters,
  121. pageIndex);
  122. byte[] data = null;
  123. if (result != null && result.get("data") != null) {
  124. data = (byte[]) result.get("data");
  125. }
  126. if (data == null) {
  127. message = "获取预览数据失败";
  128. logger.error(message);
  129. throw new SystemError(message);
  130. }
  131. String pdfPath = printService.writePdfFile(reportName, data);
  132. result.put("pdfPath", pdfPath);
  133. logger.info("预览报表成功:" + reportName);
  134. return result;
  135. }
  136. }