最近研究个小东西,在xmlpublisher中嵌入二维码,且二维码中会包含中文信息,下面将实现的大体流程记录下来,算是给大家分享也是自己留用。
实现的大体思路是这样的,首先在服务器上(可以是ERP对应的服务器,也可以是其他的,以前就有的也都OK)布置一套tomcat之类的web服务器,也可以将工程放到已经存在的服务器上,借它的家用一下。将工程放到这个服务器上,然后修改xmlpublisher对应的RTF模板以实现嵌入二维码的功能。
1、将工程布置到服务器上
这个工程主体上就是一个jsp页面,使用这个jsp页面生成一个二维码,jsp的主体代码如下
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.awt.*"%> <%@ page import="java.awt.image.BufferedImage"%> <%@ page import="javax.imageio.*"%> <%@ page import="com.swetake.util.Qrcode"%> <%@ page import="com.google.zxing.EncodeHintType"%> <%@ page import="java.util.Hashtable"%> <%@ page import="com.google.zxing.common.BitMatrix"%> <%@ page import="com.google.zxing.MultiFormatWriter"%> <%@ page import="com.google.zxing.BarcodeFormat"%> <%@ page import="com.google.zxing.client.j2se.MatrixToImageWriter"%> <%@ page import="java.sql.*"%> <% //request.setCharacterEncoding("gbk"); request.setCharacterEncoding("utf-8"); int size = 8; String temp = request.getParameter("SCODE"); //String SCODE = new String(temp.getBytes("ISO-8859-1"),"gbk");//具体的编码方式可能和具体的工程有关,自行调整 String SCODE = new String(temp.getBytes("ISO-8859-1"),"utf-8");//这个就是由ERP端传过来的想要生成二维码的字符串 Hashtable hints= new Hashtable(); hints.put(EncodeHintType.CHARACTER_SET,"utf-8"); BitMatrix bitMatrix = new MultiFormatWriter().encode(result,BarcodeFormat.QR_CODE,200,hints); ServletOutputStream responSEOutputStream = response.getOutputStream(); MatrixToImageWriter.writeToStream(bitMatrix,"png",responSEOutputStream); responSEOutputStream.flush(); responSEOutputStream.close(); out.clear(); out = pageContext.pushBody(); %>
上述代码相当于在jsp页面写的java程序,需要一些支持,如zxing的包之类的,可以自己去网上找一下,具体需要的jar包和后台的支持类(就是在
jsp中引入的类)在zxing的二维码中都能找到,有心将整个小工程传上来,但是太大了,上传不了。还有测试的时候发现,这套能生成中文的二维码
好像只有在jdk1.6或是更高的版本上才能跑通,在1.5上是不行的。
2、修改xmlpublisher的RTF模板
用word将对应的RTF模板打开,在你想显示二维码的位置上添加一个图片当做占位符,然后对这个图片右键---设置图片格式---可选文字,在这个框中
填写你想要指向的jsp文件。具体格式困扰了我好几个小时,现在将大体上我遇到的问题写一下。
大体上的格式是url:{},在{}中间填写想要指向的jsp路径。
想拼串的时候使用concat函数
对应需要生成的二维码的信息如果是常量串直接写就可以了,如果需要动态的,在对应的xml文件中也可以获取(就跟RTF模板上其他节点获取方式是一样的)
例如:url:{concat('http://ip:端口/工程名/路径/XXX.jsp?传参=',pram,'@_@')},其中pram是动态的参数根据实际需要自己取,@_@不是卖萌,
是参数间的分隔符,将这个传递到web服务端,接收传参做对应的处理就可以了。
原文链接:https://www.f2er.com/xml/300465.html