溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

關(guān)于報表自定義函數(shù)的應(yīng)用

發(fā)布時間:2020-07-04 09:36:30 來源:網(wǎng)絡(luò) 閱讀:410 作者:雄霸天下啦 欄目:開發(fā)技術(shù)

很多報表工具都自帶大量的函數(shù),在正常情況下足夠滿足用戶的報表制作需求,但是在一些特殊領(lǐng)域,可能需要一些特殊的函數(shù),在這種情況下,報表工具FineReport提供了自定義函數(shù)機制,可以由用戶根據(jù)業(yè)務(wù)需要自己來定義一些函數(shù),滿足用戶的自定義需求。但這些函數(shù)必須FineReport函數(shù)定義規(guī)則。以下以兩個實際案例來仔細詳解。

應(yīng)用一:生成UPC條形碼

FineReport中自帶有EAN型編碼,但卻沒有UPC條形碼,但是可以通過自定義函數(shù)引用第三方包來生成UPC編碼的條形碼并顯示出來。如輸入數(shù)值12345678912,將會得到以下UPC條形碼:

關(guān)于報表自定義函數(shù)的應(yīng)用

具體步驟怎么實現(xiàn)?

1、 編寫自定義函數(shù)

  • 導(dǎo)入第三方包

在eclipse中導(dǎo)入第三方包(barcode4j-light.jar,可在帆軟論壇上下載),barcode4j是一款開源的條形碼生成庫,能夠生成很多種編碼的條形碼,包括UPC碼。自定義函數(shù)中可以直接調(diào)用該包中現(xiàn)成的方法來生成UPC條形碼。

  • 自定義函數(shù)類

新建一個類Upc,完整代碼如下:

package com.fr.function;

import java.awt.p_w_picpath.BufferedImage;
import org.krysalis.barcode4j.impl.upcean.UPCABean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import org.krysalis.barcode4j.tools.UnitConv;
import com.fr.script.AbstractFunction;

public class Upc extends AbstractFunction {
	public Object run(Object[] args) {
		if (args == null || args.length < 1) {
			return "參數(shù)不對,必須有一個參數(shù)";
		}
		try {
			// 創(chuàng)建一個UPC編碼生成器
			UPCABean bean = new UPCABean();
			// 設(shè)置條形碼高度,BufferedImage.TYPE_BYTE_BINARY代表常量值12,可直接使用常量值
			final int dpi = Integer.parseInt(args[1].toString());
			bean.setModuleWidth(UnitConv.in2mm(1.0f / dpi));
			bean.doQuietZone(false);
			BitmapCanvasProvider canvas = new BitmapCanvasProvider(dpi,
					BufferedImage.TYPE_BYTE_BINARY, false, 0);
			// 創(chuàng)建條形碼
			bean.generateBarcode(canvas,args[0].toString());
			canvas.finish();
			// 返回圖片顯示   
			return canvas.getBufferedImage();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return args[0];
	}
}

2、 編譯自定義函數(shù)

編譯Upc.java生成Upc.class文件,拷貝至報表環(huán)境目/WebReport/WEB-INF/classes/com/fr/function下;

將第三方包barcode4j-light.jar放在報表環(huán)境目錄/WebReport/WEB-INF/lib文件夾下。

3、 注冊自定義函數(shù)

啟動設(shè)計器,點擊服務(wù)器|函數(shù)管理器,新增函數(shù)取名為Upc,選擇Upc.class類,如下圖:

關(guān)于報表自定義函數(shù)的應(yīng)用

4、 Upc()函數(shù)的使用

重啟服務(wù)器,在報表中使用公式==Upc(num1, num2),num1為需要生成條形碼的數(shù)值,num2為生成的圖片的高度。

如在單元格中輸入公式:=Upc(12345678912,100),預(yù)覽便可以看到條形碼了。

應(yīng)用二:Unicode編碼轉(zhuǎn)化為中文

數(shù)據(jù)庫中保存的是如下形式的編碼:%u5357%u4EAC-%u57CE%u5317,希望最好展示出來的是對應(yīng)的中文“南京-城北”。

具體步驟如下:

1、 編寫自定義函數(shù)

package com.fr.function;  

import com.fr.script.AbstractFunction;  
  
public class Ubm extends AbstractFunction {  
    public Object run(Object[] args) {  
        String str = args[0].toString();  
        String st = "";  
        StringBuffer buffer = new StringBuffer();  
        while (str.length() > 0) {  
            if (str.startsWith("%u")) {  
                st = str.substring(2, 6);  
                char ch = (char) Integer.parseInt(String.valueOf(st), 16);  
                buffer.append(new Character(ch).toString());  
                str = str.substring(6);  
            } else {  
                st = str.substring(0, str.indexOf("%u"));  
                buffer.append(st);  
                str = str.substring(st.length());  
            }  
        }  
        return buffer.toString();  
    }  
}

2、 編譯自定義函數(shù)

將編譯后的Ubm.class放到FineReport的安裝目錄WEB-INF下面的classes目錄下,因為Ubm.java屬于包com.fr.function,所以Ubm.class需要放到classes\com\fr\function目錄下。

3、 注冊自定義函數(shù)

生成該函數(shù)的類后需要在設(shè)計器中進行注冊,才可以使用該函數(shù)。打開服務(wù)器|函數(shù)管理器選擇剛剛定義好了Ubm類,如下圖

關(guān)于報表自定義函數(shù)的應(yīng)用

4、 使用自定義函數(shù)

注冊號自定義函數(shù)后,制作報表時便可直接使用了,使用方法與內(nèi)置的函數(shù)是相同的。輸入公式=Ubm("%u5357%u4EAC-%u57CE%u5317")運行如下:

關(guān)于報表自定義函數(shù)的應(yīng)用

展示值為“南京-城北”。



向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI