From 86cf76c247193cbd88dafdc057530e4c69967661 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=87=95=E9=B9=8F?= Date: Mon, 28 Jun 2021 11:15:02 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=84=E8=A7=88=E6=8A=A5=E9=94=99=E6=8F=90?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../html/HtmlPreviewServletAction.java | 622 +++++++++--------- ureport2-js/src/preview.js | 20 +- 2 files changed, 322 insertions(+), 320 deletions(-) diff --git a/ureport2-console/src/main/java/com/bstek/ureport/console/html/HtmlPreviewServletAction.java b/ureport2-console/src/main/java/com/bstek/ureport/console/html/HtmlPreviewServletAction.java index 0cf9e1e..79370a0 100644 --- a/ureport2-console/src/main/java/com/bstek/ureport/console/html/HtmlPreviewServletAction.java +++ b/ureport2-console/src/main/java/com/bstek/ureport/console/html/HtmlPreviewServletAction.java @@ -1,12 +1,12 @@ /******************************************************************************* * Copyright 2017 Bstek - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -61,313 +61,315 @@ import com.bstek.ureport.model.Report; * @since 2017年2月15日 */ public class HtmlPreviewServletAction extends RenderPageServletAction { - private ExportManager exportManager; - private ReportBuilder reportBuilder; - private ReportRender reportRender; - private HtmlProducer htmlProducer=new HtmlProducer(); - @Override - public void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - String method=retriveMethod(req); - if(method!=null){ - invokeMethod(method, req, resp); - }else{ - VelocityContext context = new VelocityContext(); - HtmlReport htmlReport=null; - String errorMsg=null; - try{ - htmlReport=loadReport(req); - }catch(Exception ex){ - if(!(ex instanceof ReportDesignException)){ - ex.printStackTrace(); - } - errorMsg=buildExceptionMessage(ex); - } - String title=buildTitle(req); - context.put("title", title); - if(htmlReport==null){ - context.put("content", "
报表计算出错,错误信息如下:
"+errorMsg+"
"); - context.put("error", true); - context.put("searchFormJs", ""); - context.put("downSearchFormHtml", ""); - context.put("upSearchFormHtml", ""); - }else{ - SearchFormData formData=htmlReport.getSearchFormData(); - if(formData!=null){ - context.put("searchFormJs", formData.getJs()); - if(formData.getFormPosition().equals(FormPosition.up)){ - context.put("upSearchFormHtml", formData.getHtml()); - context.put("downSearchFormHtml", ""); - }else{ - context.put("downSearchFormHtml", formData.getHtml()); - context.put("upSearchFormHtml", ""); - } - }else{ - context.put("searchFormJs", ""); - context.put("downSearchFormHtml", ""); - context.put("upSearchFormHtml", ""); - } - context.put("content", htmlReport.getContent()); - context.put("style", htmlReport.getStyle()); - context.put("reportAlign", htmlReport.getReportAlign()); - context.put("totalPage", htmlReport.getTotalPage()); - context.put("totalPageWithCol", htmlReport.getTotalPageWithCol()); - context.put("pageIndex", htmlReport.getPageIndex()); - context.put("chartDatas", convertJson(htmlReport.getChartDatas())); - context.put("error", false); - context.put("file", req.getParameter("_u")); - context.put("intervalRefreshValue",htmlReport.getHtmlIntervalRefreshValue()); - String customParameters=buildCustomParameters(req); - context.put("customParameters", customParameters); - context.put("_t", ""); - Tools tools=null; - if(MobileUtils.isMobile(req)){ - tools=new Tools(false); - tools.setShow(false); - }else{ - String toolsInfo=req.getParameter("_t"); - if(StringUtils.isNotBlank(toolsInfo)){ - tools=new Tools(false); - if(toolsInfo.equals("0")){ - tools.setShow(false); - }else{ - String[] infos=toolsInfo.split(","); - for(String name:infos){ - tools.doInit(name); - } - } - context.put("_t", toolsInfo); - context.put("hasTools", true); - }else{ - tools=new Tools(true); - } - } - context.put("tools", tools); - } - context.put("contextPath", req.getContextPath()); - resp.setContentType("text/html"); - resp.setCharacterEncoding("utf-8"); - Template template=ve.getTemplate("ureport-html/html-preview.html","utf-8"); - PrintWriter writer=resp.getWriter(); - template.merge(context, writer); - writer.close(); - } - } - - private String buildTitle(HttpServletRequest req){ - String title=req.getParameter("_title"); - if(StringUtils.isBlank(title)){ - title=req.getParameter("_u"); - title=decode(title); - int point=title.lastIndexOf(".ureport.xml"); - if(point>-1){ - title=title.substring(0,point); - } - if(title.equals("p")){ - title="设计中报表"; - } - }else{ - title=decode(title); - } - return title+"-ureport"; - } - - private String convertJson(Collection data){ - if(data==null || data.size()==0){ - return ""; - } - ObjectMapper mapper=new ObjectMapper(); - try { - String json = mapper.writeValueAsString(data); - return json; - } catch (Exception e) { - throw new ReportComputeException(e); - } - } - - public void loadData(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - HtmlReport htmlReport=loadReport(req); - writeObjectToJson(resp, htmlReport); - } + private ExportManager exportManager; + private ReportBuilder reportBuilder; + private ReportRender reportRender; + private HtmlProducer htmlProducer = new HtmlProducer(); - public void loadPrintPages(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - String file=req.getParameter("_u"); - file=decode(file); - if(StringUtils.isBlank(file)){ - throw new ReportComputeException("Report file can not be null."); - } - Map parameters = buildParameters(req); - ReportDefinition reportDefinition=null; - if(file.equals(PREVIEW_KEY)){ - reportDefinition=(ReportDefinition)TempObjectCache.getObject(PREVIEW_KEY); - if(reportDefinition==null){ - throw new ReportDesignException("Report data has expired,can not do export excel."); - } - }else{ - reportDefinition=reportRender.getReportDefinition(file); - } - Report report=reportBuilder.buildReport(reportDefinition, parameters); - Map chartMap=report.getContext().getChartDataMap(); - if(chartMap.size()>0){ - CacheUtils.storeChartDataMap(chartMap); - } - FullPageData pageData=PageBuilder.buildFullPageData(report); - StringBuilder sb=new StringBuilder(); - List> list=pageData.getPageList(); - Context context=report.getContext(); - if(list.size()>0){ - for(int i=0;i columnPages=list.get(i); - if(i==0){ - String html=htmlProducer.produce(context,columnPages,pageData.getColumnMargin(),false); - sb.append(html); - }else{ - String html=htmlProducer.produce(context,columnPages,pageData.getColumnMargin(),false); - sb.append(html); - } - } - }else{ - List pages=report.getPages(); - for(int i=0;i map=new HashMap(); - map.put("html", sb.toString()); - writeObjectToJson(resp, map); - } - - public void loadPagePaper(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - String file=req.getParameter("_u"); - file=decode(file); - if(StringUtils.isBlank(file)){ - throw new ReportComputeException("Report file can not be null."); - } - ReportDefinition report=null; - if(file.equals(PREVIEW_KEY)){ - report=(ReportDefinition)TempObjectCache.getObject(PREVIEW_KEY); - if(report==null){ - throw new ReportDesignException("Report data has expired."); - } - }else{ - report=reportRender.getReportDefinition(file); - } - Paper paper=report.getPaper(); - writeObjectToJson(resp, paper); - } - - private HtmlReport loadReport(HttpServletRequest req) { - Map parameters = buildParameters(req); - HtmlReport htmlReport=null; - String file=req.getParameter("_u"); - file=decode(file); - String pageIndex=req.getParameter("_i"); - if(StringUtils.isBlank(file)){ - throw new ReportComputeException("Report file can not be null."); - } - if(file.equals(PREVIEW_KEY)){ - ReportDefinition reportDefinition=(ReportDefinition)TempObjectCache.getObject(PREVIEW_KEY); - if(reportDefinition==null){ - throw new ReportDesignException("Report data has expired,can not do preview."); - } - Report report=reportBuilder.buildReport(reportDefinition, parameters); - Map chartMap=report.getContext().getChartDataMap(); - if(chartMap.size()>0){ - CacheUtils.storeChartDataMap(chartMap); - } - htmlReport=new HtmlReport(); - String html=null; - if(StringUtils.isNotBlank(pageIndex) && !pageIndex.equals("0")){ - Context context=report.getContext(); - int index=Integer.valueOf(pageIndex); - SinglePageData pageData=PageBuilder.buildSinglePageData(index, report); - List pages=pageData.getPages(); - if(pages.size()==1){ - Page page=pages.get(0); - html=htmlProducer.produce(context,page,false); - }else{ - html=htmlProducer.produce(context,pages,pageData.getColumnMargin(),false); - } - htmlReport.setTotalPage(pageData.getTotalPages()); - htmlReport.setPageIndex(index); - }else{ - html=htmlProducer.produce(report); - } - if(report.getPaper().isColumnEnabled()){ - htmlReport.setColumn(report.getPaper().getColumnCount()); - } - htmlReport.setChartDatas(report.getContext().getChartDataMap().values()); - htmlReport.setContent(html); - htmlReport.setTotalPage(report.getPages().size()); - htmlReport.setStyle(reportDefinition.getStyle()); - htmlReport.setSearchFormData(reportDefinition.buildSearchFormData(report.getContext().getDatasetMap(),parameters)); - htmlReport.setReportAlign(report.getPaper().getHtmlReportAlign().name()); - htmlReport.setHtmlIntervalRefreshValue(report.getPaper().getHtmlIntervalRefreshValue()); - }else{ - if(StringUtils.isNotBlank(pageIndex) && !pageIndex.equals("0")){ - int index=Integer.valueOf(pageIndex); - htmlReport=exportManager.exportHtml(file,req.getContextPath(),parameters,index); - }else{ - htmlReport=exportManager.exportHtml(file,req.getContextPath(),parameters); - } - } - return htmlReport; - } - - - private String buildCustomParameters(HttpServletRequest req){ - StringBuilder sb=new StringBuilder(); - Enumeration enumeration=req.getParameterNames(); - while(enumeration.hasMoreElements()){ - Object obj=enumeration.nextElement(); - if(obj==null){ - continue; - } - String name=obj.toString(); - String value=req.getParameter(name); - if(name==null || value==null || (name.startsWith("_") && !name.equals("_n"))){ - continue; - } - if(sb.length()>0){ - sb.append("&"); - } - sb.append(name); - sb.append("="); - sb.append(value); - } - return sb.toString(); - } - - private String buildExceptionMessage(Throwable throwable){ - Throwable root=buildRootException(throwable); - StringWriter sw=new StringWriter(); - PrintWriter pw=new PrintWriter(sw); - root.printStackTrace(pw); - String trace=sw.getBuffer().toString(); - trace=trace.replaceAll("\n", "
"); - pw.close(); - return trace; - } - - public void setExportManager(ExportManager exportManager) { - this.exportManager = exportManager; - } - - public void setReportBuilder(ReportBuilder reportBuilder) { - this.reportBuilder = reportBuilder; - } - public void setReportRender(ReportRender reportRender) { - this.reportRender = reportRender; - } + @Override + public void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String method = retriveMethod(req); + if (method != null) { + invokeMethod(method, req, resp); + } else { + VelocityContext context = new VelocityContext(); + HtmlReport htmlReport = null; + String errorMsg = "报表文件读取失败"; + try { + htmlReport = loadReport(req); + } catch (Exception ex) { + if (ex instanceof ReportDesignException) { + ex.printStackTrace(); + errorMsg = "报表设计错误"; + } + } + String title = buildTitle(req); + context.put("title", title); + if (htmlReport == null) { + context.put("content", "
预览报表失败:" + errorMsg + "
"); + context.put("error", true); + context.put("searchFormJs", ""); + context.put("downSearchFormHtml", ""); + context.put("upSearchFormHtml", ""); + } else { + SearchFormData formData = htmlReport.getSearchFormData(); + if (formData != null) { + context.put("searchFormJs", formData.getJs()); + if (formData.getFormPosition().equals(FormPosition.up)) { + context.put("upSearchFormHtml", formData.getHtml()); + context.put("downSearchFormHtml", ""); + } else { + context.put("downSearchFormHtml", formData.getHtml()); + context.put("upSearchFormHtml", ""); + } + } else { + context.put("searchFormJs", ""); + context.put("downSearchFormHtml", ""); + context.put("upSearchFormHtml", ""); + } + context.put("content", htmlReport.getContent()); + context.put("style", htmlReport.getStyle()); + context.put("reportAlign", htmlReport.getReportAlign()); + context.put("totalPage", htmlReport.getTotalPage()); + context.put("totalPageWithCol", htmlReport.getTotalPageWithCol()); + context.put("pageIndex", htmlReport.getPageIndex()); + context.put("chartDatas", convertJson(htmlReport.getChartDatas())); + context.put("error", false); + context.put("file", req.getParameter("_u")); + context.put("intervalRefreshValue", htmlReport.getHtmlIntervalRefreshValue()); + String customParameters = buildCustomParameters(req); + context.put("customParameters", customParameters); + context.put("_t", ""); + Tools tools = null; + if (MobileUtils.isMobile(req)) { + tools = new Tools(false); + tools.setShow(false); + } else { + String toolsInfo = req.getParameter("_t"); + if (StringUtils.isNotBlank(toolsInfo)) { + tools = new Tools(false); + if (toolsInfo.equals("0")) { + tools.setShow(false); + } else { + String[] infos = toolsInfo.split(","); + for (String name : infos) { + tools.doInit(name); + } + } + context.put("_t", toolsInfo); + context.put("hasTools", true); + } else { + tools = new Tools(true); + } + } + context.put("tools", tools); + } + context.put("contextPath", req.getContextPath()); + resp.setContentType("text/html"); + resp.setCharacterEncoding("utf-8"); + Template template = ve.getTemplate("ureport-html/html-preview.html", "utf-8"); + PrintWriter writer = resp.getWriter(); + template.merge(context, writer); + writer.close(); + } + } - @Override - public String url() { - return "/preview"; - } + private String buildTitle(HttpServletRequest req) { + String title = req.getParameter("_title"); + if (StringUtils.isBlank(title)) { + title = req.getParameter("_u"); + title = decode(title); + int point = title.lastIndexOf(".ureport.xml"); + if (point > -1) { + title = title.substring(0, point); + } + if (title.equals("p")) { + title = "设计中报表"; + } + } else { + title = decode(title); + } + return title + "-ureport"; + } + + private String convertJson(Collection data) { + if (data == null || data.size() == 0) { + return ""; + } + ObjectMapper mapper = new ObjectMapper(); + try { + String json = mapper.writeValueAsString(data); + return json; + } catch (Exception e) { + throw new ReportComputeException(e); + } + } + + public void loadData(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + HtmlReport htmlReport = loadReport(req); + writeObjectToJson(resp, htmlReport); + } + + public void loadPrintPages(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String file = req.getParameter("_u"); + file = decode(file); + if (StringUtils.isBlank(file)) { + throw new ReportComputeException("Report file can not be null."); + } + Map parameters = buildParameters(req); + ReportDefinition reportDefinition = null; + if (file.equals(PREVIEW_KEY)) { + reportDefinition = (ReportDefinition) TempObjectCache.getObject(PREVIEW_KEY); + if (reportDefinition == null) { + throw new ReportDesignException("Report data has expired,can not do export excel."); + } + } else { + reportDefinition = reportRender.getReportDefinition(file); + } + Report report = reportBuilder.buildReport(reportDefinition, parameters); + Map chartMap = report.getContext().getChartDataMap(); + if (chartMap.size() > 0) { + CacheUtils.storeChartDataMap(chartMap); + } + FullPageData pageData = PageBuilder.buildFullPageData(report); + StringBuilder sb = new StringBuilder(); + List> list = pageData.getPageList(); + Context context = report.getContext(); + if (list.size() > 0) { + for (int i = 0; i < list.size(); i++) { + List columnPages = list.get(i); + if (i == 0) { + String html = htmlProducer.produce(context, columnPages, pageData.getColumnMargin(), false); + sb.append(html); + } else { + String html = htmlProducer.produce(context, columnPages, pageData.getColumnMargin(), false); + sb.append(html); + } + } + } else { + List pages = report.getPages(); + for (int i = 0; i < pages.size(); i++) { + Page page = pages.get(i); + if (i == 0) { + String html = htmlProducer.produce(context, page, false); + sb.append(html); + } else { + String html = htmlProducer.produce(context, page, true); + sb.append(html); + } + } + } + Map map = new HashMap(); + map.put("html", sb.toString()); + writeObjectToJson(resp, map); + } + + public void loadPagePaper(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String file = req.getParameter("_u"); + file = decode(file); + if (StringUtils.isBlank(file)) { + throw new ReportComputeException("Report file can not be null."); + } + ReportDefinition report = null; + if (file.equals(PREVIEW_KEY)) { + report = (ReportDefinition) TempObjectCache.getObject(PREVIEW_KEY); + if (report == null) { + throw new ReportDesignException("Report data has expired."); + } + } else { + report = reportRender.getReportDefinition(file); + } + Paper paper = report.getPaper(); + writeObjectToJson(resp, paper); + } + + private HtmlReport loadReport(HttpServletRequest req) { + Map parameters = buildParameters(req); + HtmlReport htmlReport = null; + String file = req.getParameter("_u"); + file = decode(file); + String pageIndex = req.getParameter("_i"); + if (StringUtils.isBlank(file)) { + throw new ReportComputeException("Report file can not be null."); + } + if (file.equals(PREVIEW_KEY)) { + ReportDefinition reportDefinition = (ReportDefinition) TempObjectCache.getObject(PREVIEW_KEY); + if (reportDefinition == null) { + throw new ReportDesignException("Report data has expired,can not do preview."); + } + Report report = reportBuilder.buildReport(reportDefinition, parameters); + Map chartMap = report.getContext().getChartDataMap(); + if (chartMap.size() > 0) { + CacheUtils.storeChartDataMap(chartMap); + } + htmlReport = new HtmlReport(); + String html = null; + if (StringUtils.isNotBlank(pageIndex) && !pageIndex.equals("0")) { + Context context = report.getContext(); + int index = Integer.valueOf(pageIndex); + SinglePageData pageData = PageBuilder.buildSinglePageData(index, report); + List pages = pageData.getPages(); + if (pages.size() == 1) { + Page page = pages.get(0); + html = htmlProducer.produce(context, page, false); + } else { + html = htmlProducer.produce(context, pages, pageData.getColumnMargin(), false); + } + htmlReport.setTotalPage(pageData.getTotalPages()); + htmlReport.setPageIndex(index); + } else { + html = htmlProducer.produce(report); + } + if (report.getPaper().isColumnEnabled()) { + htmlReport.setColumn(report.getPaper().getColumnCount()); + } + htmlReport.setChartDatas(report.getContext().getChartDataMap().values()); + htmlReport.setContent(html); + htmlReport.setTotalPage(report.getPages().size()); + htmlReport.setStyle(reportDefinition.getStyle()); + htmlReport.setSearchFormData(reportDefinition.buildSearchFormData(report.getContext().getDatasetMap(), parameters)); + htmlReport.setReportAlign(report.getPaper().getHtmlReportAlign().name()); + htmlReport.setHtmlIntervalRefreshValue(report.getPaper().getHtmlIntervalRefreshValue()); + } else { + if (StringUtils.isNotBlank(pageIndex) && !pageIndex.equals("0")) { + int index = Integer.valueOf(pageIndex); + htmlReport = exportManager.exportHtml(file, req.getContextPath(), parameters, index); + } else { + htmlReport = exportManager.exportHtml(file, req.getContextPath(), parameters); + } + } + return htmlReport; + } + + + private String buildCustomParameters(HttpServletRequest req) { + StringBuilder sb = new StringBuilder(); + Enumeration enumeration = req.getParameterNames(); + while (enumeration.hasMoreElements()) { + Object obj = enumeration.nextElement(); + if (obj == null) { + continue; + } + String name = obj.toString(); + String value = req.getParameter(name); + if (name == null || value == null || (name.startsWith("_") && !name.equals("_n"))) { + continue; + } + if (sb.length() > 0) { + sb.append("&"); + } + sb.append(name); + sb.append("="); + sb.append(value); + } + return sb.toString(); + } + + private String buildExceptionMessage(Throwable throwable) { + Throwable root = buildRootException(throwable); + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + root.printStackTrace(pw); + String trace = sw.getBuffer().toString(); + trace = trace.replaceAll("\n", "
"); + pw.close(); + return trace; + } + + public void setExportManager(ExportManager exportManager) { + this.exportManager = exportManager; + } + + public void setReportBuilder(ReportBuilder reportBuilder) { + this.reportBuilder = reportBuilder; + } + + public void setReportRender(ReportRender reportRender) { + this.reportRender = reportRender; + } + + @Override + public String url() { + return "/preview"; + } } diff --git a/ureport2-js/src/preview.js b/ureport2-js/src/preview.js index c5974fa..d469ba0 100644 --- a/ureport2-js/src/preview.js +++ b/ureport2-js/src/preview.js @@ -103,16 +103,16 @@ $(document).ready(function(){ const url=window._server+'/excel'+urlParameters; window.open(url,'_blank'); }); - $(`.ureport-export-excel-paging`).click(function(){ - const urlParameters=buildLocationSearchParameters(); - const url=window._server+'/excel/paging'+urlParameters; - window.open(url,'_blank'); - }); - $(`.ureport-export-excel-paging-sheet`).click(function(){ - const urlParameters=buildLocationSearchParameters(); - const url=window._server+'/excel/sheet'+urlParameters; - window.open(url,'_blank'); - }); + // $(`.ureport-export-excel-paging`).click(function(){ + // const urlParameters=buildLocationSearchParameters(); + // const url=window._server+'/excel/paging'+urlParameters; + // window.open(url,'_blank'); + // }); + // $(`.ureport-export-excel-paging-sheet`).click(function(){ + // const urlParameters=buildLocationSearchParameters(); + // const url=window._server+'/excel/sheet'+urlParameters; + // window.open(url,'_blank'); + // }); }); window._currentPageIndex=null;