UReport2 加載圖片

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

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

demo

       插入圖片后,默認只顯示圖片的示意圖,這是因為我們要加載的圖片可以是靜態(tài)的,也可以是動態(tài)的,所以報表模版中以示意圖的形式顯示。選中圖片所在單元格就可以在屬性窗口中設(shè)置圖片相關(guān)屬性,可以看到,對于圖片的來源來說,有兩個選項,如下表所示:

圖片來源
說明
路徑 也就是指定圖片來源為一個固定的路徑,UReport2默認支持以classpath:開頭位于classpath下的圖片文件,或以/開頭位于WEB應(yīng)用根下或某目錄下的圖片文件
表達式 通過表達式動態(tài)為圖片指定一個路徑,如:emp.select(photo),表達從數(shù)據(jù)集emp中取現(xiàn)photo屬性值作為圖片路徑,這里需要注意的是,最終計算取到的值對應(yīng)的圖片路徑,也要符合默認的以classpath:開頭,或以/開頭,如果需要取存儲在其它位置的圖片,我們可以通過實現(xiàn)ImageProvider接口實現(xiàn),比如取存儲在數(shù)據(jù)庫中的圖片等。

ImageProvider接口

       前面介紹了,UReport2默認只支持以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中提供的默認的支持classpath:和/前綴的ImageProvider實現(xià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接口,就可以加載任意位置的圖片。


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號