Jasperreport教程JasperreportUtils

整理了一下用的Utils,更新一下哈!



1、DocType


   
   
  1. /**
  2. * 定义了报表输出类型,固定了可输出类型
  3. *
  4. * @author
  5. *
  6. */
  7. public enum DocType {
  8. PDF, HTML, XLS,XLSX, XML, RTF, CSV, TXT, DOC
  9. }


2、DocTypeUtil


   
   
  1. /**
  2. * 匹配格式
  3. *
  4. * @author
  5. *
  6. */
  7. public class DocTypeUtil {
  8. /**
  9. * 默认类型pdf
  10. * @param docType
  11. * @return
  12. */
  13. public static DocType getEnumDocType(String docType) {
  14. DocType type = DocType.PDF;
  15. docType = docType.toUpperCase();
  16. if (docType.equals("DOC")) {
  17. type = DocType.DOC;
  18. } else if (docType.equals("XLS")) {
  19. type = DocType.XLS;
  20. } else if(docType.equals("XLSX")) {
  21. type = DocType.XLSX;
  22. }else if (docType.equals("XML")) {
  23. type = DocType.XML;
  24. } else if (docType.equals("RTF")) {
  25. type = DocType.RTF;
  26. } else if (docType.equals("CSV")) {
  27. type = DocType.CSV;
  28. } else if (docType.equals("HTML")) {
  29. type = DocType.HTML;
  30. } else if (docType.equals("TXT")) {
  31. type = DocType.TXT;
  32. }
  33. return type;
  34. }
  35. }


3、JasperreportUtils


   
   
  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.IOException;
  4. import java.io.OutputStream;
  5. import java.io.PrintWriter;
  6. import java.lang.reflect.Field;
  7. import java.math.BigDecimal;
  8. import java.net.URLEncoder;
  9. import java.sql.Connection;
  10. import java.text.DecimalFormat;
  11. import java.text.SimpleDateFormat;
  12. import java.util.Date;
  13. import java.util.List;
  14. import java.util.Map;
  15. import javax.servlet.ServletException;
  16. import javax.servlet.ServletOutputStream;
  17. import javax.servlet.http.HttpServletRequest;
  18. import javax.servlet.http.HttpServletResponse;
  19. import javax.servlet.http.HttpSession;
  20. import org.slf4j.Logger;
  21. import org.slf4j.LoggerFactory;
  22. import cn.cslp.bi.common.ConfigProperties;
  23. import net.sf.jasperreports.engine.JRAbstractExporter;
  24. import net.sf.jasperreports.engine.JRDataSource;
  25. import net.sf.jasperreports.engine.JREmptyDataSource;
  26. import net.sf.jasperreports.engine.JRException;
  27. import net.sf.jasperreports.engine.JRExporterParameter;
  28. import net.sf.jasperreports.engine.JRParameter;
  29. import net.sf.jasperreports.engine.JasperCompileManager;
  30. import net.sf.jasperreports.engine.JasperExportManager;
  31. import net.sf.jasperreports.engine.JasperFillManager;
  32. import net.sf.jasperreports.engine.JasperPrint;
  33. import net.sf.jasperreports.engine.JasperRunManager;
  34. import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
  35. import net.sf.jasperreports.engine.export.HtmlExporter;
  36. import net.sf.jasperreports.engine.export.JRCsvExporter;
  37. import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
  38. import net.sf.jasperreports.engine.export.JRPdfExporter;
  39. import net.sf.jasperreports.engine.export.JRRtfExporter;
  40. import net.sf.jasperreports.engine.export.JRTextExporter;
  41. import net.sf.jasperreports.engine.export.JRTextExporterParameter;
  42. import net.sf.jasperreports.engine.export.JRXlsExporter;
  43. import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
  44. import net.sf.jasperreports.engine.export.JRXmlExporter;
  45. import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter;
  46. import net.sf.jasperreports.engine.fill.JRFileVirtualizer;
  47. import net.sf.jasperreports.export.ExporterConfiguration;
  48. import net.sf.jasperreports.export.HtmlExporterOutput;
  49. import net.sf.jasperreports.export.SimpleExporterInput;
  50. import net.sf.jasperreports.export.SimpleHtmlExporterOutput;
  51. import net.sf.jasperreports.export.SimpleHtmlReportConfiguration;
  52. import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput;
  53. import net.sf.jasperreports.export.SimplePdfExporterConfiguration;
  54. import net.sf.jasperreports.export.SimpleTextReportConfiguration;
  55. import net.sf.jasperreports.export.SimpleWriterExporterOutput;
  56. import net.sf.jasperreports.export.SimpleXlsReportConfiguration;
  57. import net.sf.jasperreports.export.SimpleXlsxReportConfiguration;
  58. import net.sf.jasperreports.export.SimpleXmlExporterOutput;
  59. import net.sf.jasperreports.export.XmlExporterOutput;
  60. /**
  61. * 报表工具类
  62. *
  63. * @author
  64. *
  65. */
  66. public class JasperreportUtils {
  67. private static final Logger LOGGER = LoggerFactory.getLogger(JasperreportUtils.class);
  68. private HttpServletRequest request;
  69. private HttpServletResponse response;
  70. private HttpSession session;
  71. public JasperreportUtils(HttpServletRequest request, HttpServletResponse response) {
  72. super();
  73. this.request = request;
  74. this.response = response;
  75. this.session = request.getSession();
  76. }
  77. /**
  78. * datasource与parameters填充报表
  79. *
  80. * @param jasperPath
  81. * @param dataSource
  82. * @param parameters
  83. * @return
  84. * @throws JRException
  85. */
  86. public JasperPrint getJasperPrint(String jasperPath, Map <String, Object> parameters, JRDataSource dataSource)
  87. throws JRException {
  88. JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath, parameters, dataSource);
  89. return jasperPrint;
  90. }
  91. /**
  92. * connection与parameters填充报表
  93. *
  94. * @param jasperPath
  95. * @param conn
  96. * @param parameters
  97. * @return
  98. * @throws JRException
  99. */
  100. public JasperPrint getJasperPrint(String jasperPath, Map <String, Object> parameters, Connection conn)
  101. throws JRException {
  102. JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath, parameters, conn);
  103. return jasperPrint;
  104. }
  105. /**
  106. * 传入list获取jasperPrint
  107. *
  108. * @param jasperPath
  109. * @param parameters
  110. * @param list
  111. * @return
  112. * @throws JRException
  113. */
  114. public JasperPrint getJasperPrintWithBeanList(String jasperPath, Map <String, Object> parameters, List <?> list)
  115. throws JRException {
  116. JRDataSource dataSource = null;
  117. if( null != list && list.size()> 0) {
  118. dataSource = new JRBeanCollectionDataSource( list);
  119. } else {
  120. dataSource = new JREmptyDataSource();
  121. }
  122. JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath, parameters, dataSource);
  123. return jasperPrint;
  124. }
  125. /**
  126. * 获得相应类型的Content type
  127. *
  128. * @param docType
  129. * @return
  130. */
  131. public String getContentType(DocType docType) {
  132. String contentType = "text/html";
  133. switch (docType) {
  134. case PDF:
  135. contentType = "application/pdf";
  136. break;
  137. case XLS:
  138. contentType = "application/vnd.ms-excel";
  139. break;
  140. case XLSX:
  141. contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
  142. break;
  143. case XML:
  144. contentType = "text/xml";
  145. break;
  146. case RTF:
  147. contentType = "application/rtf";
  148. break;
  149. case CSV:
  150. contentType = "text/plain";
  151. break;
  152. case DOC:
  153. contentType = "application/msword";
  154. break;
  155. }
  156. return contentType;
  157. }
  158. /**
  159. * jrxml文件 编译为 jasper文件
  160. *
  161. * @param jrxmlPath
  162. * @param jasperPath
  163. * @throws JRException
  164. */
  165. public void jrxmlToJsper(String jrxmlPath, String jasperPath) throws JRException {
  166. JasperCompileManager.compileReportToFile(jrxmlPath, jasperPath);
  167. }
  168. /**
  169. * 将pdf输出到浏览器上
  170. *
  171. * @param jasperPath
  172. * @param parameters
  173. * @param downloadName
  174. * @param dataSource
  175. * @throws IOException
  176. * @throws JRException
  177. */
  178. public void exportPdf(String jasperPath, Map<String, Object> parameters, String downloadName,
  179. JRDataSource dataSource) throws IOException, JRException {
  180. FileInputStream isRef = new FileInputStream( new File(jasperPath));
  181. ServletOutputStream sosRef = response.getOutputStream();
  182. ;
  183. // 放开下载
  184. // response.setHeader("Content-Disposition", "attachment;filename=\"" +
  185. // downloadName + ".pdf\"");
  186. JasperRunManager.runReportToPdfStream(isRef, sosRef, parameters, dataSource);
  187. sosRef.flush();
  188. sosRef.close();
  189. }
  190. /**
  191. * 生成html文件
  192. * @param response
  193. * @param list
  194. * @param jasperPath
  195. * @param fileName
  196. * @param parameters
  197. * @return
  198. */
  199. public String createHtml(HttpServletResponse response, List <?> list, String jasperPath, String fileName,
  200. Map <String, Object> parameters, String folder) {
  201. SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
  202. String dpath = sdf.format(new Date());
  203. String path = ConfigProperties.getBasicFileDirectory()+"/reportHtml" + folder + "/" + dpath;
  204. File file = new File(path);
  205. if (!file.exists()) {
  206. file.mkdirs();
  207. }
  208. String htmlFilePath = path + "/" + fileName;
  209. try {
  210. JRDataSource dataSource = null;
  211. if(null != list && list.size()>0) {
  212. dataSource = new JRBeanCollectionDataSource(list);
  213. }else {
  214. dataSource = new JREmptyDataSource();
  215. }
  216. JasperPrint jasperPrint = this.getJasperPrint(jasperPath, parameters, dataSource);
  217. JasperExportManager.exportReportToHtmlFile(jasperPrint, htmlFilePath);
  218. } catch (Exception ex) {
  219. LOGGER.error("生成html文件错误"+ex.getMessage(),ex);
  220. }
  221. return folder + "/" + dpath + "/" + fileName;
  222. }
  223. /**
  224. * 传入类型,获取输出器
  225. *
  226. * @param docType
  227. * @return
  228. */
  229. @SuppressWarnings("deprecation")
  230. public JRAbstractExporter getJRExporter(DocType docType) {
  231. JRAbstractExporter exporter = null;
  232. switch (docType) {
  233. case PDF:
  234. exporter = new JRPdfExporter();
  235. break;
  236. case HTML:
  237. exporter = new HtmlExporter();
  238. break;
  239. case XLS:
  240. exporter = new JRXlsExporter();
  241. break;
  242. case XLSX:
  243. exporter = new JRXlsxExporter();
  244. break;
  245. case XML:
  246. exporter = new JRXmlExporter();
  247. break;
  248. case RTF:
  249. exporter = new JRRtfExporter();
  250. break;
  251. case CSV:
  252. exporter = new JRCsvExporter();
  253. break;
  254. case DOC:
  255. exporter = new JRRtfExporter();
  256. break;
  257. case TXT:
  258. exporter = new JRTextExporter();
  259. break;
  260. }
  261. return exporter;
  262. }
  263. /**
  264. * 生成不同格式报表文档(带缓存)
  265. *
  266. * @param docType
  267. * 文档类型
  268. * @param jasperPath
  269. */
  270. @SuppressWarnings("deprecation")
  271. public void createExportDocument(DocType docType, String jasperPath, Map <String, Object> parameters, List <?> list,
  272. String fileName) throws JRException, IOException, ServletException {
  273. JRAbstractExporter exporter = getJRExporter(docType);
  274. // 获取后缀
  275. String ext = docType.toString().toLowerCase();
  276. if (!fileName.toLowerCase().endsWith(ext)) {
  277. fileName += "." + ext;
  278. }
  279. // 判断资源类型
  280. if (ext.equals( "xls")) {
  281. SimpleXlsReportConfiguration configuration = new SimpleXlsReportConfiguration();
  282. // 删除记录最下面的空行
  283. configuration.setRemoveEmptySpaceBetweenRows(Boolean. TRUE);
  284. // 一页一个sheet
  285. configuration.setOnePagePerSheet(Boolean. FALSE);
  286. // 显示边框 背景白色
  287. configuration.setWhitePageBackground(Boolean. FALSE);
  288. exporter.setConfiguration(configuration);
  289. }
  290. if(ext.equals( "xlsx")) {
  291. SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration();
  292. configuration.setRemoveEmptySpaceBetweenRows(Boolean. TRUE);
  293. configuration.setRemoveEmptySpaceBetweenColumns(Boolean. TRUE);
  294. configuration.setWhitePageBackground(Boolean. FALSE);
  295. //自动选择格式
  296. configuration.setDetectCellType(Boolean. TRUE);
  297. exporter.setConfiguration(configuration);
  298. }
  299. if (ext.equals( "txt")) {
  300. SimpleTextReportConfiguration configuration = new SimpleTextReportConfiguration();
  301. configuration.setCharWidth((float) 10);
  302. configuration.setCharHeight((float) 15);
  303. exporter.setConfiguration(configuration);
  304. }
  305. response.setContentType(getContentType(docType));
  306. response.setHeader( "Content-Disposition",
  307. "attachment; filename*=UTF-8''" + URLEncoder.encode(fileName, "UTF-8"));
  308. //加缓存
  309. JRFileVirtualizer virtualizer = new JRFileVirtualizer( 2, ConfigProperties.getBasicFileDirectory() + "/temp");
  310. parameters.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);
  311. virtualizer.setReadOnly( true);
  312. exporter.setExporterInput( new SimpleExporterInput(getJasperPrintWithBeanList(jasperPath, parameters, list)));
  313. /*exporter.setParameter(JRExporterParameter.JASPER_PRINT,
  314. getJasperPrintWithBeanList(jasperPath, parameters, list));*/
  315. OutputStream outStream = null;
  316. PrintWriter outWriter = null;
  317. // 解决中文乱码问题
  318. response.setCharacterEncoding( "UTF-8");
  319. if (ext.equals( "csv") || ext.equals( "doc") || ext.equals( "rtf") || ext.equals( "txt")) {
  320. outWriter = response.getWriter();
  321. SimpleWriterExporterOutput outPut = new SimpleWriterExporterOutput(outWriter);
  322. exporter.setExporterOutput(outPut);
  323. //exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, outWriter);
  324. } else {
  325. if(ext.equals( "xml")) {
  326. outWriter = response.getWriter();
  327. XmlExporterOutput outPut = new SimpleXmlExporterOutput(outWriter);
  328. exporter.setExporterOutput(outPut);
  329. } else if(ext.equals( "html")){
  330. outWriter = response.getWriter();
  331. HtmlExporterOutput outPut = new SimpleHtmlExporterOutput(outWriter);
  332. exporter.setExporterOutput(outPut);
  333. } else {
  334. outStream = response.getOutputStream();
  335. exporter.setExporterOutput( new SimpleOutputStreamExporterOutput(outStream));
  336. }
  337. }
  338. try {
  339. exporter.exportReport();
  340. virtualizer.cleanup();
  341. } catch (JRException e) {
  342. throw new ServletException(e);
  343. } finally {
  344. if (outStream != null) {
  345. try {
  346. outStream.close();
  347. } catch (IOException ex) {
  348. }
  349. }
  350. if(outWriter != null) {
  351. outWriter.close();
  352. }
  353. }
  354. }
  355. /**
  356. * 输出以分页的形式输出html
  357. * @param jasperPath
  358. * @param parameters
  359. * @param list
  360. * @throws JRException
  361. * @throws IOException
  362. */
  363. public void createHtmlByPage(JasperPrint jasperPrint,String pageStr) throws JRException, IOException {
  364. int pageIndex = 0;
  365. int lastPageIndex = 0;
  366. HtmlExporter exporter = new HtmlExporter();
  367. if( null != jasperPrint.getPages()) {
  368. lastPageIndex = jasperPrint.getPages().size() - 1;
  369. }
  370. if( null == pageStr) {
  371. pageStr = "0";
  372. }
  373. try {
  374. pageIndex = Integer.valueOf(pageStr);
  375. if(pageIndex > 0) {
  376. pageIndex = pageIndex -1 ;
  377. }
  378. } catch ( Exception e) {
  379. // 如果得到的非数字字符串
  380. if( "lastPage".equals(pageStr)) {
  381. pageIndex = lastPageIndex;
  382. }
  383. }
  384. if (pageIndex < 0) {
  385. pageIndex = 0;
  386. }
  387. if (pageIndex > lastPageIndex) {
  388. pageIndex = lastPageIndex;
  389. }
  390. response.setCharacterEncoding( "UTF-8");
  391. try {
  392. PrintWriter out = response.getWriter();
  393. exporter.setExporterInput( new SimpleExporterInput(jasperPrint));
  394. SimpleHtmlReportConfiguration configuration = new SimpleHtmlReportConfiguration();
  395. configuration.setPageIndex(pageIndex);
  396. exporter.setConfiguration(configuration);
  397. //exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
  398. HtmlExporterOutput outPut = new SimpleHtmlExporterOutput(out);
  399. exporter.setExporterOutput(outPut);
  400. exporter.exportReport();
  401. } catch ( Exception e) {
  402. e.printStackTrace();
  403. }
  404. }
  405. /**
  406. * 批量打印pdf文件
  407. */
  408. public void exportBatchPdf( List<JasperPrint> jasperPrintList,String fileName) {
  409. JRPdfExporter exporter = new JRPdfExporter();
  410. try {
  411. /**
  412. * 注入打印模板
  413. */
  414. exporter.setExporterInput(SimpleExporterInput.getInstance(jasperPrintList));
  415. OutputStream outStream = null;
  416. response.setContentType(getContentType(DocType.PDF));
  417. response.setHeader( "Content-Disposition",
  418. "attachment; filename*=UTF-8''" + URLEncoder.encode(fileName, "UTF-8"));
  419. outStream = response.getOutputStream();
  420. exporter.setExporterOutput( new SimpleOutputStreamExporterOutput(outStream));
  421. //配置项
  422. SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
  423. // 是否批量打印
  424. configuration.setCreatingBatchModeBookmarks( true);
  425. // 是否加密
  426. configuration.setEncrypted( false);
  427. exporter.setConfiguration(configuration);
  428. exporter.exportReport();
  429. } catch ( Exception e) {
  430. e.printStackTrace();
  431. }
  432. }
  433. /**
  434. * 千分位格式化数据 保留两位小数,且 ‘0 ’ 转为 ‘--’
  435. *
  436. * @param obj
  437. * @param fieldNames
  438. * 需转化的属性
  439. * @return
  440. */
  441. public Object toFormatNumber(Object obj, String[] fieldNames) {
  442. Class clazz = (Class) obj.getClass();
  443. Field[] fs = clazz. getDeclaredFields();
  444. for ( int i = 0; i < fs. length; i++) {
  445. Field f = fs[i];
  446. // 设置些属性是可以访问的
  447. f.setAccessible( true);
  448. String type = f.getType().toString();
  449. Object val = null;
  450. try {
  451. for (String str : fieldNames) {
  452. if (f.getName() == str) {
  453. val = f.get(obj);
  454. }
  455. }
  456. if ( null != val) {
  457. if (type.endsWith( "String")) {
  458. if (val.equals( "0")) {
  459. f.set(obj, "--");
  460. } else {
  461. /*
  462. * ; BigDecimal str=new BigDecimal((String) val); DecimalFormat df=new
  463. * DecimalFormat(",###,##0.00");
  464. */ // 保留两位小数
  465. f.set(obj, this.toNumeber((String) val));
  466. }
  467. } else if (type.endsWith( "int") || type.endsWith( "Integer")) {
  468. // System.out.println(f.getType()+"\t");
  469. } else {
  470. // System.out.println(f.getType()+"\t");
  471. }
  472. }
  473. } catch ( Exception ex) {
  474. LOGGER.error( "千分位格式化数据错误"+ex.getMessage(), ex);
  475. }
  476. }
  477. return obj;
  478. }
  479. /**
  480. * 转为万元保留小数点后两位
  481. *
  482. * @param value
  483. * @return
  484. */
  485. private String toNumeber(String value) {
  486. Double number = Double.valueOf(value) / 10000.00;
  487. BigDecimal str = new BigDecimal(number);
  488. DecimalFormat df = new DecimalFormat( ",###,##0.00");
  489. return df.format(str);
  490. }
  491. }

            </div>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值