身份证一类读卡器读取的照片信息,保存在Access数据库中一般为OLE型字段,图片为BMP格式,因为是用其读卡器写入的,其数据类型为常二进制数据。
再用报表或EXCEL读取这些图片时,如果将该图片字段拖入单元格后,预览就看不到图片了。EXCEL如何读取这类图片网上有教程,这里不多说。如果你要用报表软件FineReport来展现这类图片该如何做呢?
思路是采用FineReport的自定义函数,使用java的jna调用本地的WltRS.dll,将数据库OLE字段中的长二进制数据转为.wlt文件,再调用本地方法将.wlt文件转为.bmp图片,最终自定义函数返回图片在FineReport中显示。
<!--[if !supportLists]-->1、<!--[endif]-->前提准备
本地库文件WltRS.dll保存在E:\bmp\WltRS.dll(位置可变,但ixu保证以自定义函数中的路径一致);eclipse项目中导入FINEREPORT的jar包。
<!--[if !supportLists]-->2、<!--[endif]-->实现自定义函数
自定义一个函数类BinaryImage.java,该类继承AbstractFunction,在run()方法中使用java的jna调用本地库文件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.class、WltRS.class根据包名拷贝至报表工程如报表安装目录下的WebReport\WEB-INF\classes\com\FineReport\function\文件夹下。
3、使用自定义函数
将OLE类型字段的值显示为图片。启动设计器,点击服务器>函数管理器,新增自定义函数BINARYIMAGE,选择com.FineReport.function.BinaryImage类:
将身份证读卡器写入Access数据库OLE型字段的照片信息拖入单元格,双击,在数据列>高级>自定义显示中使用自定义函数转换成图片:
相关推荐
在Access数据库中添加和读取图片是常见的操作,特别是在存储包含多媒体内容的数据时。Access作为一个关系型数据库管理系统,虽然主要用于处理结构化的文本和数字数据,但也可以有效地管理和展示非结构化数据,如图像...
2. **存储图片**:在Access数据库中,创建一个字段类型为“OLE对象”的表,用于存储图片数据。使用ADO.NET(ActiveX Data Objects)连接到Access数据库,然后创建一个记录,将字节数组作为BLOB数据插入到图片字段。 ...
1. **OLE对象数据类型**:Access数据库中的OLE对象数据类型允许存储任何类型的文件,包括图片。这些对象实际上是存储文件的链接或嵌入副本,可以像其他字段一样进行查询和检索。 2. **创建图片字段**:在设计表时,...
Access OLE Object_vc读取ole对象”实例为我们提供了一个实用的指南,教我们在VC++6.0环境下如何利用ADO来高效地操作Access数据库中的OLE对象,这对于开发需要与数据库交互的应用程序,尤其是涉及多种类型数据的项目...
在Access 2003中,我们可以利用OLE对象字段类型来存储图片,而在C#(如Visual Studio 2005环境下)中,我们可以使用ADO.NET接口来与Access进行交互,实现图片的存取。 1. **Access数据库中的图片存储**: Access...
总的来说,Access数据库不仅可以存储BMP图片,还能通过OLE对象字段类型方便地管理和读取这些图片。配合ADO技术,我们能够编写程序进行更复杂的数据操作,实现与数据库的高效交互。在实际应用中,理解并熟练掌握这些...
总结来说,无论是使用VBA还是ASP,读取Access数据库中的二进制图片数据并进行显示,都需要连接数据库、获取二进制数据、将其转化为可显示的形式。对于桌面应用,通常是VBA和PictureBox控件;而对于Web应用,可能是...
在VB.NET中,Access数据库常被用于小型项目的数据存储,包括保存和读取不同类型的数据,如文本、数字,甚至图片。本教程将详细介绍如何利用VB.NET与Access数据库交互,实现图片文件的保存与读取,并将结果展示在...
2. 创建一个表,包含一个字段用来存储图片数据,如“ImageData”,类型为OLE Object。 3. 在VB程序中,使用GDI+读取并处理图片,生成缩略图。 4. 将原始图片和缩略图的数据保存到内存的流对象(如:System.IO....
Access提供了BLOB(Binary Large Object)字段类型,可以用来存储图片、文档等非结构化数据。以下将详细介绍如何在Access中保存图片,以及如何读取和显示这些图片。 1. **保存图片到Access** - 创建表:首先,你...
在Access数据库中,可以创建表(Table)来存储数据,每个表由多个字段(Field)组成,字段可以是不同数据类型的,例如文本、数字或OLE对象(用于存储图片、文档等二进制数据)。 在VB中,我们可以使用ADO(ActiveX ...
在ACCESS中,存储非文本数据,如图片,通常通过OLE(Object Linking and Embedding)对象实现。OLE允许你嵌入或链接到其他应用程序创建的对象,例如图片文件。 2. **VBA基础**: 在VBA中,你可以编写代码来与...
在Access数据库中,可以使用“OLE对象”字段类型来存储图片。OLE(Object Linking and Embedding)允许嵌入和链接其他应用程序创建的对象,如图像、文本、Excel表格等。当在Access表中创建一个OLE对象字段时,实际上...
在Access数据库中,图片通常以“OLE对象”字段类型存储。在易语言中,可以通过以下步骤实现: - 打开或创建Access数据库连接,这通常涉及到ODBC数据源的设置和连接字符串的编写。 - 创建一个“OLE对象”类型的...
1. **创建数据库表**:在Access中,创建一个新的表,例如命名为"Photos",包含一个"ImageID"作为主键(自动编号类型),一个"ImageData"字段(OLE对象或图像类型)用于存储图片数据,还可以添加其他字段如...
- **字段类型选择**: 在创建或编辑Access表时,需要选择“OLE对象”字段类型来存储图片。OLE对象可以存储任何形式的文件,包括图片。 - **插入图片**: 用户可以直接在Access表单或报表中通过“插入”菜单选择图片...
在Access中,通常使用OLE对象字段类型来存储图片。当你在表中添加一个OLE对象字段,Access会提供一个界面让你可以插入或链接图片文件。 **保存图片到Access数据库:** 1. **创建表结构**:首先,你需要创建一个包含...
在Access中,图片通常存储在OLE对象字段中,这种字段类型可以存储任何类型的二进制数据,包括图像。为了在用户界面(如窗体或报表)上显示这些图片,我们需要创建一个控件,如图片框(PictureBox)。首先,我们需要...
使用Access的Visual Basic for Applications (VBA)编程,可以实现更复杂的图像操作,如读取、写入和修改BMP图片。例如,可以使用`CreateObject("ADODB.Stream")`创建一个流对象,然后将BMP图片的二进制数据写入或从...
Access数据库支持多种数据类型,其中包括OLE对象类型,这使得存储包括图片在内的多媒体数据成为可能。以下将详细介绍如何使用VB和Access来实现这个功能。 **一、OLE对象与图像存储** 1. **OLE对象数据类型**: ...