您的位置首页百科知识

开发报表系统:自定义函数生成UPC条形码

开发报表系统:自定义函数生成UPC条形码

的有关信息介绍如下:

开发报表系统:自定义函数生成UPC条形码

工具/原料

开发报表系统软件:FineReport7.1.1

大小:148.2M 适用平台:windows

1.问题描述

FineReport中自带有EAN型编码,但却没有UPC条形码,此时若您希望在报表中使用UPC编码的条形码应该怎么办呢?FineReport可以通过自定义函数引用第三方包来生成UPC编码的条形码并显示出来,如输入数值12345678912,将会得到以下UPC条形码:

2.问题原因

条形码自问世以来,为适应多种需要,产生了众多的编码系统。

但目前得到国际公认用于商品包装的主要有两种,即UPC和EAN。这两种编码系统属同一类型,每个字符均由数条黑白相间的条纹组成,中间有两条窄条纹向下伸出少许,将条形码分成左右两部分。

这两种条形码虽然只能表示0到9,十个数字,但具有高度的查核能力,扫描操作简单可靠,而且UPC的构成:由11位数字的通用产品代码和1位校验码组成。产品代码的第1位数字为编码系统字符;中间5位数字表示制造商号,后5位数字为产品代码。

3.实现步骤

3.1编写自定义函数

导入第三方包

在eclipse中导入第三方包(barcode4j-light.jar),barcode4j是一款开源的条形码生成库,

能够生成很多种编码的条形码,包括UPC码。自定义函数中可以直接调用该包中现成的方法来生成UPC条形码。

自定义函数类

新建一个类Upc,完整代码如下:

//自定义函数生成UPC条形码

packagecom.fr.function;

importjava.awt.image.BufferedImage;

importorg.krysalis.barcode4j.impl.upcean.UPCABean;

importorg.krysalisactFunction;

publicclassUpcextendsAbstractFunction{

publicObjectrun(Object[]args){

if(args==null||args.length<1){

return"参数不对,必须有一个参数";

}

try{

//创建一个UPC编码生成器

UPCABeanbean=newUPCABean();

//设置条形码高度,BufferedImage.TYPE_BYTE_BINARY代表常量值12,

可直接使用常量值

finalintdpi=Integer.parseInt(args.toString());

bean.setModuleWidth(UnitConv.in2mm(1.0f/dpi));

s=newBitmapCanvasProvider(dpi,

BufferedImage.TYPE_BYTE_BINARY,false,0);

//创建条形码

bean.generateBarcode(canvas,args);

canvas.finish();

//返回图片显示

returncanvas.getBufferedImage();

}catch(Exceptione){

e.printStackTrace();

}

returnargs;

}

}

3.2编译自定义函数

编译Upc.java生成Upc.class文件,拷贝至报表环境目录/WebReport/WEB-INF/classes/com/fr/function下;

将第三方包barcode4j-light.jar

放在报表环境目录/WebReport/WEB-INF/lib文件夹下。

3.3注册自定义函数

启动设计器,点击服务器|函数管理器,新增函数取名为Upc,选择Upc.class类,如下图:

3.4Upc()函数的使用

重启服务器,在报表中使用公式=Upc(num1, num2),

num1为需要生成条形码的数值,num2为生成的图片的高度。

如在单元格中输入公式:=Upc(12345678912,100),预览便可以看到条形码了。