`

如何读取Access里的OLE类型的图片

阅读更多

身份证一类读卡器读取的照片信息,保存在Access数据库中一般为OLE型字段,图片为BMP格式,因为是用其读卡器写入的,其数据类型为常二进制数据。

再用报表或EXCEL读取这些图片时,如果将该图片字段拖入单元格后,预览就看不到图片了。EXCEL如何读取这类图片网上有教程,这里不多说。如果你要用报表软件FineReport来展现这类图片该如何做呢?

思路是采用FineReport的自定义函数,使用javajna调用本地的WltRS.dll,将数据库OLE字段中的长二进制数据转为.wlt文件,再调用本地方法将.wlt文件转为.bmp图片,最终自定义函数返回图片在FineReport中显示。

<!--[if !supportLists]-->1、<!--[endif]-->前提准备

本地库文件WltRS.dll保存在E:\bmp\WltRS.dll(位置可变,但ixu保证以自定义函数中的路径一致);eclipse项目中导入FINEREPORTjar包。

<!--[if !supportLists]-->2、<!--[endif]-->实现自定义函数

 

自定义一个函数类BinaryImage.java,该类继承AbstractFunction,在run()方法中使用javajna调用本地库文件WltRS.dll,最终返回图片。代码如下:

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.classWltRS.class根据包名拷贝至报表工程如报表安装目录下的WebReport\WEB-INF\classes\com\FineReport\function\文件夹下。

3、使用自定义函数

OLE类型字段的值显示为图片。启动设计器,点击服务器>函数管理器,新增自定义函数BINARYIMAGE,选择com.FineReport.function.BinaryImage类:



 
将身份证读卡器写入Access数据库OLE型字段的照片信息拖入单元格,双击,在数据列>高级>自定义显示中使用自定义函数转换成图片:



 

 

  • 大小: 20.7 KB
  • 大小: 12 KB
0
2
分享到:
评论

相关推荐

    VB+Access存储图片与读取示例

    2. **存储图片**:在Access数据库中,创建一个字段类型为“OLE对象”的表,用于存储图片数据。使用ADO.NET(ActiveX Data Objects)连接到Access数据库,然后创建一个记录,将字节数组作为BLOB数据插入到图片字段。 ...

    access数据库中添加与读取图片

    在Access数据库中添加和读取图片是常见的操作,特别是在存储包含多媒体内容的数据时。Access作为一个关系型数据库管理系统,虽然主要用于处理结构化的文本和数字数据,但也可以有效地管理和展示非结构化数据,如图像...

    Access数据库图片存储与读取

    1. **OLE对象数据类型**:Access数据库中的OLE对象数据类型允许存储任何类型的文件,包括图片。这些对象实际上是存储文件的链接或嵌入副本,可以像其他字段一样进行查询和检索。 2. **创建图片字段**:在设计表时,...

    OLD-DB.rar_Access OLE Object_vc读取ole对象

    Access OLE Object_vc读取ole对象”实例为我们提供了一个实用的指南,教我们在VC++6.0环境下如何利用ADO来高效地操作Access数据库中的OLE对象,这对于开发需要与数据库交互的应用程序,尤其是涉及多种类型数据的项目...

    Access数据库存储和读取图片

    在Access 2003中,我们可以利用OLE对象字段类型来存储图片,而在C#(如Visual Studio 2005环境下)中,我们可以使用ADO.NET接口来与Access进行交互,实现图片的存取。 1. **Access数据库中的图片存储**: Access...

    ACCESS数据库读取BMP图片

    总的来说,Access数据库不仅可以存储BMP图片,还能通过OLE对象字段类型方便地管理和读取这些图片。配合ADO技术,我们能够编写程序进行更复杂的数据操作,实现与数据库的高效交互。在实际应用中,理解并熟练掌握这些...

    Access数据库里二进制数据读取,并显示为图片.rar

    总结来说,无论是使用VBA还是ASP,读取Access数据库中的二进制图片数据并进行显示,都需要连接数据库、获取二进制数据、将其转化为可显示的形式。对于桌面应用,通常是VBA和PictureBox控件;而对于Web应用,可能是...

    vb.net 使用Access数据库保存和读取图片文件

    在VB.NET中,Access数据库常被用于小型项目的数据存储,包括保存和读取不同类型的数据,如文本、数字,甚至图片。本教程将详细介绍如何利用VB.NET与Access数据库交互,实现图片文件的保存与读取,并将结果展示在...

    VB图片存储到ACCESS

    2. 创建一个表,包含一个字段用来存储图片数据,如“ImageData”,类型为OLE Object。 3. 在VB程序中,使用GDI+读取并处理图片,生成缩略图。 4. 将原始图片和缩略图的数据保存到内存的流对象(如:System.IO....

    保存图片到Access,读取并显示出来。

    Access提供了BLOB(Binary Large Object)字段类型,可以用来存储图片、文档等非结构化数据。以下将详细介绍如何在Access中保存图片,以及如何读取和显示这些图片。 1. **保存图片到Access** - 创建表:首先,你...

    VB Access存储图片与读取示例

    在Access数据库中,可以创建表(Table)来存储数据,每个表由多个字段(Field)组成,字段可以是不同数据类型的,例如文本、数字或OLE对象(用于存储图片、文档等二进制数据)。 在VB中,我们可以使用ADO(ActiveX ...

    ACCESS保存图片程序示例(VBA)

    在ACCESS中,存储非文本数据,如图片,通常通过OLE(Object Linking and Embedding)对象实现。OLE允许你嵌入或链接到其他应用程序创建的对象,例如图片文件。 2. **VBA基础**: 在VBA中,你可以编写代码来与...

    VB源码VB Access存储图片与读取示例

    在Access数据库中,可以使用“OLE对象”字段类型来存储图片。OLE(Object Linking and Embedding)允许嵌入和链接其他应用程序创建的对象,如图像、文本、Excel表格等。当在Access表中创建一个OLE对象字段时,实际上...

    易语言access数据库中添加与读取图片源码,access数据库中添加与读取图片

    在Access数据库中,图片通常以“OLE对象”字段类型存储。在易语言中,可以通过以下步骤实现: - 打开或创建Access数据库连接,这通常涉及到ODBC数据源的设置和连接字符串的编写。 - 创建一个“OLE对象”类型的...

    图片保存到access数据库

    1. **创建数据库表**:在Access中,创建一个新的表,例如命名为"Photos",包含一个"ImageID"作为主键(自动编号类型),一个"ImageData"字段(OLE对象或图像类型)用于存储图片数据,还可以添加其他字段如...

    在access中添加图片

    - **字段类型选择**: 在创建或编辑Access表时,需要选择“OLE对象”字段类型来存储图片。OLE对象可以存储任何形式的文件,包括图片。 - **插入图片**: 用户可以直接在Access表单或报表中通过“插入”菜单选择图片...

    保存下载Access图片

    在Access中,通常使用OLE对象字段类型来存储图片。当你在表中添加一个OLE对象字段,Access会提供一个界面让你可以插入或链接图片文件。 **保存图片到Access数据库:** 1. **创建表结构**:首先,你需要创建一个包含...

    显示Access数据库里的图片,并将其他图片存入数据库

    在Access中,图片通常存储在OLE对象字段中,这种字段类型可以存储任何类型的二进制数据,包括图像。为了在用户界面(如窗体或报表)上显示这些图片,我们需要创建一个控件,如图片框(PictureBox)。首先,我们需要...

    access存BMP图片

    使用Access的Visual Basic for Applications (VBA)编程,可以实现更复杂的图像操作,如读取、写入和修改BMP图片。例如,可以使用`CreateObject("ADODB.Stream")`创建一个流对象,然后将BMP图片的二进制数据写入或从...

    vb+access 将图片存入数据库

    Access数据库支持多种数据类型,其中包括OLE对象类型,这使得存储包括图片在内的多媒体数据成为可能。以下将详细介绍如何使用VB和Access来实现这个功能。 **一、OLE对象与图像存储** 1. **OLE对象数据类型**: ...

Global site tag (gtag.js) - Google Analytics