<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型字段的照片信息拖入單元格,雙擊,在數據列>高級>自定義顯示中使用自定義函數轉換成圖片:




    主站蜘蛛池模板: 亚洲国产日韩在线成人蜜芽| 亚洲女同成人AⅤ人片在线观看| 国产亚洲精品拍拍拍拍拍| 最新亚洲人成无码网www电影| 在线免费观看色片| 亚洲日韩久久综合中文字幕| 日韩高清在线高清免费| 亚洲精品久久无码av片俺去也| 国产精品另类激情久久久免费| 婷婷亚洲综合五月天小说在线| 国产hs免费高清在线观看| 免费国产在线精品一区| MM131亚洲国产美女久久| 永久免费AV无码网站国产| 亚洲精品综合一二三区在线| 亚洲电影免费观看| 亚洲伊人久久大香线蕉AV| 免费永久国产在线视频| 三级黄色片免费看| 亚洲精品高清国产麻豆专区| 成人免费一区二区无码视频| 国产亚洲视频在线| 亚洲人成人无码网www电影首页 | 亚洲国产精品视频| 一区二区三区在线免费观看视频| 久久亚洲国产成人精品无码区| 在线成人精品国产区免费| 亚洲国产电影在线观看| 免费真实播放国产乱子伦| 中文字幕a∨在线乱码免费看| 久久亚洲精品无码AV红樱桃| 久久精品免费一区二区喷潮| 免费精品久久久久久中文字幕| 国产亚洲精品自在久久| 最近免费中文字幕大全视频 | 一级做a爰片性色毛片免费网站| 亚洲AV永久精品爱情岛论坛| 韩国免费一级成人毛片| 成年网站免费入口在线观看| 久久亚洲AV成人无码| 免费人妻av无码专区|