创建文档
public JsonResult creatWord(HttpServletRequest request, HttpServletResponse response, String list) throws IOException, TemplateException {
//准备数据 通过JSONArray类接受json数据
JSONArray jsonarr=new JSONArray();
if(list!=null) {
//前端两次加密,所以这里两次解密
list = URLDecoder.decode(URLDecoder.decode(list, "UTF-8"), "UTF-8");
jsonarr= JSONArray.fromObject(list);
}else{
return JsonResultUtil.getErrorJson("导出失败,未接收到数据!");
}
dataMap = new HashMap();
String testword=bt(jsonarr);//转换数据
dataMap.put("test1", testword);
dataMap.put("testword", "");
//准备文件输出的名称
String fileName ="barcode.ftl";//// 要填入ftl模板的数据文件
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
String wordname = "批次条码导出-"+df.format(new Date())+".doc";//文件名称
try {
wordname=URLDecoder.decode(URLDecoder.decode(wordname, "UTF-8"), "UTF-8");
wordname = new String(wordname.getBytes(), "ISO-8859-1");
response.setHeader("Content-disposition", "attachment;filename="+ wordname);
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
response.setContentType("application/vnd.ms-excel;charset=utf-8");
//准备文件的模板并输出
Configuration cfg = new Configuration();
cfg.setClassForTemplateLoading(this.getClass(),"../template");
cfg.setObjectWrapper(new DefaultObjectWrapper());
cfg.setDefaultEncoding("UTF-8");
Template t = cfg.getTemplate(fileName); //取得要生成的模板对象
t.setEncoding("UTF-8");
Writer out=response.getWriter();
t.process(dataMap, out);
out.close();
// response.reset();
JsonResult result = new JsonResult();
result.setResult(1);
result.setMessage("导出成功了吗");
JSONObject obj=new JSONObject();
obj.put("filename",wordname);
obj.put("filepath",wordname);
result.setData(obj);
return result;
}
将数据转换为适合在ftl中合适的形式
public static String bt(JSONArray jsonarr) throws UnknownHostException {
String bt2="";
for(int i=0;i<jsonarr.size();i++){
JSONObject jsonobject=jsonarr.getJSONObject(i);
String ip = InetAddress.getLocalHost().getHostAddress();
System.out.println(ip+"*******************");
String content="http://"+ip+":8080/api/shop/origin/detail_batch.do?batch_id="+jsonobject.getString("batch_id");//工器具id
String s=getBufferedImgBase64CodeStr(content);
//bt为freemaker中表格的代码 在下面相加 就不需要在前端ftl文件中遍历list
String bt="<w:tbl><w:tblPr><w:tblStyle w:val=\"a3\"/><w:tblpPr w:leftFromText=\"180\" w:rightFromText=\"180\" w:vertAnchor=\"text\" w:tblpX=\"284\" w:tblpY=\"1\"/><w:tblOverlap w:val=\"Never\"/><w:tblW w:w=\"0\" w:type=\"auto\"/><w:tblInd w:w=\"0\" w:type=\"dxa\"/><w:tblLayout w:type=\"Fixed\"/></w:tblPr><w:tblGrid><w:gridCol w:w=\"3969\"/></w:tblGrid><w:tr><w:trPr><w:trHeight w:val=\"1701\"/></w:trPr><w:tc><w:tcPr><w:tcW w:w=\"3969\" w:type=\"dxa\"/></w:tcPr><w:p><w:pPr><w:framePr w:hspace=\"180\" w:wrap=\"around\" w:vanchor=\"text\" w:hanchor=\"text\" w:x=\"284\" w:y=\"1\"/><w:suppressOverlap/></w:pPr><w:r><w:rPr><w:rFonts w:hint=\"fareast\"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii=\"Courier New\" w:h-ansi=\"Courier New\" w:cs=\"Courier New\"/><wx:font wx:val=\"Courier New\"/><w:kern w:val=\"0\"/><w:sz w:val=\"16\"/><w:sz-cs w:val=\"16\"/></w:rPr><w:t> </w:t></w:r></w:p><w:tbl><w:tblPr><w:tblStyle w:val=\"a3\"/><w:tblpPr w:leftFromText=\"180\" w:rightFromText=\"180\" w:vertAnchor=\"text\" w:horzAnchor=\"margin\" w:tblpY=\"-9\"/><w:tblOverlap w:val=\"Never\"/><w:tblW w:w=\"0\" w:type=\"auto\"/><w:tblInd w:w=\"0\" w:type=\"dxa\"/><w:tblLayout w:type=\"Fixed\"/></w:tblPr><w:tblGrid><w:gridCol w:w=\"850\"/></w:tblGrid><w:tr><w:trPr><w:trHeight w:val=\"850\"/></w:trPr><w:tc><w:tcPr><w:tcW w:w=\"850\" w:type=\"dxa\"/><w:tcMar><w:left w:w=\"0\" w:type=\"dxa\"/><w:right w:w=\"0\" w:type=\"dxa\"/></w:tcMar></w:tcPr><w:p><w:pPr><w:framePr w:hspace=\"180\" w:wrap=\"around\" w:vanchor=\"text\" w:hanchor=\"text\" w:x=\"284\" w:y=\"1\"/><w:suppressOverlap/><w:rPr><w:rFonts w:hint=\"fareast\"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint=\"fareast\"/></w:rPr><w:t><w:pict><w:binData w:name=\"wordml://0200000"+i+".jpg\" xml:space=\"preserve\">"+s+"</w:binData><v:shape id=\"_x0000_i1026\" type=\"#_x0000_t75\" style=\"width:45pt;height:45pt\"><v:imagedata src=\"wordml://0200000"+i+".jpg\"/><o:lock v:ext=\"edit\" aspectratio=\"f\"/></v:shape></w:pict></w:t></w:r></w:p></w:tc></w:tr></w:tbl><w:p><w:pPr><w:framePr w:hspace=\"180\" w:wrap=\"around\" w:vanchor=\"text\" w:hanchor=\"text\" w:x=\"284\" w:y=\"1\"/><w:autoSpaceDE w:val=\"off\"/><w:autoSpaceDN w:val=\"off\"/><w:adjustRightInd w:val=\"off\"/><w:suppressOverlap/><w:jc w:val=\"left\"/><w:rPr><w:rFonts w:ascii=\"Courier New\" w:h-ansi=\"Courier New\" w:cs=\"Courier New\" w:hint=\"fareast\"/><wx:font wx:val=\"Courier New\"/><w:kern w:val=\"0\"/><w:sz w:val=\"16\"/><w:sz-cs w:val=\"16\"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii=\"Courier New\" w:h-ansi=\"Courier New\" w:cs=\"Courier New\" w:hint=\"fareast\"/><wx:font wx:val=\"Courier New\"/><w:kern w:val=\"0\"/><w:sz w:val=\"16\"/><w:sz-cs w:val=\"16\"/></w:rPr><w:t> </w:t></w:r><w:proofErr w:type=\"spellStart\"/><w:r><w:rPr><w:rFonts w:ascii=\"Courier New\" w:h-ansi=\"Courier New\" w:cs=\"Courier New\"/><wx:font wx:val=\"Courier New\"/><w:color w:val=\"000000\"/><w:kern w:val=\"0\"/><w:sz w:val=\"16\"/><w:sz-cs w:val=\"16\"/></w:rPr><w:t>gqjclass</w:t></w:r><w:proofErr w:type=\"spellEnd\"/><w:r><w:rPr><w:rFonts w:ascii=\"Courier New\" w:h-ansi=\"Courier New\" w:cs=\"Courier New\" w:hint=\"fareast\"/><wx:font wx:val=\"Courier New\"/><w:color w:val=\"000000\"/><w:kern w:val=\"0\"/><w:sz w:val=\"16\"/><w:sz-cs w:val=\"16\"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii=\"Courier New\" w:h-ansi=\"Courier New\" w:cs=\"Courier New\"/><wx:font wx:val=\"Courier New\"/><w:color w:val=\"000000\"/><w:kern w:val=\"0\"/><w:sz w:val=\"16\"/><w:sz-cs w:val=\"16\"/></w:rPr><w:t> </w:t></w:r></w:p><w:p><w:pPr><w:framePr w:hspace=\"180\" w:wrap=\"around\" w:vanchor=\"text\" w:hanchor=\"text\" w:x=\"284\" w:y=\"1\"/><w:autoSpaceDE w:val=\"off\"/><w:autoSpaceDN w:val=\"off\"/><w:adjustRightInd w:val=\"off\"/><w:suppressOverlap/><w:jc w:val=\"left\"/><w:rPr><w:rFonts w:ascii=\"Courier New\" w:h-ansi=\"Courier New\" w:cs=\"Courier New\" w:hint=\"fareast\"/><wx:font wx:val=\"Courier New\"/><w:kern w:val=\"0\"/><w:sz w:val=\"16\"/><w:sz-cs w:val=\"16\"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii=\"Courier New\" w:h-ansi=\"Courier New\" w:cs=\"Courier New\" w:hint=\"fareast\"/><wx:font wx:val=\"Courier New\"/><w:color w:val=\"000000\"/><w:kern w:val=\"0\"/><w:sz w:val=\"16\"/><w:sz-cs w:val=\"16\"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii=\"Courier New\" w:h-ansi=\"Courier New\" w:cs=\"Courier New\" w:hint=\"fareast\"/><wx:font wx:val=\"Courier New\"/><w:color w:val=\"000000\"/><w:kern w:val=\"0\"/><w:sz w:val=\"16\"/><w:sz-cs w:val=\"16\"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii=\"Courier New\" w:h-ansi=\"Courier New\" w:cs=\"Courier New\" w:hint=\"fareast\"/><wx:font wx:val=\"Courier New\"/><w:color w:val=\"000000\"/><w:kern w:val=\"0\"/><w:sz w:val=\"16\"/><w:sz-cs w:val=\"16\"/></w:rPr><w:t> </w:t></w:r></w:p><w:p><w:pPr><w:framePr w:hspace=\"180\" w:wrap=\"around\" w:vanchor=\"text\" w:hanchor=\"text\" w:x=\"284\" w:y=\"1\"/><w:autoSpaceDE w:val=\"off\"/><w:autoSpaceDN w:val=\"off\"/><w:adjustRightInd w:val=\"off\"/><w:suppressOverlap/><w:jc w:val=\"left\"/><w:rPr><w:rFonts w:ascii=\"Courier New\" w:h-ansi=\"Courier New\" w:cs=\"Courier New\" w:hint=\"fareast\"/><wx:font wx:val=\"Courier New\"/><w:color w:val=\"000000\"/><w:kern w:val=\"0\"/><w:sz w:val=\"16\"/><w:sz-cs w:val=\"16\"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii=\"Courier New\" w:h-ansi=\"Courier New\" w:cs=\"Courier New\" w:hint=\"fareast\"/><wx:font wx:val=\"Courier New\"/><w:color w:val=\"000000\"/><w:kern w:val=\"0\"/><w:sz w:val=\"16\"/><w:sz-cs w:val=\"16\"/></w:rPr><w:t> </w:t></w:r></w:p><w:p><w:pPr><w:framePr w:hspace=\"180\" w:wrap=\"around\" w:vanchor=\"text\" w:hanchor=\"text\" w:x=\"284\" w:y=\"1\"/><w:autoSpaceDE w:val=\"off\"/><w:autoSpaceDN w:val=\"off\"/><w:adjustRightInd w:val=\"off\"/><w:suppressOverlap/><w:jc w:val=\"left\"/><w:rPr><w:rFonts w:ascii=\"Courier New\" w:h-ansi=\"Courier New\" w:cs=\"Courier New\" w:hint=\"fareast\"/><wx:font wx:val=\"Courier New\"/><w:kern w:val=\"0\"/><w:sz w:val=\"16\"/><w:sz-cs w:val=\"16\"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii=\"Courier New\" w:h-ansi=\"Courier New\" w:cs=\"Courier New\" w:hint=\"fareast\"/><wx:font wx:val=\"Courier New\"/><w:color w:val=\"000000\"/><w:kern w:val=\"0\"/><w:sz w:val=\"16\"/><w:sz-cs w:val=\"16\"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii=\"Courier New\" w:h-ansi=\"Courier New\" w:cs=\"Courier New\"/><wx:font wx:val=\"Courier New\"/><w:color w:val=\"000000\"/><w:kern w:val=\"0\"/><w:sz w:val=\"16\"/><w:sz-cs w:val=\"16\"/></w:rPr><w:t> </w:t></w:r></w:p></w:tc></w:tr></w:tbl>";
String bt1 = bt.replace("gqjclass",jsonobject.getString("batch_name"));
// .replace("factory_num", "")
// .replace("bxgs", "")
// .replace("gqjstandard", "")
// .replace("Useraddr", "")
// .replace("factoryname", "")
// .replace("voltage_grade", "");
bt2=bt2+bt1;
}
return bt2;
}
//得到64位编码的二维码图片的编码
public static String getBufferedImgBase64CodeStr(String msg) {
String base64=null;
try {
base64 = create_image(msg);
} catch (Exception e) {
e.printStackTrace();
}
return base64;
}
//创造二维码图片
public static String create_image(String msg){
byte[] data=null;
try{
Qrcode testQrcode =new Qrcode();
// 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),
// 排错率越高可存储的信息越少,但对二维码清晰度的要求越小
testQrcode.setQrcodeErrorCorrect('M');
testQrcode.setQrcodeEncodeMode('B');
testQrcode.setQrcodeVersion(7);
String testString = msg;
byte[] d = testString.getBytes("gbk");
BufferedImage bi = new BufferedImage(98, 98, BufferedImage.TYPE_BYTE_BINARY);
Graphics2D g = bi.createGraphics();
g.setBackground(Color.WHITE);
g.clearRect(0, 0, 98, 98);
g.setColor(Color.BLACK);
if (d.length>0 && d.length <120){
boolean[][] s = testQrcode.calQrcode(d);
for (int i=0;i<s.length;i++){
for (int j=0;j<s.length;j++){
if (s[j][i]) {
g.fillRect(j*2+3,i*2+3,2,2);
}
}
}
}
g.dispose();
bi.flush();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bi, "jpg", baos);
data = baos.toByteArray();
}
catch (Exception e) {
e.printStackTrace();
}
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);// 返回Base64编码后的字节字符串
}