润乾4.5的 qrcode 二维码实现函数

qrcode二维码生成/解析 开源的二维码生成/解析包有google的zxing和qrcode,之前用zxing写的二维码生成方法生成的二维码用手机无法识别,昨天用qrcode开源包写个了简单的二维码生成方法,生成的二维码可以用手机扫描识别。 package com.lmg.qrcode.test; import java.awt.Color; import java.awt.Graphics2D; import java 阅读详情

由于润乾4.5默认没有二维码功能,需要用函数的方式实现。

准备库文件:

QR Code for Java ver. 0.50beta:http://www.swetake.com/qr/java/qr_java.html

或者直接下载:http://www.venus.dti.ne.jp/~swe/program/qrcode_java0.50beta10.tar.gz

编写二维码函数:

package runqian;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;

import com.runqian.report4.usermodel.Context;
import com.runqian.report4.model.expression.Expression;
import com.runqian.report4.model.expression.Function;
import com.runqian.report4.model.expression.Variant2;
import com.runqian.base4.util.ImageUtils;
import com.runqian.base4.util.ReportError;
import com.swetake.util.Qrcode;

/**
 * 二维码QRCode函数.
 * 
 * @author berry
 */
public class QRCodeTest extends Function {

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.runqian.report4.model.expression.Node#calculate(com.runqian.report4
	 * .usermodel.Context, boolean)
	 */
	@Override
	public Object calculate(Context arg0, boolean arg1) {
		// 报表中调用该函数传递过来的参数列表
		byte[] want = null;

		if (this.paramList.size() == 0) {
			throw new ReportError("二维码自定义函数参数列表为空");
		}

		// 取得计算表达式(得到传递给报表的参数)
		Expression param1 = (Expression) this.paramList.get(0);

		if (param1 == null) {
			throw new ReportError("二维码自定义函数出现无效参数");
		}

		// 运算表达式,并取得运算结果(Object)
		Object result1 = Variant2.getValue(param1.calculate(arg0, arg1), false,
				arg1);

		if (result1 == null)
			return null;

		if (result1 instanceof String) {
			String str = result1.toString();

			// 版本设为5
			BufferedImage bi = CreateQrcode(str, 'M', 'B', 5, 4, 4);

			try {
				want = ImageUtils.writePNG(bi);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return want;
	}

	/**
	 * 创建QRCode图形.
	 * 
	 * @param data
	 *            二维码内容
	 * @param errorCorrection
	 *            纠错率,包括L(7%)、M(15%)、Q(25%)和H(30%),默认为M级
	 * @param encodeMode
	 *            编码模式,包括A、B、N,默认为B
	 * @param version
	 *            版本号,介于1-40。版本越高信息容量越大,默认可设为5<br/>
	 *            版本5,37*37模块,信息容量[L级:864;M级:688;Q级:496;H级:368]<br/>
	 *            更多可参考:http://www.qrcode.com/en/vertable1.html
	 * @param lineWidth
	 *            线宽,宽度越大图形越大,默认为4
	 * @param blankWidth
	 *            图形空白区宽度,应该设为线宽的倍数或0
	 * @return 图片
	 */
	public BufferedImage CreateQrcode(String data, char errorCorrection,
			char encodeMode, Integer version, Integer lineWidth,
			Integer blankWidth) {
		Qrcode qrcode = new Qrcode();

		// 纠错率,L, Q, H, M(默认)
		qrcode.setQrcodeErrorCorrect(errorCorrection);
		// 模式,A, N, B(默认)
		qrcode.setQrcodeEncodeMode(encodeMode);
		// 版本,1-40
		qrcode.setQrcodeVersion(5);

		BufferedImage bi = null;
		Graphics2D g = null;

		try {
			byte[] d = data.getBytes("GB18030");

			boolean[][] b = qrcode.calQrcode(d);

			int qrcodeDataLength = b.length;
			// 图形宽度
			int imageLength = qrcodeDataLength * lineWidth + blankWidth * 2;

			bi = new BufferedImage(imageLength, imageLength,
					BufferedImage.TYPE_INT_RGB);

			g = bi.createGraphics();
			g.setBackground(Color.WHITE);
			g.clearRect(0, 0, imageLength, imageLength);
			g.setColor(Color.BLACK);

			for (int i = 0; i < b.length; i++) {
				for (int j = 0; j < b.length; j++) {
					if (b[j][i]) {
						g.fillRect(j * lineWidth + blankWidth, i * lineWidth
								+ blankWidth, lineWidth, lineWidth);
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (g != null) {
				g.dispose();
			}
			if (bi != null) {
				bi.flush();
			}
		}

		return bi;
	}
}

在配置文件中加入函数定义

designer\web\WEB-INF\classes\config\customFunctions.properties

webapps\demo\WEB-INF\classes\config\customFunctions.properties

qrcode=0,runqian.QRCodeTest

模板中设置为图片字段,值为=qrcode(B1),如下图:

预览效果:



参考资料:

[1]润乾报表单元格显示二维码.http://www.cnblogs.com/javaReport/archive/2012/04/16/2452149.html

[2]使用 Java 生成二维码图像,解析二维码图像.http://blog.youkuaiyun.com/zklth/article/details/7191190


使用Python的PyQt5+qrcode模块生成自己的个性化二维码(一) 最近在学习使用PyQt5编写图形化界面,刚好想起来之前写过的一个生成二维码的脚本,所以将二者结合起来做成一个具有图形化界面的二维码生成器。 使用的库 主要就是PyQt5和qrcode啦,还会用一下PIL存储图片,目前Python下这几个库的安装都很方便。我是Python3.7版本,就直接在命令行输入以下命令就可以进行安装: pip install PyQt5 pip insyall qrcode ... 阅读详情

相关推荐

润乾报表4.5安装包及授权文件.zip

润乾报表4.5安装包及运行所必须的授权文件,可修改raq文件等

润乾报表自定义函数显示二维码

润乾报表V4.5里面直接支持条形码,如果要显示二维码,需要自定义函数来实现。大体的步骤如下:1、继承并实现对应的接口-详见代码2、接口中,生成二维码图片,可调用zxing -详见代码3、将生成的类文件拷贝到服务器的指定位置拷贝到:web\WEB-INF\classes 下,注意包的路径要拷贝完整,不要只拷生成的class文件4、配置注册自定义函数在\web\WEB-INF\classes\conf...

leoppeng的专栏 3274

QRCode方式生成二维码所需要的两个Jar包

QRCode方式生成二维码所需要的两个Jar包,一个是生成二维码的包Qrcode-C.jar,另一个是解析二维码的包qrcode-R.jar。注:-C和-R是我为了区分两个Jar包人为加上的

润乾报表2018版生成二维码操作

润乾报表生成二维码操作

qq_67960824的博客 583

润乾报表工具

润乾报表工具

润乾V4.5报表

对于旧版本润乾得扩展其中包含了二维码等扩展,此资源为较新版本得润乾

润乾报表2018版如何生成二维码

润乾报表2018版如何生成二维码

qq_39564710的博客 417

润乾报表关键属性定义及操作

润乾报表关键属性定义及操作,很方便,便于查找…………

润乾报表V4.5中打印,二维码功能实现

1、reporthome\webapps\demo  下替换掉  runqianReport4Applet.jar 2、reporthome\webapps\demo\WEB-INF\lib  下替换掉  report4.jar 3、在项目的MESProject\src\main\webapp  下加上runqianReport4Applet.jar 打印功能只能在IE下使用4、用IE 访问:ht...

weixin_39604292的博客 1325

微前端实战:MicroApp内存泄漏优化策略与性能调优

本文分享了在大型后台管理系统微前端化过程中,使用MicroApp框架时遇到的内存泄漏实战问题与优化策略。通过深入分析沙箱机制,提出动态加载、精准卸载、沙箱配置优化及第三方库补丁等核心方案,并结合Vue/React子应用专项检查清单,有效解决了内存占用飙升问题,为微前端架构的性能调优提供了系统性解决方案。

weixin_29014939的博客 276

光储微电网混合储能系统的控制策略

随着社会生产力的不断提高,对不可再生资源的大量消耗,人们已经意识到发展可再生能源的重要性,因此微电网技术作为再生能源利用的有效形式被快速发展。蓄电池容量无限大是传统光储微电网混合储能系统控制策略一种理想形式,但实际上蓄电池的容量是有限度的,传统控制策略在蓄电池剩余电量达到阖值时将无法正常使用,由此提出了光储微电网混合储能系统的新型控制策略,又结合实际情况,对开关进行了改进,利用开关与二极管并联,使其拥有四种工作状态,当储能元件剩余电量达到阈值时,可自动恢复电量降低成本,提高并输出电池电能质量。

nhkg888的博客 1732

生成二维码、自定义二维码

1、导一个jar包   zxing,jar 2、定义两个按钮   生成二维码、自定义二维码 定义一个图片 用于生成二维码 3、逻辑操作 MainActivity中 public class MainActivity extends AppCompatActivity implements View.OnClickListener {     private ImageView iv

ZhouZhouSunShine的博客 869

【为K8s的coredns配置上游DNS服务器】

为K8s的coredns配置上游DNS服务器一、背景描述二、如何修改coredns达到目的三、修改coredns 解析指定域名走指定dns①、get coredns configmap②、修改coredns configmap③、查询现有coredns pod并逐个重启④、验证解析是否正确 一、背景描述 有一个项目需要部署到客户内网,并通过nat映射实现外网访问! 项目中有多个服务之间调用是走的外网域名,项目采用k8s集群容器部署,客户的网络情况导致服务之间通过外网域名互调时总是 connection ti

那个那个 6670

Python二维码应用(一)QRcode二维码生成&识别

基于Python的二维码实验一、机器视觉之QRcode二、基于Python的QRcodetest(一)配置环境(二)生成自己的二维码(三)识别二维码三、调用opencv库摄像头识别图像 一、机器视觉之QRcode 问:什么是QRcode呢? 答:二维码,二维码结构图: 问:主要运用qrcode库文件、这是个什么东东呢? 答:这里给一篇博客有详细叙述:Python生成二维码 开源库impo...

cungudafa的博客 9万+

Android 10 根文件系统和编译系统(十):Android.mk编译动态库

配套系列教学视频链接: Android 10.0 AOSP源码编译: 2-AOSP源码开发环境搭建 Android 10.0 根文件系统和编译系统: 3-Android根文件系统和编译系统 说明 系统:AOSP Android10.0 设备:Android模拟器 前言 本文章重点讲解Android.mk如何控制编译源码编译成动态库 ...

ldswfun的专栏 932

基于Keil软件实现对射式红外传感器计次 (江协科技HAL库)

用HAL库复现江协科技,让嵌入式学习之路更顺畅。

2401_82728381的博客 798

使用Qt绘制二维码 QRcode

——今天的我们,是站在巨人的肩膀上前行。 二维码自从出现以来,已经极大地改变了我们的生活方式,它能容纳一些简短的信息,却又不那么简短,以至于很多场合都能使用二维码作为信息的载体。一个月以前,有个老师跟我提过一句,如果可以在上机实验时使用二维码来绑定学生的信息,就可以省很多时间。于是我就萌生了使用Qt绘制二维码的想法。 但是这一个月来我一直在研究另一个东西,直到昨天我才研究出一点进展。那个...

神迹降临的博客 1万+

【服务器电源架构与关键技术发展趋势】深度解析架构、方案、玩家与未来趋势

技术维度:台达 / 光宝在高功率密度(97%+ 效率)和垂直整合上领先,大陆厂商(麦格米特 / 欧陆通)在成本控制和快速响应上更优,国际厂商(英飞凌)聚焦核心器件突破。 客户维度:台达绑定英伟达核心供应链,麦格米特 / 欧陆通兼顾国内外客户,光宝 / 中恒电气侧重云端与互联网厂商。 趋势适配:所有厂商均加速布局 800V 高压架构、液冷技术和高功率 Power Shelf,以应对 AI 服务器单柜功率从 10kW→200kW 的升级需求。

昔时扬尘处 723

Python qrcode模块(生成二维码)

Python qrcode模块(生成二维码)一、Qrcode类解释二、Qrcode类构造函数及参数含义1、version=None2、error_correction=constants.ERROR_CORRECT_M3、box_size=10,4、border=45、image_factory=None6、mask_pattern=None三、Qrcode类常用方法1、qr.make(self, fit=True)2、qr.add_data(self, data, optimize=20)3、qr.pri

chenliang1038的博客 6562

手把手教你学Simulink——基于Simulink的无感FOC(滑模观测器+PLL)实战

本文详细介绍了基于Simulink的无感FOC(滑模观测器+PLL)实现方法。主要内容包括:1)SMO+PLL原理精讲,阐述滑模观测器核心思想和PLL的作用;2)系统架构全景图展示;3)Simulink建模全流程,从基础FOC框架到SMO和PLL模块的实现;4)关键参数整定指南和工程实践要点;5)仿真结果分析及常见问题解决方案。该方法可有效替代机械传感器,降低成本并提高可靠性,适用于空调压缩机、电动汽车水泵等工业场景。文章还提供了详细的调试建议和动手实践指导。

MHD0815的博客 83

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

使用 qrcode 生成二维码

qrcode 是一个用于生成二维码的 JavaScript 库,主要是通过获取 DOM 的标签,再通过 HTML5 Canvas 绘制而成。

Eliaukoyx 8447

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

使用Python 和 qrcode 生成二维码

通过这篇博客文章,你学会了如何使用 Python 和qrcode库生成二维码。我们逐步讲解了代码的实现,包括安装库、生成二维码和保存图片。你可以根据需要修改和扩展这个示例,以实现更多的功能。qrcode 库更多使用生成包含文本的二维码:你可以将data变量修改为任意文本,例如。生成包含联系方式的二维码:你可以将data变量修改为包含联系方式的字符串,例如;。

m0_74972192的博客 4787

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Qrcode生成二维码相关问题

使用Qrcode生成二维码,并提供下载二维码图按钮 JS代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...

sunon_的博客 1万+

前端qrcode生成二维码详解

qrcode 是一个基于JavaScript的二维码生成库,主要是通过获取 DOM 的标签,再通过 HTML5 Canvas 绘制而成,不依赖任何库。

web18285997089的博客 5854

python之qrcode模块生成二维码

用Python的qrcode包来生成二维码很简单 一、前期准备: pip install qrcode qrcode 依赖 Image 这个包: pip install Image 二、安装好之后就可以通过代码实现二维码了 - 1. 简单生成二维码: import qrcode //模块导入 //调用qrcode的make()方法传入url或者想要展示的内容 img = qrcode.make('http://www.baidu.com') //写入文件 with open('tes

小韭菜的博客 7675
上一篇: apue 线程代码编译时的 undefined reference to 'pthread_create' 问题处理
下一篇: Extjs 2.3 的多选框控件 muiltiCombox
rootcn
博客等级 码龄23年 27粉丝 91原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值