在xml publisher中嵌入二维码支持中文

最近研究个小东西,在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服务端,接收传参做对应的处理就可以了。

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念