文件处理 二维码文档生成

    xiaoxiao2021-04-13  47

    创建文档 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编码后的字节字符串 }
    转载请注明原文地址: https://ju.6miu.com/read-668818.html

    最新回复(0)