【转】在birt中显示条形码

http://wuyu.someok.com/blog/dbreport/index.html

条码显示,在birt中最常见的有两种方法:

1、使用条码字体(对pdf无效);

2、用barcode的开源包,生成barcode,然后在报表里用动态地址去取图片。


今晚看birt文档(第 23 章 使用 Java 编写事件处理程序),例子中用java实现了一个LabelEventAdapter的适配器,对标签元素进行事件控制。脑子里灵光一现,似乎条码有着落了。


我的测试例子很简单,继承ImageEventAdapter类,重载onCreate方法,以进行条形码处理


package cn.ynzc.common.birt.test;

import java.io.File;

import java.io.FileOutputStream;

import jbarcodebean.Code128;

import jbarcodebean.JBarcodeBean;

import org.apache.commons.codec.digest.DigestUtils;

import org.eclipse.birt.report.engine.api.script.IReportContext;

import org.eclipse.birt.report.engine.api.script.eventadapter.ImageEventAdapter;

import org.eclipse.birt.report.engine.api.script.instance.IImageInstance;



public class MyLabelClass extends ImageEventAdapter {



public void onCreate(IImageInstance image, IReportContext reportContext) {

try {

//实际应用中,可以使用image.getRowData().getColumnValue("columnname")获得字段值

String code = "ABCDEF123-2222";

//似乎windows文件名中不允许使用“-”等符号,干脆将code进行md5散列处理

File file = new File(System.getProperty("java.io.tmpdir"), DigestUtils.md5Hex(code));

//避免每次都进行条码文件生成

if (!file.exists()) {

JBarcodeBean bb = new JBarcodeBean();

bb.setCodeType(new Code128());

bb.setShowText(true);

bb.setBarcodeHeight(45); //条码高度

bb.setCode(code);

bb.gifEncode(new FileOutputStream(file));

}

image.setFile(file.getAbsolutePath());

}

catch (Exception e) {

e.printStackTrace();

}

}



}


测试用的birt报表文件简单得要死,就往上面扔了个image元素,设置其Event Handler Class为刚才写好的java类,最终得到的rptdesign文件内容如下:


<?xml version="1.0" encoding="UTF-8"?>



<report xmlns="http://www.eclipse.org/birt/2005/design" version="3.2.6" id="1">

<property name="createdBy">Eclipse BIRT Designer Version 2.1.2.v20070205-1728 Build
<20070205-1728>property>

<property name="units">inproperty>

<page-setup>

<simple-master-page name="Simple MasterPage" id="2"/>

</page-setup>

<body>

<image id="4">

<property name="eventHandlerClass">cn.ynzc.common.birt.test.MyLabelClassproperty>

</image>

</body>

</report>


运行测试,条形码出来了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值