UReport2教學(xué)視頻http://pan.baidu.com/s/1boWTxF5,密碼:98hj
在UReport2當(dāng)中,選中目標(biāo)單元格,點(diǎn)擊工具欄上的插入圖片按鈕,就可以插入圖片,如下圖所示:
插入圖片后,默認(rèn)只顯示圖片的示意圖,這是因?yàn)槲覀円虞d的圖片可以是靜態(tài)的,也可以是動(dòng)態(tài)的,所以報(bào)表模版中以示意圖的形式顯示。選中圖片所在單元格就可以在屬性窗口中設(shè)置圖片相關(guān)屬性,可以看到,對(duì)于圖片的來源來說,有兩個(gè)選項(xiàng),如下表所示:
圖片來源
|
說明
|
---|---|
路徑 | 也就是指定圖片來源為一個(gè)固定的路徑,UReport2默認(rèn)支持以classpath:開頭位于classpath下的圖片文件,或以/開頭位于WEB應(yīng)用根下或某目錄下的圖片文件 |
表達(dá)式 | 通過表達(dá)式動(dòng)態(tài)為圖片指定一個(gè)路徑,如:emp.select(photo),表達(dá)從數(shù)據(jù)集emp中取現(xiàn)photo屬性值作為圖片路徑,這里需要注意的是,最終計(jì)算取到的值對(duì)應(yīng)的圖片路徑,也要符合默認(rèn)的以classpath:開頭,或以/開頭,如果需要取存儲(chǔ)在其它位置的圖片,我們可以通過實(shí)現(xiàn)ImageProvider接口實(shí)現(xiàn),比如取存儲(chǔ)在數(shù)據(jù)庫中的圖片等。 |
前面介紹了,UReport2默認(rèn)只支持以classpath:開頭,或以/開頭存儲(chǔ)在文件系統(tǒng)里的文件,如果我們需要取其它位置的圖片,比如取存儲(chǔ)在數(shù)據(jù)庫中的圖片,可以通過實(shí)現(xiàn)ImageProvider接口實(shí)現(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);
}
在實(shí)現(xiàn)該接口時(shí),我們需要為新的圖片路徑定義一個(gè)前綴,比如存儲(chǔ)到數(shù)據(jù)庫中我們可以以db:作為前綴,比如:db:001,表示存儲(chǔ)在數(shù)據(jù)庫中,ID為001的圖片,具體實(shí)現(xiàn)方式可以參照UReport2中提供的默認(rèn)的支持classpath:和/前綴的ImageProvider實(shí)現(xiàn)類,默認(rèn)的ImageProvider接口實(shí)現(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接口實(shí)現(xiàn)類定義完成后,我們只需要將其配置到Spring上下文中,UReport2會(huì)自動(dòng)檢測到并加載,這樣通過自已實(shí)現(xiàn)ImageProvider接口,就可以加載任意位置的圖片。
更多建議: