自定义函数生成UPC条形码

编辑
文档创建者:印然 (67260 )     浏览次数:2721次     编辑次数:8次     最近更新:ukae 于 2018-07-30     

目录:

1. 问题描述编辑

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

222

2. 问题原因编辑

条形码自问世以来,为适应多种需要,产生了众多的编码系统。但目前得到国际公认用于商品包装的主要有两种,即UPC和EAN。这两种编码系统属同一类型,每个字符均由数条黑白相间的条纹组成,中间有两条窄条纹向下伸出少许,将条形码分成左右两部分。这两种条形码虽然只能表示0到9,十个数字,但具有高度的查核能力,扫描操作简单可靠,而且UPC的构成:由11位数字的通用产品代码和1位校验码组成。产品代码的第1位数字为编码系统字符;中间5位数字表示制造商号,后5位数字为产品代码。

3. 实现步骤编辑

3.1 编写自定义函数

1)导入第三方包
在eclipse中导入第三方包barcode4j-light.jar),barcode4j是一款开源的条形码生成库,能够生成很多种编码的条形码,包括UPC码。自定义函数中可以直接调用该包中现成的方法来生成UPC条形码。
2)自定义函数类
新建一个类Upc,完整代码如下:
// 自定义函数生成UPC条形码 package com.fr.function; import java.awt.image.BufferedImage; import org.krysalis.barcode4j.impl.upcean.UPCABean; import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider; import org.krysalis.barcode4j.tools.UnitConv; import com.fr.script.AbstractFunction; public class Upc extends AbstractFunction { public Object run(Object[] args) { if (args == null || args.length < 1) { return "参数不对,必须有一个参数"; } try { // 创建一个UPC编码生成器 UPCABean bean = new UPCABean(); // 设置条形码高度,BufferedImage.TYPE_BYTE_BINARY代表常量值12,可直接使用常量值 final int dpi = Integer.parseInt(args[1].toString()); bean.setModuleWidth(UnitConv.in2mm(1.0f / dpi)); bean.doQuietZone(false); BitmapCanvasProvider canvas = new BitmapCanvasProvider(dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0); // 创建条形码 bean.generateBarcode(canvas,args[0].toString()); canvas.finish(); // 返回图片显示 return canvas.getBufferedImage(); } catch (Exception e) { e.printStackTrace(); } return args[0]; } }
3.2 编译自定义函数
编译Upc.java生成Upc.class文件,拷贝至报表环境目录%FR_HOME%/webapps/webroot/WEB-INF/classes/com/fr/function下;
将第三方包barcode4j-light.jar放在报表环境目录%FR_HOME%/webapps/webroot/WEB-INF/lib文件夹下。
3.3 注册自定义函数
启动设计器,点击服务器>函数管理器,新增函数取名为Upc,选择Upc.class类,如下图:
222
3.4 Upc()函数的使用
重启服务器,在报表中使用公式=Upc(num1, num2),num1为需要生成条形码的数值,num2为生成的图片的高度。

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


222

附件列表


主题: 二次开发
如果您认为本文档还有待完善,请编辑

文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

此页面有帮助吗?只是浏览 [ 去社区提问 ]