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;