读取excel批量生成二维码

来源:互联网 发布:java object 类型转换 编辑:程序博客网 时间:2024/06/07 01:12

昨天工作需要,让生成二维码,让用草料生成,就需要一个个的复制粘贴,有点麻烦.关键是量特别大,如果传统的复制粘贴要很长时间才可以.

后来想到用程序生成.于是百度了一下生成二维码的方法,别说还很简单,把代码粘上,运行一下,竟然真的生成了,就是有点瑕疵,稍微调整一下就好了.

再找了一下读取excel的方法,粘上代码,导入jar包,稍微改造一下,竟然也可以用,于是就把二者 合二为一,循环了一下,就可以批量生成二维码了.稍微调试一下,加个logo,测试了一下中文竟然可以用了.

现在就分享一下使用方法.有需要批量生成二维码的朋友,可以拿去用一下.希望有用的朋友给个评论,也好做出相应的改正.

ps:暂时只支持xls格式,如有xlsx格式,请先转换成xls再使用.后续有空闲了再gai

代码如下:



import java.awt.Color;  import java.awt.Graphics2D;import java.awt.Image;import java.awt.image.BufferedImage;  import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.imageio.ImageIO;import org.apache.commons.lang.StringUtils;import com.swetake.util.Qrcode;import jxl.Sheet;import jxl.Workbook;import jxl.read.biff.BiffException; 
 
 /**
 * 
* @ClassName: CreateQRCode 
* @Description: 读取excel 批量生成二维码的工具类
* @author A18ccms a18ccms_gmail_com 
* @date 2017年12月26日 下午1:24:04 
*
 */
public class CreateQRCode {  
     
   
   /**
   * @Title: QRCode 
   * @Description: 生成二维码 
   * @param @param name 文件名
   * @param @param data 二维码信息
   * @param @param logoPath 中间logo图片地址
   * @param @throws Exception    设定文件 
   * @return void    返回类型 
   * @throws
    */
   public void QRCode(String name,String qrData,String logoPath) throws Exception{
   Qrcode qrcode = new Qrcode();  
       qrcode.setQrcodeErrorCorrect('M');//纠错等级(分为L、M、H三个等级)  
       qrcode.setQrcodeEncodeMode('B');//N代表数字,A代表a-Z,B代表其它字符  
       qrcode.setQrcodeVersion(7);//版本  
       //设置一下二维码的像素  
       int width = 280;  
       int height = 280;  
       BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);  
       //绘图  
       Graphics2D gs = bufferedImage.createGraphics();  
       gs.setBackground(Color.WHITE);  
       gs.setColor(Color.BLACK);  
       gs.clearRect(0, 0, width, height);//清除下画板内容  
         
       //设置下偏移量,如果不加偏移量,有时会导致出错。  
       int pixoff = 2;  
         
       byte[] d = qrData.getBytes("UTF-8");  
       if(d.length > 0 && d.length <120){  
           boolean[][] s = qrcode.calQrcode(d);  
           for(int i=0;i<s.length;i++){  
               for(int j=0;j<s.length;j++){  
                   if(s[j][i]){  
                       gs.fillRect(j*6+pixoff+3, i*6+pixoff+3, 6, 6);  
                   }  
               }  
           }  
       }  
       Image img = ImageIO.read(new File(logoPath));  // 实例化一个Image对象。如果不需要logo 可以去掉这两行代码
       gs.drawImage(img, 105, 105, 60, 60, null);       // 105,105是距离gs两个边的距离,60,是中间logo的大小
       gs.dispose();  
       bufferedImage.flush();  
       ImageIO.write(bufferedImage, "png", new File("E:/code/"+name+".png"));
   }
   
   
   
   // 去读Excel的方法readExcel,该方法的入口参数为一个File对象  
   public List<Map<String, String>> readExcelWrite(File file) { 
   InputStream is = null;
   List<Map<String, String>> list = new ArrayList<>();
       try {  
           // 创建输入流,读取Excel  
           is = new FileInputStream(file.getAbsolutePath());  
           // jxl提供的Workbook类  
           Workbook wb = Workbook.getWorkbook(is);  
           // Excel的页签数量  
           int sheet_size = wb.getNumberOfSheets();  
           for (int index = 0; index < sheet_size; index++) {  
               // 每个页签创建一个Sheet对象  
               Sheet sheet = wb.getSheet(index);  
               // sheet.getRows()返回该页的总行数  
               //第一行为表头行,不需要读取,故从1开始,及第二行开始读取
               for (int i = 1; i < sheet.getRows(); i++) {  
                   // sheet.getColumns()返回该页的总列数  
               //列数从0开始,0位第一列,A列
                       String name = sheet.getCell(0, i).getContents();  
                       String data = sheet.getCell(1, i).getContents(); 
                       Map<String, String> map = new HashMap<>();
                       map.put("name", name);
                       map.put("data", data);
                       list.add(map);
               }  
           }  
       } catch (FileNotFoundException e) {  
           e.printStackTrace();  
       } catch (BiffException e) {  
           e.printStackTrace();  
       } catch (IOException e) {  
           e.printStackTrace();  
       } finally {  
           try {  
               // 记得关闭流  
           if (null != is) {
           is.close();  
           }
           } catch (Exception e) {  
               e.printStackTrace();  
           }  
       }  
       return list;
   }  

public static void main(String[] args) throws Exception{    File file = new File("E:/code/a1111.xls");   //读取excel并解析出返回的内容暂时不支持 xlsx格式,请自行改成xls   List<Map<String, String>> list = readExcelWrite(file);   if (null != list && list.size() > 0) {for (Map<String, String> map : list) {String name = map.get("name");String data = map.get("data");if (StringUtils.isNotEmpty(name)&& StringUtils.isNotEmpty(data)) {//调用生成二维码方法QRCode(name, data,"E:/code/20170911174614244.png");}}}   } 

jar包下载地址:点击打开链接

http://download.csdn.net/download/dejie0806/10173715

生成的二维码实例如下.



一定要注意一下,所要生成二维码图片的大小,相应的调整logo的位置.



阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 席慕容的诗歌朗诵 请柬席慕容 疑问席慕容 席慕容的作品有哪些 席慕容经典诗句 席慕容的诗新娘 席慕容 席慕蓉 无怨的青春 席慕容 席慕容窗 席慕容诗词朗诵 如果 席慕容 赏析 席慕容关于故乡的诗 席慕容诗歌朗诵 席慕容诗集经典爱情诗 席慕容青春诗歌 席慕容经典情诗12首 无怨的青春席慕容 悟席慕容 席慕容著名的诗 席慕容散文txt 青春 席慕容 赏析 生命的滋味 席慕容 席慕容过客 席慕容诗集七里香 席慕容时间 回眸 席慕容 席慕容诗集全集 席慕容的印记 慕清冷席慕深 席慕深 慕清冷席慕深全文阅读 慕清冷席慕深全文免费阅读 席慕深慕清冷全文免费 席慕深全文免费阅读 清冷月色寒席慕深 席慕思床垫 席慕野顾星辰 顾星辰席慕野目录 慕清冷席慕深免费阅读 顾星辰席慕野第30章 席慕深池嫣全文免费阅读目录