JAVA 生成二维码并写到EXCEL中导出

1、引入依赖


        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.0.0</version>
        </dependency>

        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>3.0.0</version>
        </dependency>

2、写注解类

  

@Retention(RetentionPolicy.RUNTIME)  
@Target( { java.lang.annotation.ElementType.FIELD }) 
public @interface ExcelVOAttribute {

	 /** 
     * 导出到Excel中的名字. 
     */  
    public abstract String name();  

    /** 
     * 配置列的名称,对应A,B,C,D.... 
     */  
    public abstract String column();


    public abstract String contentType()   default "";

    /** 
     * 提示信息 
     */  
    public abstract String prompt()  default "";    

    /** 
     * 设置只能选择不能输入的列内容. 
     */  
    public abstract String[] combo() default {};    

    /** 
     * 是否导出,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写. 
     */  
    public abstract boolean isExport() default true;   
    
    /** 
     * 是否应用到导入模板上
     */  
    public abstract boolean isUsedInImport() default true;   
    
    /** 
     * 是否应用到导出上
     */  
    public abstract boolean isUsedInExport() default true;



    
}

3、实体类字段加注解

...
 @TableField(exist = false)
    @ApiModelProperty("分享码链接")
    @ExcelVOAttribute(name = "二维码",column="F",contentType = "QRCODE")
    private String  fxmUrl;
...

4、EXCEL工具类(部分代码)

     // 写入各条记录,每条记录对应excel表中的一行
                for (int i = startNo; i < endNo; i++) {
                    row = sheet.createRow(i + 3 - startNo);
                    T vo = (T) list.get(i); // 得到导出对象.
                    for (int j = 0; j < fields.size(); j++) {
                        Field field = fields.get(j);// 获得field.
                        field.setAccessible(true);// 设置实体类私有属性可访问
                        ExcelVOAttribute attr = field.getAnnotation(ExcelVOAttribute.class);
                        try {
                            // 根据ExcelVOAttribute中设置情况决定是否导出,有些情况需要保持为空,希望用户填写这一列.
                            if (attr.isExport()) {
                                cell = row.createCell(ExcelFragment.getExcelCol(attr.column()));// 创建cell
                                if("QRCODE".equals(attr.contentType())){
                                    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                                    Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
                                    hints.put(EncodeHintType.MARGIN, 0);
                                    hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
                                    MatrixToImageWriter.writeToStream(
                                            new MultiFormatWriter().encode(String.valueOf(field.get(vo)), BarcodeFormat.QR_CODE, 300, 300, hints), "PNG",
                                            outputStream);
                                    row.setHeight((short) 1000);
                                    HSSFClientAnchor anchor = new HSSFClientAnchor(20, 10, 1003, 245, (short) j, i + 3 - startNo, (short) j, i + 3 - startNo);
                                    patriarch.createPicture(anchor,workbook.addPicture(outputStream.toByteArray(), XSSFWorkbook.PICTURE_TYPE_JPEG));
                                }else{
                                    // 取得类型,并根据对象类型设置值.
                                    Class<?> fieldType = field.getType();
                                    if (String.class == fieldType) {
                                        cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                                        cell.setCellValue(field.get(vo) == null ? "" : String.valueOf(field.get(vo)));// 如果数据存在就填入,不存在填入空格.
                                    } else if ((Integer.TYPE == fieldType)  || (Integer.class == fieldType)) {
                                        cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                                        cell.setCellValue(field.get(vo) == null ? 0 : Integer.parseInt(field.get(vo).toString()));
                                    } else if ((Long.TYPE == fieldType) || (Long.class == fieldType)) {
                                        cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                                        cell.setCellValue(field.get(vo) == null ? 0 : Long.parseLong(field.get(vo).toString()));
                                    } else if ((Float.TYPE == fieldType)  || (Float.class == fieldType)) {
                                        cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                                        cell.setCellValue(field.get(vo) == null ? 0 : Double.parseDouble(field.get(vo).toString()));
                                    } else if ((Short.TYPE == fieldType)   || (Short.class == fieldType)) {

                                    } else if ((Double.TYPE == fieldType)   || (Double.class == fieldType)) {
                                        cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                                        cell.setCellValue(field.get(vo) == null ? 0 : Double.parseDouble(field.get(vo).toString()));
                                    } else if (Character.TYPE == fieldType) {

                                    }
                                }
                            }
                        } catch (IllegalArgumentException e) {
                            e.printStackTrace();
                        } catch (IllegalAccessException e) {
                            e.printStackTrace();
                        }
                    }
                }

 5、调用

 MyExcelUtils<CrmWxUserInfo> myExcelUtils=new MyExcelUtils(CrmWxUserInfo.class);
        JsonResult jsonResult= myExcelUtils.exportExcel("wxuser-"+term.getType()+"-"+term.getId(), list, typestr+"列表");

 

最后成果:

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生成二维码并将其保存到数据库,您可以使用以下步骤: 1. 导入相关的Java库:您可以使用ZXing库来生成二维码。请确保已将其添加到您的Java项目。 2. 生成二维码:使用ZXing库的QRCodeWriter类,您可以创建一个QRCode对象,该对象可以转换为图片格式并保存到本地。 3. 将二维码图片转换为字节数组:使用ImageIO类将二维码图片转换为字节数组。 4. 将字节数组保存到数据库:使用JDBC连接到您的数据库,并使用PreparedStatement类将字节数组保存到数据库。 以下是一些示例代码来演示这些步骤: ```java import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Base64; import javax.imageio.ImageIO; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; public class QRCodeGenerator { public static void main(String[] args) throws SQLException { String data = "Hello, world!"; // 数据内容 int size = 300; // 生成二维码图片大小 String format = "png"; // 二维码图片格式 byte[] imageBytes = null; // 生成二维码 QRCodeWriter writer = new QRCodeWriter(); BitMatrix matrix; try { matrix = writer.encode(data, com.google.zxing.BarcodeFormat.QR_CODE, size, size); BufferedImage image = new BufferedImage(size, size, BufferedImage.TYPE_INT_RGB); for (int x = 0; x < size; x++) { for (int y = 0; y < size; y++) { image.setRGB(x, y, matrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF); } } ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(image, format, baos); imageBytes = baos.toByteArray(); } catch (WriterException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } // 将字节数组保存到数据库 Connection conn = null; // 假设您已连接到数据库 PreparedStatement ps = conn.prepareStatement("INSERT INTO qr_codes (data) VALUES (?)"); ps.setBytes(1, imageBytes); ps.executeUpdate(); } } ``` 在这个示例,我们生成一个包含字符串“Hello, world!”的二维码,将其转换为PNG格式的图片,将图片字节数组保存到名为“qr_codes”的数据库表。请注意,此示例仅用于演示目的,您需要根据您的具体需求进行适当的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值