JXLS模板快速导出(附带导出条形码)

JXLS快速简单便捷导出

jxls官网:http://jxls.sourceforge.net

实现步骤:

  1. 引入相关依赖
  2. 创建模板
  3. 创建数据模型导出

一、依赖

		//JXLS导出用依赖
        <dependency>
            <groupId>org.jxls</groupId>
            <artifactId>jxls</artifactId>
            <version>2.10.0</version>
        </dependency>
        <dependency>
            <groupId>org.jxls</groupId>
            <artifactId>jxls-poi</artifactId>
            <version>2.10.0</version>
        </dependency>
        <dependency>
            <groupId>org.jxls</groupId>
            <artifactId>jxls-jexcel</artifactId>
            <version>1.0.9</version>
        </dependency>
        
        //生成条形码依赖
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.13</version>
        </dependency>

二、模板

在这里插入图片描述

三、导出代码

代码中仅有大致实现方法,主要是组装个Map,和生成一个条形码图片流导出

    @ApiOperation(value = "导出入库订单相关信息")
    @GetMapping(value = "/exportInOrder/{key}")
    public void exportInOrder(@PathVariable String key, HttpServletResponse response, HttpServletRequest request) {
    	
    	//====================我本地使用的查询方法========================
        OrderDto order = orderSearchService.queryExportOrderByKey(key);
        //根据 订单编号生成条形码
        String orderNo = order.getOrderNo();
        //=============================================================

        //组装数据
        Map<String,Object> map = new HashMap();
        map.put("record",order.getDetailDtoList());
        map.put("orgName","测试单位");
        map.put("num",20);
        map.put("sum",20);
        map.put("sumPrice",20);
        map.put("orderNo","SO340603000022060125");
        map.put("goodsType","非免疫规划疫苗");
        map.put("dateTime",DateFormatUtils.format(new Date(), "yyyy-MM-dd"));
        map.put("userName","大亮啊");
        map.put("customerName","测试单位收货");
        try {
            //获取模板
            ClassPathResource classPathResource = new ClassPathResource("excel/exportInTemplate.xls");
            InputStream inputStream = classPathResource.getInputStream();
            
            //生成条形码图片
            byte[] bytes = code128(orderNo,300, 120, 40, 24);
            map.put("img",bytes);
			
			//创建文件名
            String fileName = orgName + "入库单-" +new Date().getTime();
            String filenameEncoder = URLEncoder.encode(fileName, "utf-8");
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-disposition", "attachment;filename=" + filenameEncoder + ".xlsx");
            ServletOutputStream outputStream = response.getOutputStream();

            Context context = new Context();
            context.putVar("data",map);
            
            //导出操作
            JxlsHelper.getInstance().processTemplate(inputStream,outputStream,context);
            outputStream.close();
            inputStream.close();
            LOGGER.info("导出成功");
        } catch (IOException e) {
            e.printStackTrace();
            LOGGER.error("导出失败",e);
        }
    }

    /**
     * 生成条形码
     */
    public byte[] code128(String barCodeInfo, int barCodeWidth, int barCodeHeight, int heightSpace, int fontSize) throws IOException {
        int imageWidth = barCodeWidth;
        int imageHeight = barCodeHeight + heightSpace;

        BufferedImage img = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = (Graphics2D) img.getGraphics();

        g.fillRect(0, 0, imageWidth, imageHeight);
        Font font = new Font("", Font.PLAIN, fontSize);
        Barcode128 barcode128 = new Barcode128();
        FontRenderContext fontRenderContext = g.getFontRenderContext();

        int startX = 0;
        int imageStartY = 0;
        int stringStartY = imageHeight - 8;
        int codeWidth = (int) font.getStringBounds(barCodeInfo, fontRenderContext).getWidth();
        barcode128.setCode(barCodeInfo);
        Image codeImg = barcode128.createAwtImage(java.awt.Color.black, java.awt.Color.white);

        g.drawImage(codeImg, startX, imageStartY, barCodeWidth, barCodeHeight, java.awt.Color.white, null);
        AttributedString ats = new AttributedString(barCodeInfo);
        ats.addAttribute(TextAttribute.FONT, font, 0, barCodeInfo.length());
        AttributedCharacterIterator iter = ats.getIterator();

        g.setColor(Color.BLACK);
        g.drawString(iter, startX + (barCodeWidth - codeWidth) / 2, stringStartY);
        g.dispose();
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        ImageIO.write(img, "png", os);
        return os.toByteArray();

    }

四、完美收工

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值