润乾报表 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;
            }
        }
|

pdf417zip