PrintController.java 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package com.uas.report.controller;
  2. import java.io.IOException;
  3. import java.io.OutputStream;
  4. import java.util.HashMap;
  5. import java.util.Map;
  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.service.PrintService;
  15. /**
  16. * 报表打印
  17. *
  18. * @author sunyj
  19. * @since 2016年8月16日 下午3:49:02
  20. */
  21. @Controller
  22. @RequestMapping("/print")
  23. public class PrintController {
  24. private static Logger logger = Logger.getLogger(PrintController.class);
  25. @Autowired
  26. private PrintService printService;
  27. /**
  28. * 打印报表
  29. *
  30. * @param reportName
  31. * 不为null;需要打印的报表的名称,不带任何后缀(如打印采购单,即为"Purchase")
  32. * @param whereCondition
  33. * 可为null;where之后的条件(包括where)
  34. * @param otherParameters
  35. * 若模板已指定需要的参数,则不可为null;其他参数,区别于whereCondition,报表某些字段的值取决于这些参数
  36. * @param response
  37. * @return
  38. */
  39. @RequestMapping("")
  40. @ResponseBody
  41. public String print(String reportName, String whereCondition, Map<String, Object> otherParameters,
  42. HttpServletResponse response) {
  43. String message = "";
  44. if (StringUtils.isEmpty(reportName)) {
  45. message = "报表名称无效!";
  46. logger.error(message);
  47. return message;
  48. }
  49. logger.info("开始打印报表: " + reportName);
  50. byte[] results = printService.print(reportName, whereCondition, otherParameters);
  51. if (ArrayUtils.isEmpty(results)) {
  52. message = "报表 " + reportName + " 打印失败!";
  53. logger.error(message);
  54. return message;
  55. }
  56. OutputStream outputStream = null;
  57. try {
  58. response.setContentType("application/pdf");
  59. outputStream = response.getOutputStream();
  60. outputStream.write(results);
  61. outputStream.flush();
  62. outputStream.close();
  63. } catch (IOException e) {
  64. logger.error("连接被关闭!");
  65. e.printStackTrace();
  66. }
  67. message = "报表 " + reportName + " 打印完成!";
  68. logger.info(message);
  69. return message;
  70. }
  71. /**
  72. * 测试打印
  73. *
  74. * @param response
  75. * @return
  76. */
  77. @RequestMapping("/test")
  78. @ResponseBody
  79. public String testPrint(HttpServletResponse response) {
  80. String reportName = "Purchase";
  81. String whereCondition = "where pu_code = 'MP160800017' and pd_qty > 1000";
  82. Map<String, Object> otherParameters = new HashMap<>();
  83. otherParameters.put("OTHER_PARAMETER_1", "天气真好!");
  84. return print(reportName, whereCondition, otherParameters, response);
  85. }
  86. }