润乾报表 V2018 生成 pdf417 条形二维码
润乾报表本身没有能直接生成 pdf417 条形二维码的函数,但产品具备自定义扩展的能力,因此实现起来也很简单,此文主要分享实现的代码,例子可参考附件,内含具体的使用说明:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import com.lowagie2.text.pdf.BarcodePDF417;
import com.raqsoft.common.ImageUtils;
import com.raqsoft.common.MessageManager;
import com.raqsoft.common.ReportError;
import com.raqsoft.report.model.expression.Expression;
import com.raqsoft.report.model.expression.Function;
import com.raqsoft.report.model.expression.Variant2;
import com.raqsoft.report.resources.EngineMessage;
import com.raqsoft.report.usermodel.Context;
public class PDF417ErWeiMa extends Function{
public Object calculate(Context ctx) {
// 报表中调用该函数传递过来的参数列表
byte[] want1=null;
// 判断参数个数
if (this.param == null || this.param.getSubSize() !=0) {
MessageManager mm = EngineMessage.get();
throw new ReportError(“encrypt:” + mm.getMessage(“function.missingParam”));
}
// 取得第一个参数, 默认为表达式,需要把该表达式算出来,结果才是函数的参数值
Expression param1=(Expression)this.param.getLeafExpression();
if (param1 == null) { // 判断参数是否为空
MessageManager mm = EngineMessage.get();
throw new ReportError(“encrypt:” + mm.getMessage(“function.invalidParam”));
}
// 算出第一个参数值
Object result1 = Variant2.getValue(param1.calculate(ctx), false);
if(result1==null) return null;
if(result1 instanceof String){
String str=result1.toString();
System.out.println(“————–********————-”+str);
BufferedImage bi=Createpdf417(str);
try {
want1=ImageUtils.writePNG(bi);
} catch (IOException e) {
e.printStackTrace();
}
}
return want1;
}
// 生成 pdf417 条形二维码
public BufferedImage Createpdf417(String testString){
Image barcode = null;
BarcodePDF417 pdf417 = new BarcodePDF417();
pdf417.setText(testString);// 设置文本
pdf417.setErrorLevel(8);// 设置安全等级 // 我在网上找了下,iText.jar 没有中文文档,我英语很烂,所以里面的设置属性,我看不懂
pdf417.setYHeight(3);// 设置宽窄比例
// 设置放大因子
barcode = pdf417.createAwtImage(Color.black, Color.white);
BufferedImage img = new BufferedImage((int)barcode.getWidth(null), (int)barcode.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics();
g.drawImage(barcode, 0, 0, Color.white, null);
return img;
}
}
|