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

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

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

    Java軟件報表軟件技術博客

    java報表軟件技術匯總 java報表軟件制作 報表軟件新聞
    posts - 355, comments - 100, trackbacks - 0, articles - 3
       :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

    身份證一類讀卡器讀取的照片信息,保存在Access數據庫中一般為OLE型字段,圖片為BMP格式,因為是用其讀卡器寫入的,其數據類型為常二進制數據。

    再用報表或EXCEL讀取這些圖片時,如果將該圖片字段拖入單元格后,預覽就看不到圖片了。EXCEL如何讀取這類圖片網上有教程,這里不多說。如果你要用報表軟件FineReport來展現這類圖片該如何做呢?

    思路是采用FineReport的自定義函數,使用javajna調用本地的WltRS.dll,將數據庫OLE字段中的長二進制數據轉為.wlt文件,再調用本地方法將.wlt文件轉為.bmp圖片,最終自定義函數返回圖片在FineReport中顯示。

    1、前提準備

    本地庫文件WltRS.dll保存在E:\bmp\WltRS.dll(位置可變,但ixu保證以自定義函數中的路徑一致);eclipse項目中導入FINEREPORTjar包。

    2、實現自定義函數

     

    自定義一個函數類BinaryImage.java,該類繼承AbstractFunction,在run()方法中使用javajna調用本地庫文件WltRS.dll,最終返回圖片。代碼如下:

    Java代碼package com.FineReport.function;  
       
    import java.awt.image.BufferedImage;  
    import java.io.BufferedOutputStream;  
    import java.io.File;  
    import java.io.FileOutputStream;  
    import java.io.IOException;  
       
    import javax.imageio.ImageIO;  
       
    import com.FineReport.data.core.db.BinaryObject;  
    import com.FineReport.script.AbstractFunction;  
    import com.sun.jna.Library;  
    import com.sun.jna.Native;  
       
    public class BinaryImage extends AbstractFunction{  
       
            //加載dll,"E:\\bmp\\WltRS"是dll的文件完整路徑,但不帶后綴名,生成WltRS.class  
            static WltRS wltrs = (WltRS) Native.loadLibrary("E:\\bmp\\WltRS", WltRS.class);  
             
            static int index = 0;  
             
            public Object run(Object[] args) {  
                     
                    int current = index;  
                     
                    //args[0] 是 BinaryObject對象,取為bo  
                    BinaryObject bo = (BinaryObject)args[0];  
                     
                    //將bo轉換為.wlt文件,并保存在位置E:\bmp\;本地方法GetBmp的第一個參數是wlt文件的路徑  
                    getFile(bo.getBytes(), "E:\\bmp\\", current + ".wlt");  
                     
                    //讀取.wlt為文件  
                    File file = new File("E:\\bmp\\" + current + ".wlt");   
                     
                    //調用本地方法,在相同路徑下生產.bmp  
                    wltrs.GetBmp("E:\\bmp\\" + current + ".wlt", 1);  
                     
                    //讀取并返回圖片  
                    File imagefile = new File("E:\\bmp\\" + current + ".bmp");  
                    BufferedImage buffer = null;  
                    try {  
                            buffer = ImageIO.read(imagefile);  
                    } catch (IOException e) {  
                            e.printStackTrace();  
                    }  
                     
                    index = (++index)%300;  
                    return buffer;  
            }  
             
             
            // byte[]轉換為file的方法  
            public static void getFile(byte[] bfile, String filePath, String fileName) {   
            BufferedOutputStream bos = null;   
            FileOutputStream fos = null;   
            File file = null;   
            try {   
                File dir = new File(filePath);   
                if(!dir.exists() && dir.isDirectory()){//判斷文件目錄是否存在   
                    dir.mkdirs();   
                }   
                file = new File(filePath+"\\"+fileName);   
                fos = new FileOutputStream(file);   
                bos = new BufferedOutputStream(fos);   
                bos.write(bfile);   
            } catch (Exception e) {   
                e.printStackTrace();   
            } finally {   
                if (bos != null) {   
                    try {   
                        bos.close();   
                    } catch (IOException e1) {   
                        e1.printStackTrace();   
                    }   
                }   
                if (fos != null) {   
                    try {   
                        fos.close();   
                    } catch (IOException e1) {   
                        e1.printStackTrace();   
                    }   
                }   
            }   
        }  
    }  
       
    //用jna調用本地方法的必須步驟,具體含義不明  
    interface WltRS extends Library{  
            //定義要調用的本地方法  
            void GetBmp(String str, int i);  
    }  

     將編譯后的BinaryImage.class、WltRS.class根據包名拷貝至報表工程如報表安裝目錄下的WebReport\WEB-INF\classes\com\FineReport\function\文件夾下。

    3、使用自定義函數

    OLE類型字段的值顯示為圖片。啟動設計器,點擊服務器>函數管理器,新增自定義函數BINARYIMAGE,選擇com.FineReport.function.BinaryImage類:



     
    將身份證讀卡器寫入Access數據庫OLE型字段的照片信息拖入單元格,雙擊,在數據列>高級>自定義顯示中使用自定義函數轉換成圖片:




    主站蜘蛛池模板: 亚洲日韩国产二区无码| 国产AV无码专区亚洲AV毛网站| 亚洲春黄在线观看| 成人片黄网站色大片免费观看APP| 亚洲成AV人网址| 国产亚洲精品美女久久久久| 国产女高清在线看免费观看| 亚洲成av人片在线天堂无 | 亚欧免费无码aⅴ在线观看| 亚洲码国产精品高潮在线| 久久不见久久见免费影院www日本| 久久久久亚洲?V成人无码| 中文字幕无码免费久久9一区9| 区久久AAA片69亚洲| 97在线免费视频| 亚洲精品线在线观看| 亚洲日本在线免费观看| 精品国产日韩久久亚洲| 国产精品成人四虎免费视频| 日本高清免费中文在线看| 亚洲精品午夜无码专区| 100部毛片免费全部播放完整| 亚洲H在线播放在线观看H| 日韩一区二区三区免费体验| 成人a毛片免费视频观看| 亚洲色婷婷六月亚洲婷婷6月| 日本在线免费观看| 亚洲AV无码国产精品色| 国产一级做a爱免费视频| 久久九九久精品国产免费直播| 亚洲国产高清在线| 国产精品久久久久免费a∨| 美女羞羞喷液视频免费| 久久精品夜色国产亚洲av| aa级一级天堂片免费观看| 成人免费观看男女羞羞视频| 久久综合图区亚洲综合图区| 四虎www免费人成| 国产午夜无码片免费| 亚洲人成777在线播放| 亚洲欧洲精品成人久久曰影片|