UReport2教學(xué)視頻http://pan.baidu.com/s/1boWTxF5,密碼:98hj
在UReport2當(dāng)中,選中目標(biāo)單元格,點擊工具欄上的插入圖片按鈕,就可以插入圖片,如下圖所示:
插入圖片后,默認(rèn)只顯示圖片的示意圖,這是因為我們要加載的圖片可以是靜態(tài)的,也可以是動態(tài)的,所以報表模版中以示意圖的形式顯示。選中圖片所在單元格就可以在屬性窗口中設(shè)置圖片相關(guān)屬性,可以看到,對于圖片的來源來說,有兩個選項,如下表所示:
圖片來源
|
說明
|
---|---|
路徑 | 也就是指定圖片來源為一個固定的路徑,UReport2默認(rèn)支持以classpath:開頭位于classpath下的圖片文件,或以/開頭位于WEB應(yīng)用根下或某目錄下的圖片文件 |
表達式 | 通過表達式動態(tài)為圖片指定一個路徑,如:emp.select(photo),表達從數(shù)據(jù)集emp中取現(xiàn)photo屬性值作為圖片路徑,這里需要注意的是,最終計算取到的值對應(yīng)的圖片路徑,也要符合默認(rèn)的以classpath:開頭,或以/開頭,如果需要取存儲在其它位置的圖片,我們可以通過實現(xiàn)ImageProvider接口實現(xiàn),比如取存儲在數(shù)據(jù)庫中的圖片等。 |
前面介紹了,UReport2默認(rèn)只支持以classpath:開頭,或以/開頭存儲在文件系統(tǒng)里的文件,如果我們需要取其它位置的圖片,比如取存儲在數(shù)據(jù)庫中的圖片,可以通過實現(xiàn)ImageProvider接口實現(xiàn),該接口源碼如下:
package com.bstek.ureport.provider.image;
import java.io.InputStream;
/**
* @author Jacky.gao
* @since 2017年3月6日
*/
public interface ImageProvider {
InputStream getImage(String path);
boolean support(String path);
}
在實現(xiàn)該接口時,我們需要為新的圖片路徑定義一個前綴,比如存儲到數(shù)據(jù)庫中我們可以以db:作為前綴,比如:db:001,表示存儲在數(shù)據(jù)庫中,ID為001的圖片,具體實現(xiàn)方式可以參照UReport2中提供的默認(rèn)的支持classpath:和/前綴的ImageProvider實現(xiàn)類,默認(rèn)的ImageProvider接口實現(xiàn)類源碼如下:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.util.ResourceUtils;
import org.springframework.web.context.WebApplicationContext;
import com.bstek.ureport.exception.ReportComputeException;
/**
* @author Jacky.gao
* @since 2017年3月6日
*/
public class DefaultImageProvider implements ImageProvider,ApplicationContextAware {
private ApplicationContext applicationContext;
private String baseWebPath;
@Override
public InputStream getImage(String path) {
try {
if(path.startsWith(ResourceUtils.CLASSPATH_URL_PREFIX) || path.startsWith("/WEB-INF")){
return applicationContext.getResource(path).getInputStream();
}else{
path=baseWebPath+path;
return new FileInputStream(path);
}
} catch (IOException e) {
throw new ReportComputeException(e);
}
}
@Override
public boolean support(String path) {
if(path.startsWith(ResourceUtils.CLASSPATH_URL_PREFIX)){
return true;
}else if(baseWebPath!=null && (path.startsWith("/") || path.startsWith("/WEB-INF"))){
return true;
}
return false;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if(applicationContext instanceof WebApplicationContext){
WebApplicationContext context=(WebApplicationContext)applicationContext;
baseWebPath=context.getServletContext().getRealPath("/");
}
this.applicationContext=applicationContext;
}
}
ImageProvider接口實現(xiàn)類定義完成后,我們只需要將其配置到Spring上下文中,UReport2會自動檢測到并加載,這樣通過自已實現(xiàn)ImageProvider接口,就可以加載任意位置的圖片。
更多建議: