UReport2 加載圖片

2023-01-05 16:04 更新
UReport2教學(xué)視頻http://pan.baidu.com/s/1boWTxF5,密碼:98hj

       在UReport2當(dāng)中,選中目標(biāo)單元格,點(diǎn)擊工具欄上的插入圖片按鈕,就可以插入圖片,如下圖所示:

demo

       插入圖片后,默認(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ù)庫(kù)中的圖片等。

ImageProvider接口

       前面介紹了,UReport2默認(rèn)只支持以classpath:開頭,或以/開頭存儲(chǔ)在文件系統(tǒng)里的文件,如果我們需要取其它位置的圖片,比如取存儲(chǔ)在數(shù)據(jù)庫(kù)中的圖片,可以通過實(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ù)庫(kù)中我們可以以db:作為前綴,比如:db:001,表示存儲(chǔ)在數(shù)據(jù)庫(kù)中,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)檢測(cè)到并加載,這樣通過自已實(shí)現(xiàn)ImageProvider接口,就可以加載任意位置的圖片。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)