Ver código fonte

取消计算后报表缓存机制,优化定时刷新报表在遇到服务端错误时显示错误方式,同时不中断刷新

master
youseries 6 anos atrás
pai
commit
114c9b77fe
  1. 31
      ureport2-console/src/main/java/com/bstek/ureport/console/cache/HttpSessionReportCache.java
  2. 2
      ureport2-console/src/main/java/com/bstek/ureport/console/cache/ObjectMap.java
  3. 65
      ureport2-console/src/main/java/com/bstek/ureport/console/cache/ReportMapObject.java
  4. 13
      ureport2-console/src/main/java/com/bstek/ureport/console/chart/ChartServletAction.java
  5. 13
      ureport2-console/src/main/java/com/bstek/ureport/console/excel/ExportExcel97ServletAction.java
  6. 13
      ureport2-console/src/main/java/com/bstek/ureport/console/excel/ExportExcelServletAction.java
  7. 43
      ureport2-console/src/main/java/com/bstek/ureport/console/html/HtmlPreviewServletAction.java
  8. 30
      ureport2-console/src/main/java/com/bstek/ureport/console/pdf/ExportPdfServletAction.java
  9. 13
      ureport2-console/src/main/java/com/bstek/ureport/console/word/ExportWordServletAction.java
  10. 137
      ureport2-console/src/main/resources/ureport-asserts/js/designer.bundle.js
  11. 2
      ureport2-console/src/main/resources/ureport-asserts/js/preview.bundle.js
  12. 11
      ureport2-console/src/main/resources/ureport-asserts/js/searchform.bundle.js
  13. 29
      ureport2-core/src/main/java/com/bstek/ureport/cache/CacheUtils.java
  14. 5
      ureport2-core/src/main/java/com/bstek/ureport/cache/ReportCache.java
  15. 2
      ureport2-core/src/main/java/com/bstek/ureport/chart/Chart.java
  16. 16
      ureport2-core/src/main/java/com/bstek/ureport/chart/ChartData.java
  17. 79
      ureport2-core/src/main/java/com/bstek/ureport/export/ExportManagerImpl.java
  18. 42
      ureport2-core/src/main/java/com/bstek/ureport/export/word/high/WordProducer.java

31
ureport2-console/src/main/java/com/bstek/ureport/console/cache/HttpSessionReportCache.java

@ -24,33 +24,32 @@ import javax.servlet.http.HttpServletRequest;
import com.bstek.ureport.cache.ReportCache;
import com.bstek.ureport.console.RequestHolder;
import com.bstek.ureport.model.Report;
/**
* @author Jacky.gao
* @since 2017年3月8日
*/
public class HttpSessionReportCache implements ReportCache {
private Map<String,ReportMapObject> sessionReportMap=new HashMap<String,ReportMapObject>();
private Map<String,ObjectMap> sessionReportMap=new HashMap<String,ObjectMap>();
private boolean disabled;
@Override
public Report getReport(String file) {
public Object getObject(String file) {
HttpServletRequest req=RequestHolder.getRequest();
if(req==null){
return null;
}
ReportMapObject reportMapObject = getReportMap(req);
return reportMapObject.getReport(file);
ObjectMap objMap = getObjectMap(req);
return objMap.get(file);
}
@Override
public void storeReport(String file, Report report) {
public void storeObject(String file, Object object) {
HttpServletRequest req=RequestHolder.getRequest();
if(req==null){
return;
}
ReportMapObject reportMapObject = getReportMap(req);
reportMapObject.put(file, report);
ObjectMap map = getObjectMap(req);
map.put(file, object);
}
@Override
@ -62,10 +61,10 @@ public class HttpSessionReportCache implements ReportCache {
this.disabled = disabled;
}
private ReportMapObject getReportMap(HttpServletRequest req) {
private ObjectMap getObjectMap(HttpServletRequest req) {
List<String> expiredList=new ArrayList<String>();
for(String key:sessionReportMap.keySet()){
ReportMapObject reportObj=sessionReportMap.get(key);
ObjectMap reportObj=sessionReportMap.get(key);
if(reportObj.isExpired()){
expiredList.add(key);
}
@ -74,13 +73,13 @@ public class HttpSessionReportCache implements ReportCache {
sessionReportMap.remove(key);
}
String sessionId=req.getSession().getId();
ReportMapObject reportObject=sessionReportMap.get(sessionId);
if(reportObject!=null){
return reportObject;
ObjectMap obj=sessionReportMap.get(sessionId);
if(obj!=null){
return obj;
}else{
ReportMapObject reportMapObject=new ReportMapObject();
sessionReportMap.put(sessionId, reportMapObject);
return reportMapObject;
ObjectMap objMap=new ObjectMap();
sessionReportMap.put(sessionId, objMap);
return objMap;
}
}
}

2
ureport2-console/src/main/java/com/bstek/ureport/console/cache/ObjectMap.java

@ -26,7 +26,7 @@ import java.util.Map.Entry;
*/
public class ObjectMap {
private final int MAX_ITEM=3;
private static final int MILLISECOND=1200000;//default expired time is 20 minutes.
private static final int MILLISECOND=300000;//default expired time is 5 minutes.
private Map<String, Object> map=new LinkedHashMap<String, Object>();
private long start;
public ObjectMap() {

65
ureport2-console/src/main/java/com/bstek/ureport/console/cache/ReportMapObject.java

@ -1,65 +0,0 @@
/*******************************************************************************
* 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
* License for the specific language governing permissions and limitations under
* the License.
******************************************************************************/
package com.bstek.ureport.console.cache;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import com.bstek.ureport.model.Report;
/**
* @author Jacky.gao
* @since 2017年8月19日
*/
public class ReportMapObject {
private final int MAX_ITEM=3;
private static final int MILLISECOND=1200000;//default expired time is 20 minutes.
private Map<String, Report> reportMap=new LinkedHashMap<String, Report>();
private long start;
public ReportMapObject() {
this.start=System.currentTimeMillis();
}
public void put(String file,Report report){
this.start=System.currentTimeMillis();
if(reportMap.containsKey(file)){
reportMap.remove(file);
}else{
if(reportMap.size()>MAX_ITEM){
String lastFile=null;
for(Iterator<Entry<String,Report>> it=reportMap.entrySet().iterator();it.hasNext();){
Entry<String,Report> entry=it.next();
lastFile=entry.getKey();
}
reportMap.remove(lastFile);
}
}
this.reportMap.put(file, report);
}
public Report getReport(String file){
this.start=System.currentTimeMillis();
return this.reportMap.get(file);
}
public boolean isExpired(){
long end=System.currentTimeMillis();
long value=end-start;
if(value>=MILLISECOND){
return true;
}
return false;
}
}

13
ureport2-console/src/main/java/com/bstek/ureport/console/chart/ChartServletAction.java

@ -16,7 +16,6 @@
package com.bstek.ureport.console.chart;
import java.io.IOException;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@ -25,7 +24,6 @@ import javax.servlet.http.HttpServletResponse;
import com.bstek.ureport.cache.CacheUtils;
import com.bstek.ureport.chart.ChartData;
import com.bstek.ureport.console.RenderPageServletAction;
import com.bstek.ureport.model.Report;
import com.bstek.ureport.utils.UnitUtils;
/**
@ -44,13 +42,11 @@ public class ChartServletAction extends RenderPageServletAction {
public void storeData(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String file=req.getParameter("_u");
file=decode(file);
Map<String, Object> parameters = buildParameters(req);
String fullName=file+parameters.toString();
Report report=CacheUtils.getReport(fullName);
if(report==null){
String chartId=req.getParameter("_chartId");
ChartData chartData=CacheUtils.getChartData(chartId);
if(chartData==null){
return;
}
String chartId=req.getParameter("_chartId");
String base64Data=req.getParameter("_base64Data");
String prefix="data:image/png;base64,";
if(base64Data!=null){
@ -58,9 +54,6 @@ public class ChartServletAction extends RenderPageServletAction {
base64Data=base64Data.substring(prefix.length(),base64Data.length());
}
}
Map<String, ChartData> map=report.getContext().getChartDataMap();
ChartData chartData=map.get(chartId);
if(chartData==null)return;
chartData.setBase64Data(base64Data);
String width=req.getParameter("_width");
String height=req.getParameter("_height");

13
ureport2-console/src/main/java/com/bstek/ureport/console/excel/ExportExcel97ServletAction.java

@ -26,7 +26,6 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import com.bstek.ureport.build.ReportBuilder;
import com.bstek.ureport.cache.CacheUtils;
import com.bstek.ureport.console.BaseServletAction;
import com.bstek.ureport.console.cache.TempObjectCache;
import com.bstek.ureport.console.exception.ReportDesignException;
@ -78,17 +77,13 @@ public class ExportExcel97ServletAction extends BaseServletAction {
resp.setContentType("application/octet-stream;charset=ISO8859-1");
resp.setHeader("Content-Disposition","attachment;filename=\"" + fileName + "\"");
Map<String, Object> parameters = buildParameters(req);
String fullName=file+parameters.toString();
OutputStream outputStream=resp.getOutputStream();
if(file.equals(PREVIEW_KEY)){
Report report=CacheUtils.getReport(fullName);
if(report==null){
ReportDefinition reportDefinition=(ReportDefinition)TempObjectCache.getObject(PREVIEW_KEY);
if(reportDefinition==null){
throw new ReportDesignException("Report data has expired,can not do export excel.");
}
report=reportBuilder.buildReport(reportDefinition, parameters);
ReportDefinition reportDefinition=(ReportDefinition)TempObjectCache.getObject(PREVIEW_KEY);
if(reportDefinition==null){
throw new ReportDesignException("Report data has expired,can not do export excel.");
}
Report report=reportBuilder.buildReport(reportDefinition, parameters);
if(withPage){
excelProducer.produceWithPaging(report, outputStream);
}else if(withSheet){

13
ureport2-console/src/main/java/com/bstek/ureport/console/excel/ExportExcelServletAction.java

@ -26,7 +26,6 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import com.bstek.ureport.build.ReportBuilder;
import com.bstek.ureport.cache.CacheUtils;
import com.bstek.ureport.console.BaseServletAction;
import com.bstek.ureport.console.cache.TempObjectCache;
import com.bstek.ureport.console.exception.ReportDesignException;
@ -76,17 +75,13 @@ public class ExportExcelServletAction extends BaseServletAction {
fileName=new String(fileName.getBytes("UTF-8"),"ISO8859-1");
resp.setHeader("Content-Disposition","attachment;filename=\"" + fileName + "\"");
Map<String, Object> parameters = buildParameters(req);
String fullName=file+parameters.toString();
OutputStream outputStream=resp.getOutputStream();
if(file.equals(PREVIEW_KEY)){
Report report=CacheUtils.getReport(fullName);
if(report==null){
ReportDefinition reportDefinition=(ReportDefinition)TempObjectCache.getObject(PREVIEW_KEY);
if(reportDefinition==null){
throw new ReportDesignException("Report data has expired,can not do export excel.");
}
report=reportBuilder.buildReport(reportDefinition, parameters);
ReportDefinition reportDefinition=(ReportDefinition)TempObjectCache.getObject(PREVIEW_KEY);
if(reportDefinition==null){
throw new ReportDesignException("Report data has expired,can not do export excel.");
}
Report report=reportBuilder.buildReport(reportDefinition, parameters);
if(withPage){
excelProducer.produceWithPaging(report, outputStream);
}else if(withSheet){

43
ureport2-console/src/main/java/com/bstek/ureport/console/html/HtmlPreviewServletAction.java

@ -196,19 +196,19 @@ public class HtmlPreviewServletAction extends RenderPageServletAction {
throw new ReportComputeException("Report file can not be null.");
}
Map<String, Object> parameters = buildParameters(req);
String fullName=file+parameters.toString();
Report report=CacheUtils.getReport(fullName);
if(report==null){
ReportDefinition reportDefinition=null;
if(fullName.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);
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.");
}
report=reportBuilder.buildReport(reportDefinition, parameters);
}else{
reportDefinition=reportRender.getReportDefinition(file);
}
Report report=reportBuilder.buildReport(reportDefinition, parameters);
Map<String, ChartData> chartMap=report.getContext().getChartDataMap();
if(chartMap.size()>0){
CacheUtils.storeChartDataMap(chartMap);
}
FullPageData pageData=PageBuilder.buildFullPageData(report);
StringBuilder sb=new StringBuilder();
@ -267,24 +267,19 @@ public class HtmlPreviewServletAction extends RenderPageServletAction {
HtmlReport htmlReport=null;
String file=req.getParameter("_u");
file=decode(file);
String fullName=file+parameters.toString();
String pageIndex=req.getParameter("_i");
String reload=req.getParameter("_r");
if(StringUtils.isBlank(file)){
throw new ReportComputeException("Report file can not be null.");
}
if(file.equals(PREVIEW_KEY)){
Report report=null;
if(StringUtils.isNotBlank(pageIndex) && !pageIndex.equals("0") && StringUtils.isBlank(reload)){
report=CacheUtils.getReport(fullName);
}
ReportDefinition reportDefinition=(ReportDefinition)TempObjectCache.getObject(PREVIEW_KEY);
if(report==null){
if(reportDefinition==null){
throw new ReportDesignException("Report data has expired,can not do preview.");
}
report=reportBuilder.buildReport(reportDefinition, parameters);
CacheUtils.storeReport(fullName, report);
if(reportDefinition==null){
throw new ReportDesignException("Report data has expired,can not do preview.");
}
Report report=reportBuilder.buildReport(reportDefinition, parameters);
Map<String, ChartData> chartMap=report.getContext().getChartDataMap();
if(chartMap.size()>0){
CacheUtils.storeChartDataMap(chartMap);
}
htmlReport=new HtmlReport();
String html=null;

30
ureport2-console/src/main/java/com/bstek/ureport/console/pdf/ExportPdfServletAction.java

@ -27,7 +27,6 @@ import org.apache.commons.lang.StringUtils;
import org.codehaus.jackson.map.ObjectMapper;
import com.bstek.ureport.build.ReportBuilder;
import com.bstek.ureport.cache.CacheUtils;
import com.bstek.ureport.console.BaseServletAction;
import com.bstek.ureport.console.cache.TempObjectCache;
import com.bstek.ureport.console.exception.ReportDesignException;
@ -80,17 +79,13 @@ public class ExportPdfServletAction extends BaseServletAction{
resp.setHeader("Content-Disposition","attachment;filename=\"" + fileName + "\"");
}
Map<String, Object> parameters = buildParameters(req);
String fullName=file+parameters.toString();
OutputStream outputStream=resp.getOutputStream();
if(file.equals(PREVIEW_KEY)){
Report report=CacheUtils.getReport(fullName);
if(report==null){
ReportDefinition reportDefinition=(ReportDefinition)TempObjectCache.getObject(PREVIEW_KEY);
if(reportDefinition==null){
throw new ReportDesignException("Report data has expired,can not do export pdf.");
}
report=reportBuilder.buildReport(reportDefinition, parameters);
ReportDefinition reportDefinition=(ReportDefinition)TempObjectCache.getObject(PREVIEW_KEY);
if(reportDefinition==null){
throw new ReportDesignException("Report data has expired,can not do export pdf.");
}
Report report=reportBuilder.buildReport(reportDefinition, parameters);
pdfProducer.produce(report, outputStream);
}else{
ExportConfigure configure=new ExportConfigureImpl(file,parameters,outputStream);
@ -107,22 +102,15 @@ public class ExportPdfServletAction extends BaseServletAction{
}
Report report=null;
Map<String, Object> parameters = buildParameters(req);
String fullName=file+parameters.toString();
if(file.equals(PREVIEW_KEY)){
report=CacheUtils.getReport(fullName);
ReportDefinition reportDefinition=(ReportDefinition)TempObjectCache.getObject(PREVIEW_KEY);
if(report==null){
if(reportDefinition==null){
throw new ReportDesignException("Report data has expired,can not do export pdf.");
}
report=reportBuilder.buildReport(reportDefinition, parameters);
if(reportDefinition==null){
throw new ReportDesignException("Report data has expired,can not do export pdf.");
}
report=reportBuilder.buildReport(reportDefinition, parameters);
}else{
report=CacheUtils.getReport(fullName);
if(report==null){
ReportDefinition reportDefinition=reportRender.getReportDefinition(file);
report=reportRender.render(reportDefinition, parameters);
}
ReportDefinition reportDefinition=reportRender.getReportDefinition(file);
report=reportRender.render(reportDefinition, parameters);
}
String paper=req.getParameter("_paper");
ObjectMapper mapper=new ObjectMapper();

13
ureport2-console/src/main/java/com/bstek/ureport/console/word/ExportWordServletAction.java

@ -26,7 +26,6 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import com.bstek.ureport.build.ReportBuilder;
import com.bstek.ureport.cache.CacheUtils;
import com.bstek.ureport.console.BaseServletAction;
import com.bstek.ureport.console.cache.TempObjectCache;
import com.bstek.ureport.console.exception.ReportDesignException;
@ -69,17 +68,13 @@ public class ExportWordServletAction extends BaseServletAction {
resp.setContentType("application/octet-stream;charset=ISO8859-1");
resp.setHeader("Content-Disposition","attachment;filename=\"" + fileName + "\"");
Map<String, Object> parameters = buildParameters(req);
String fullName=file+parameters.toString();
OutputStream outputStream=resp.getOutputStream();
if(file.equals(PREVIEW_KEY)){
Report report=CacheUtils.getReport(fullName);
if(report==null){
ReportDefinition reportDefinition=(ReportDefinition)TempObjectCache.getObject(PREVIEW_KEY);
if(reportDefinition==null){
throw new ReportDesignException("Report data has expired,can not do export word.");
}
report=reportBuilder.buildReport(reportDefinition, parameters);
ReportDefinition reportDefinition=(ReportDefinition)TempObjectCache.getObject(PREVIEW_KEY);
if(reportDefinition==null){
throw new ReportDesignException("Report data has expired,can not do export word.");
}
Report report=reportBuilder.buildReport(reportDefinition, parameters);
wordProducer.produce(report, outputStream);
}else{
ExportConfigure configure=new ExportConfigureImpl(file,parameters,outputStream);

137
ureport2-console/src/main/resources/ureport-asserts/js/designer.bundle.js

File diff suppressed because one or more lines are too long

2
ureport2-console/src/main/resources/ureport-asserts/js/preview.bundle.js

File diff suppressed because one or more lines are too long

11
ureport2-console/src/main/resources/ureport-asserts/js/searchform.bundle.js

File diff suppressed because one or more lines are too long

29
ureport2-core/src/main/java/com/bstek/ureport/cache/CacheUtils.java

@ -16,13 +16,14 @@
package com.bstek.ureport.cache;
import java.util.Collection;
import java.util.Map;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import com.bstek.ureport.chart.ChartData;
import com.bstek.ureport.definition.ReportDefinition;
import com.bstek.ureport.model.Report;
/**
* @author Jacky.gao
@ -31,16 +32,34 @@ import com.bstek.ureport.model.Report;
public class CacheUtils implements ApplicationContextAware{
private static ReportCache reportCache;
private static ReportDefinitionCache reportDefinitionCache;
private static String CHART_DATA_key="_chart_data_";
public static Report getReport(String file){
@SuppressWarnings("unchecked")
public static ChartData getChartData(String chartId){
String key=CHART_DATA_key;
if(reportCache!=null){
return reportCache.getReport(file);
Map<String, ChartData> chartDataMap = (Map<String, ChartData>)reportCache.getObject(key);
if(chartDataMap!=null){
return chartDataMap.get(chartId);
}
}
return null;
}
public static void storeChartDataMap(Map<String, ChartData> map){
String key=CHART_DATA_key;
reportCache.storeObject(key, map);
}
public static Object getObject(String file){
if(reportCache!=null){
return reportCache.getObject(file);
}
return null;
}
public static void storeReport(String file,Report report){
public static void storeObject(String file,Object obj){
if(reportCache!=null){
reportCache.storeReport(file, report);
reportCache.storeObject(file, obj);
}
}

5
ureport2-core/src/main/java/com/bstek/ureport/cache/ReportCache.java

@ -15,14 +15,13 @@
******************************************************************************/
package com.bstek.ureport.cache;
import com.bstek.ureport.model.Report;
/**
* @author Jacky.gao
* @since 2017年3月8日
*/
public interface ReportCache {
Report getReport(String file);
void storeReport(String file,Report report);
Object getObject(String file);
void storeObject(String file,Object obj);
boolean disabled();
}

2
ureport2-core/src/main/java/com/bstek/ureport/chart/Chart.java

@ -90,7 +90,7 @@ public class Chart {
}
sb.append("}");
sb.append("}");
ChartData chartData=new ChartData(sb.toString());
ChartData chartData=new ChartData(sb.toString(),cell);
context.addChartData(chartData);
return chartData;
}

16
ureport2-core/src/main/java/com/bstek/ureport/chart/ChartData.java

@ -15,10 +15,11 @@
******************************************************************************/
package com.bstek.ureport.chart;
import java.util.UUID;
import org.codehaus.jackson.annotate.JsonIgnore;
import com.bstek.ureport.cache.CacheUtils;
import com.bstek.ureport.model.Cell;
/**
* @author Jacky.gao
* @since 2017年6月16日
@ -32,9 +33,9 @@ public class ChartData {
private int width;
@JsonIgnore
private int height;
public ChartData(String json) {
public ChartData(String json,Cell cell) {
this.json=json;
this.id=UUID.randomUUID().toString();
this.id=cell.getName();
}
public String getJson() {
return json;
@ -44,6 +45,13 @@ public class ChartData {
}
public String retriveBase64Data(){
if(base64Data!=null){
return base64Data;
}
ChartData data=CacheUtils.getChartData(id);
if(data!=null){
return data.retriveBase64Data();
}
return base64Data;
}
public int getWidth() {

79
ureport2-core/src/main/java/com/bstek/ureport/export/ExportManagerImpl.java

@ -20,6 +20,7 @@ import java.util.Map;
import com.bstek.ureport.build.paging.Page;
import com.bstek.ureport.cache.CacheUtils;
import com.bstek.ureport.chart.ChartData;
import com.bstek.ureport.definition.ReportDefinition;
import com.bstek.ureport.export.excel.high.ExcelProducer;
import com.bstek.ureport.export.excel.low.Excel97Producer;
@ -44,8 +45,10 @@ public class ExportManagerImpl implements ExportManager {
public HtmlReport exportHtml(String file,String contextPath,Map<String, Object> parameters) {
ReportDefinition reportDefinition=reportRender.getReportDefinition(file);
Report report=reportRender.render(reportDefinition, parameters);
String fullName=file+parameters.toString();
CacheUtils.storeReport(fullName, report);
Map<String, ChartData> chartMap=report.getContext().getChartDataMap();
if(chartMap.size()>0){
CacheUtils.storeChartDataMap(chartMap);
}
HtmlReport htmlReport=new HtmlReport();
String content=htmlProducer.produce(report);
htmlReport.setContent(content);
@ -63,10 +66,10 @@ public class ExportManagerImpl implements ExportManager {
@Override
public HtmlReport exportHtml(String file,String contextPath,Map<String, Object> parameters, int pageIndex) {
ReportDefinition reportDefinition=reportRender.getReportDefinition(file);
String fullName=file+parameters.toString();
Report report=CacheUtils.getReport(fullName);
if (report == null) {
report = reportRender.render(reportDefinition, parameters);
Report report=reportRender.render(reportDefinition, parameters);
Map<String, ChartData> chartMap=report.getContext().getChartDataMap();
if(chartMap.size()>0){
CacheUtils.storeChartDataMap(chartMap);
}
SinglePageData pageData=PageBuilder.buildSinglePageData(pageIndex, report);
List<Page> pages=pageData.getPages();
@ -94,36 +97,24 @@ public class ExportManagerImpl implements ExportManager {
public void exportPdf(ExportConfigure config) {
String file=config.getFile();
Map<String, Object> parameters=config.getParameters();
String fullName=file+parameters.toString();
Report report=CacheUtils.getReport(fullName);
if (report == null) {
ReportDefinition reportDefinition=reportRender.getReportDefinition(file);
report = reportRender.render(reportDefinition, parameters);
}
ReportDefinition reportDefinition=reportRender.getReportDefinition(file);
Report report=reportRender.render(reportDefinition, parameters);
pdfProducer.produce(report, config.getOutputStream());
}
@Override
public void exportWord(ExportConfigure config) {
String file=config.getFile();
Map<String, Object> parameters=config.getParameters();
String fullName=file+parameters.toString();
Report report=CacheUtils.getReport(fullName);
if (report == null) {
ReportDefinition reportDefinition=reportRender.getReportDefinition(file);
report = reportRender.render(reportDefinition, parameters);
}
ReportDefinition reportDefinition=reportRender.getReportDefinition(file);
Report report=reportRender.render(reportDefinition, parameters);
wordProducer.produce(report, config.getOutputStream());
}
@Override
public void exportExcel(ExportConfigure config) {
String file=config.getFile();
Map<String, Object> parameters=config.getParameters();
String fullName=file+parameters.toString();
Report report=CacheUtils.getReport(fullName);
if (report == null) {
ReportDefinition reportDefinition=reportRender.getReportDefinition(file);
report = reportRender.render(reportDefinition, parameters);
}
ReportDefinition reportDefinition=reportRender.getReportDefinition(file);
Report report=reportRender.render(reportDefinition, parameters);
excelProducer.produce(report, config.getOutputStream());
}
@ -131,12 +122,8 @@ public class ExportManagerImpl implements ExportManager {
public void exportExcel97(ExportConfigure config) {
String file=config.getFile();
Map<String, Object> parameters=config.getParameters();
String fullName=file+parameters.toString();
Report report=CacheUtils.getReport(fullName);
if (report == null) {
ReportDefinition reportDefinition=reportRender.getReportDefinition(file);
report = reportRender.render(reportDefinition, parameters);
}
ReportDefinition reportDefinition=reportRender.getReportDefinition(file);
Report report=reportRender.render(reportDefinition, parameters);
excel97Producer.produce(report, config.getOutputStream());
}
@ -144,24 +131,16 @@ public class ExportManagerImpl implements ExportManager {
public void exportExcelWithPaging(ExportConfigure config) {
String file=config.getFile();
Map<String, Object> parameters=config.getParameters();
String fullName=file+parameters.toString();
Report report=CacheUtils.getReport(fullName);
if (report == null) {
ReportDefinition reportDefinition=reportRender.getReportDefinition(file);
report = reportRender.render(reportDefinition, parameters);
}
ReportDefinition reportDefinition=reportRender.getReportDefinition(file);
Report report=reportRender.render(reportDefinition, parameters);
excelProducer.produceWithPaging(report, config.getOutputStream());
}
@Override
public void exportExcel97WithPaging(ExportConfigure config) {
String file=config.getFile();
Map<String, Object> parameters=config.getParameters();
String fullName=file+parameters.toString();
Report report=CacheUtils.getReport(fullName);
if (report == null) {
ReportDefinition reportDefinition=reportRender.getReportDefinition(file);
report = reportRender.render(reportDefinition, parameters);
}
ReportDefinition reportDefinition=reportRender.getReportDefinition(file);
Report report=reportRender.render(reportDefinition, parameters);
excel97Producer.produceWithPaging(report, config.getOutputStream());
}
@ -169,12 +148,8 @@ public class ExportManagerImpl implements ExportManager {
public void exportExcelWithPagingSheet(ExportConfigure config) {
String file=config.getFile();
Map<String, Object> parameters=config.getParameters();
String fullName=file+parameters.toString();
Report report=CacheUtils.getReport(fullName);
if (report == null) {
ReportDefinition reportDefinition=reportRender.getReportDefinition(file);
report = reportRender.render(reportDefinition, parameters);
}
ReportDefinition reportDefinition=reportRender.getReportDefinition(file);
Report report=reportRender.render(reportDefinition, parameters);
excelProducer.produceWithSheet(report, config.getOutputStream());
}
@ -182,12 +157,8 @@ public class ExportManagerImpl implements ExportManager {
public void exportExcel97WithPagingSheet(ExportConfigure config) {
String file=config.getFile();
Map<String, Object> parameters=config.getParameters();
String fullName=file+parameters.toString();
Report report=CacheUtils.getReport(fullName);
if (report == null) {
ReportDefinition reportDefinition=reportRender.getReportDefinition(file);
report = reportRender.render(reportDefinition, parameters);
}
ReportDefinition reportDefinition=reportRender.getReportDefinition(file);
Report report=reportRender.render(reportDefinition, parameters);
excel97Producer.produceWithSheet(report, config.getOutputStream());
}

42
ureport2-core/src/main/java/com/bstek/ureport/export/word/high/WordProducer.java

@ -323,27 +323,29 @@ public class WordProducer implements Producer{
}
}
String base64Data=img.getBase64Data();
InputStream inputStream=null;
try{
inputStream=ImageUtils.base64DataToInputStream(base64Data);
BufferedImage bufferedImage=ImageIO.read(inputStream);
int width=bufferedImage.getWidth();
int height=bufferedImage.getHeight();
IOUtils.closeQuietly(inputStream);
inputStream=ImageUtils.base64DataToInputStream(base64Data);
width=UnitUtils.pixelToPoint(width);
height=UnitUtils.pixelToPoint(height);
if(imageType.equals("jpeg")){
run.addPicture(inputStream, XWPFDocument.PICTURE_TYPE_JPEG, "ureport-"+rowNumber+"-"+columnNumber+".jpg", Units.toEMU(width), Units.toEMU(height));
}else if(imageType.equals("png")){
run.addPicture(inputStream, XWPFDocument.PICTURE_TYPE_PNG, "ureport-"+rowNumber+"-"+columnNumber+".png", Units.toEMU(width), Units.toEMU(height));
}else if(imageType.equals("gif")){
run.addPicture(inputStream, XWPFDocument.PICTURE_TYPE_GIF, "ureport-"+rowNumber+"-"+columnNumber+".gif", Units.toEMU(width), Units.toEMU(height));
if(StringUtils.isNotBlank(base64Data)){
InputStream inputStream=null;
try{
inputStream=ImageUtils.base64DataToInputStream(base64Data);
BufferedImage bufferedImage=ImageIO.read(inputStream);
int width=bufferedImage.getWidth();
int height=bufferedImage.getHeight();
IOUtils.closeQuietly(inputStream);
inputStream=ImageUtils.base64DataToInputStream(base64Data);
width=UnitUtils.pixelToPoint(width);
height=UnitUtils.pixelToPoint(height);
if(imageType.equals("jpeg")){
run.addPicture(inputStream, XWPFDocument.PICTURE_TYPE_JPEG, "ureport-"+rowNumber+"-"+columnNumber+".jpg", Units.toEMU(width), Units.toEMU(height));
}else if(imageType.equals("png")){
run.addPicture(inputStream, XWPFDocument.PICTURE_TYPE_PNG, "ureport-"+rowNumber+"-"+columnNumber+".png", Units.toEMU(width), Units.toEMU(height));
}else if(imageType.equals("gif")){
run.addPicture(inputStream, XWPFDocument.PICTURE_TYPE_GIF, "ureport-"+rowNumber+"-"+columnNumber+".gif", Units.toEMU(width), Units.toEMU(height));
}
}catch(Exception ex){
throw new ReportComputeException(ex);
}finally{
IOUtils.closeQuietly(inputStream);
}
}catch(Exception ex){
throw new ReportComputeException(ex);
}finally{
IOUtils.closeQuietly(inputStream);
}
}else if(value instanceof Date){
Date date=(Date)value;

Carregando…
Cancelar
Salvar