<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    wuxiren123

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

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

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

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

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

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

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

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

    • 自定義函數(shù)類

    新建一個(gè)類Upc,完整代碼如下:

    package com.fr.function;

    import java.awt.image.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ù)不對,必須有一個(gè)參數(shù)";
            }

            
    try {
                
    // 創(chuàng)建一個(gè)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, 
    false0);
                
    // 創(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文件,拷貝至報(bào)表環(huán)境目/WebReport/WEB-INF/classes/com/fr/function下;

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

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

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

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

    重啟服務(wù)器,在報(bào)表中使用公式==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(26);  
                    
    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目錄下,因?yàn)閁bm.java屬于包c(diǎn)om.fr.function,所以Ubm.class需要放到classes\com\fr\function目錄下。

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

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

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

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

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


    posted on 2016-09-13 14:15 喝水居然長肉 閱讀(188) 評(píng)論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲精品动漫人成3d在线| 日本特黄特色aa大片免费| 亚洲精品无码不卡在线播HE| 国产成人人综合亚洲欧美丁香花| 成年女人免费v片| 亚洲精品人成网在线播放影院| 中字幕视频在线永久在线观看免费| 亚洲国产最大av| 在线观看免费污视频| 亚洲aⅴ无码专区在线观看春色 | 最近2019中文免费字幕在线观看 | 黄色网址免费在线| 亚洲AV无码乱码在线观看牲色| 色屁屁在线观看视频免费| 亚洲国产中文字幕在线观看| 一级特黄录像免费播放中文版| 亚洲精品成人片在线观看精品字幕 | 四虎影院永久免费观看| 九九久久精品国产免费看小说| 亚洲尤码不卡AV麻豆| 99精品视频在线观看免费播放| 亚洲日韩乱码久久久久久| 成人午夜18免费看| 男男黄GAY片免费网站WWW| 国产精品亚洲综合一区| 无人在线观看免费高清| 精品亚洲成A人无码成A在线观看| 韩国欧洲一级毛片免费| 免费一级特黄特色大片| 亚洲国产老鸭窝一区二区三区 | 黄色免费在线网站| 亚洲国产日韩女人aaaaaa毛片在线| 午夜电影免费观看| 国产成人无码免费看片软件| 久久亚洲精品国产精品黑人| AV大片在线无码永久免费| 无套内射无矿码免费看黄| 7777久久亚洲中文字幕蜜桃| 国产伦精品一区二区三区免费下载| 一级毛片免费播放试看60分钟| 亚洲福利视频导航|