java自画快递单,使用画图功能绘制快递单,并调用打印机打印

快递单展示

标题

不bb,上代码

    public static BufferedImage image;
    //图片的宽度
    public static final int IMG_WIDTH = 760;
    //图片的高度
    public static final int IMG_HEIGHT = 1300;
    //LOGO的宽度
    public static final int LOGO_WIDTH = 310;
    //LOGO高度
    public static final int LOGO_HEIGHT = 80;

    /**
     * 插入图片 自定义图片的宽高
     * @param imgPath
     *             插入图片的路径
     * @param imgWidth
     *             设置图片的宽度
     * @param imgHeight
     *             设置图片的高度
     * @param isCompress
     *             是否按输入的宽高定义图片的尺寸,只有为true时 输入的宽度和高度才起作用<br/>
     *             为false时输入的宽高不起作用,按输入图片的默认尺寸
     * @return
     * @throws Exception
     * */
    private static Image insertImage(String imgPath, int imgWidth, int imgHeight, boolean isCompress) throws Exception {
        System.out.println(imgPath);
        File fileimage = new File(imgPath);
        Image src = ImageIO.read(fileimage);
        if (isCompress) {
            Image image = src.getScaledInstance(imgWidth, imgHeight, Image.SCALE_SMOOTH);
            return image;
        }
        return src;
    }

    /**
     * 根据规定尺寸压缩图片
     * @param imgPath 图片路径
     * @param width 图片宽度
     * @param height 图片高度
     * */
    private static void compressImg(String imgPath, int width, int height){
        /**
         * 设置条码图片的尺寸
         * */
        BufferedInputStream bis = null;
        BufferedOutputStream out = null;
        FileOutputStream fis = null;
        try {
            File sfFile = new File(imgPath);
            if (sfFile.isFile() && sfFile.exists()) {
                //读取图片
                bis = new BufferedInputStream(new FileInputStream(imgPath));
                //转换成图片对象
                Image bi = ImageIO.read(bis).getScaledInstance(width, height, Image.SCALE_SMOOTH);
                //构建图片流 设置图片宽和高
                BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
                //绘制改变尺寸后的图
                tag.getGraphics().drawImage(bi, 0, 0,width, height, null);
                //保存图片
                fis = new FileOutputStream(imgPath);
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fis);
                JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);
                //设置压缩图片质量
                jep.setQuality(3f, true);
                encoder.encode(tag, jep);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (fis != null) fis.close();
                if (out != null) out.close();
                if (bis != null) bis.close();
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }

    /**
     * 打印文件
     * @param file  文件路径
     * @throws PrintException
     */
    public static HttpJsonResult<Boolean> JPGPrint(File file) throws PrintException {

        HttpJsonResult<Boolean> jsonResult = null;
        if (file == null) {
            jsonResult = new HttpJsonResult<Boolean>("缺少打印文件路径!");
            return jsonResult;
        }
        InputStream fis = null;
        try {
            // 设置打印格式,如果未确定类型,可选择autosense
            DocFlavor flavor = DocFlavor.INPUT_STREAM.JPEG;
            // 设置打印参数
            PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
//            aset.add(MediaSize.ISO.B7); //纸张
            // aset.add(Finishings.STAPLE);//装订
//            aset.add(Sides.DUPLEX);//单双面
            // 定位打印服务
//            PrintService printService = PrintServiceLookup.lookupDefaultPrintService();//定位默认的打印服务

            //查找所有的可用打印服务
            PrintService print[] = PrintServiceLookup.lookupPrintServices(flavor, aset);
            PrintService printService = null;
            if (print.length > 0){
                for (PrintService printService1 : print){
                    System.out.println(printService1.getName());
                    if ("ZDesigner GT800 (EPL)".equals(printService1.getName())){
                        System.out.print( "---------------------》使用打印机名:");
                        printService = printService1;
                        System.out.println(printService1.getName() + "---------------------》");
                    }
                }
            }else {
                System.out.println("《---------------------- 未找到打印机 --------------------》");
            }

            aset.add(new Copies(1)); //份数
            aset.add(new MediaPrintableArea(0, 0, 76,130, MediaPrintableArea.MM));

            if (printService == null){
                jsonResult = new HttpJsonResult<Boolean>("未找到默认打印机!");
                return jsonResult;
            }
            fis = new FileInputStream(file); // 构造待打印的文件流
            Doc doc = new SimpleDoc(fis, flavor, null);
            DocPrintJob job = printService.createPrintJob(); // 创建打印作业
            job.print(doc, aset);
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        } finally {
            // 关闭打印的文件流
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return jsonResult;
    }

    /**
     * 生成物流图片
     * @param fileLocation  文件保存路径
     */
    public static void createImage(String fileLocation) {
        FileOutputStream fos = null;
        BufferedOutputStream bos = null;
        try {
            fos = new FileOutputStream(fileLocation);
            bos = new BufferedOutputStream(fos);
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
            encoder.encode(image);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (bos != null) bos.close();
                if (fos != null) fos.close();
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }

    /**
     * 打印快递单
     * 流程:
     *      id == 0 : 代表是从发货按钮来的,会携带打印订单所需的数据;
     *      id != 0 : 代表是从打印快递单来的,不会携带打印订单所需的数据,需要查询;
     * @param request
     * @param id
     * @return
     */
    @RequestMapping(value = "printcourier", method = {RequestMethod.GET,RequestMethod.POST})
    public HttpJsonResult<Boolean> printCourier(HttpServletRequest request, Integer id,Map<String, Object> dataMap) {

        HttpJsonResult<Boolean> jsonResult = null;
        if (id == 0){   //id==0;代表是从发货来的,数据会携带,无需重新查询!

            //查询出当前订单信息
            Integer orderId = (Integer) dataMap.get("orderId");
            Orders orders = (Orders) dataMap.get("orders");
            //中通返回的数据
            ZtoReturnResult ztoReturnResult = (ZtoReturnResult) dataMap.get("ztoReturnResult");
            //收货人信息
            ReceiveInfo receiveInfo = (ReceiveInfo) dataMap.get("receiveInfo");
            //验证数据是否齐全
            if (receiveInfo.getReceiverProvince().equals("") || receiveInfo.getReceiverCity().equals("") || receiveInfo.getReceiverDistrict().equals("") ||
                    ztoReturnResult == null) {
                jsonResult = new HttpJsonResult<Boolean>("错误!订单号 "+orders.getOrderSn()+" 信息不足,打印快递单失败,请注意!");
                return jsonResult;
            }

            //获取订单商品信息
            ServiceResult<List<OrdersProduct>> oId = ordersProductService.getOrdersProductByOId(orderId);
            List<OrdersProduct> list = oId.getResult();

            //将查询出来的商品统计好数量,有一样的商品就将当前商品数量加1
            List<OrdersProduct> lists = new ArrayList<>();  //保存统计好商品的集合
            for ( OrdersProduct ls : list ){    //循环
                if ( lists.size() == 0 ){   //如果当前lists集合为空,直接将当前商品保存到lists集合中
                    lists.add(ls);  //保存
                }else {
                    for (int i = 0; i <= lists.size(); i++) {   //使用有下标的循环,判断当前集合是否遍历完
                        if ( lists.get(i).getProductName().equals(ls.getProductName()) ) {  //当当前商品名字跟当前遍历商品名字一样
                            lists.get(i).setNumber(lists.get(i).getNumber() + 1); //得到当前商品数量,将当前商品数量加1
                            break;  //中断当前循环
                        }
                        if ( lists.size() == (i+1) ) {  //如果当前集合遍历到最后一条,没有找到相同的商品,说明当前商品跟现有的商品不一样
                            lists.add(ls);  //保存当前商品数据
                            break;  //中断当前循环
                        }
                    }
                }
            }

            /*
                开始画快递单
             */
            int startHeight = 0;  //表格的起始高度
            int startWidth = 0;   //表格的起始宽度
            try {
                //创建图形
                image = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, BufferedImage.TYPE_INT_RGB);
                Graphics2D g = image.createGraphics();  //创建画板

                //设置背景色为白色
                g.setColor(Color.WHITE);
                //设置颜色区域大小
                g.fillRect(0, 0, IMG_WIDTH, IMG_HEIGHT);

                /*
                 * 绘制表格 填充内容
                 * */
                //表格线条的颜色
                g.setColor(Color.BLACK);
                //边框加粗
                g.setStroke(new BasicStroke(2.0f));
                //消除文本出现锯齿现象
                g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                //表格的四个边框
//                g.drawLine(startWidth, startHeight, startWidth + 750, startHeight); //上边框
//                g.drawLine(startWidth, startHeight, startWidth, startHeight + 1300); //左边框
//                g.drawLine(startWidth, startHeight + 1298, startWidth + 750, startHeight + 1298); //下边框
//                g.drawLine(startWidth + 748, startHeight, startWidth + 748, startHeight + 1300); //右边框

                //绘制表格内容 第一行
                g.drawLine(startWidth, startHeight + 155, startWidth + 750, startHeight + 155);

                //获取相对路径    /home/tomcat/webapps/business/\resources\admin\img\logo.png
                String saveFilePath = request.getServletContext().getRealPath("/");
                saveFilePath= URLDecoder.decode(saveFilePath,"utf-8");   //这样就能解决掉那个空格的问题了。
                //快递公司logo
//                mage logoImg = insertImage(saveFilePath+"resources\\admin\\img\\logo.png", LOGO_WIDTH, LOGO_HEIGHT, true);   //测试环境使用如果有问题使用上面的
                Image logoImg = insertImage(saveFilePath+"resources/admin/img/logo.png", LOGO_WIDTH, LOGO_HEIGHT, true);    //上线。暂时斜杠相反没有问题,测试环境使用如果有问题使用上面的
                g.drawImage(logoImg, startWidth + 20, startHeight, null);

                //普通订单
                Font fontSfTyp = new Font("微软雅黑", Font.BOLD, 70);
                g.setFont(fontSfTyp);
                g.drawString("普通订单", startWidth + 445, startHeight + 100);

                //绘制第二行
                g.drawLine(startWidth, startHeight + 396, startWidth + 750, startHeight + 396);

                //将运单编号传递过去,生成条形码
                JbarCode.createBarcode(ztoReturnResult.getBillCode(), new File(saveFilePath+"/resources/admin/img/jbarcode/jbarcode.jpg"),"");
                //生成code128c 条码
//                SFBarCodeGenerateUtil.generateBarCode("123456789",          //运单号
//                        picPath + "SFBarCoding_" + orderParam.getMailNo() + ".jpg",           //图片名称
//                        600,                                   //图片宽度
//                        120,                                   //图片高度
//                        SFBarCodeGenerateUtil.PICTURE_JPG);
                //导入条码图片
                Image sfBarImg = insertImage(saveFilePath+"resources/admin/img/jbarcode/jbarcode.jpg", 600, 120, true);
                g.drawImage(sfBarImg, startWidth + 80, startHeight + 191, null);

                //设置字体
                Font fontSfBarCode = new Font("黑体",Font.BOLD,35);
                g.setFont(fontSfBarCode);

//                String sfBarCodeStr = "888888888888";
//                sfBarCodeStr = ztoReturnResult.getBillCode().replaceAll("(.{3})", "$1 ");
                //生成快递单号等信息
                g.drawString("快递单号  " + ztoReturnResult.getBillCode().replaceAll("(.{4})", "$1 "), startWidth + 120, startHeight + 355);

                //目的地栏的绘制
                g.drawLine(startWidth, startHeight + 563, startWidth + 750, startHeight + 563);
                g.drawLine(startWidth + 80, startHeight + 396, startWidth + 80, startHeight + 563);

                //目的地填写
                Font fontDest = new Font("黑体", Font.BOLD, 30);
                g.setFont(fontDest);
                //目的地标题
                String destTitleStr = "集包地";
                char[] destTitleArray = destTitleStr.toCharArray();
                int destTitleWidth = startWidth + 40;
                int destTitleHeight = startHeight + 460;
                for (int i = 0; i < destTitleStr.length(); i++) {
                    g.drawString(String.valueOf(destTitleArray[i]), destTitleWidth, destTitleHeight);
                    destTitleHeight += 33;
                }

                //目的地代码字符串
                String bagAddr = ztoReturnResult.getBagAddr() == null ? "" : ztoReturnResult.getBagAddr();
                if (bagAddr.length() > 4 && bagAddr.length() < 8){
                    //目的地代码
                    Font fontDestCode = new Font("微软雅黑", Font.BOLD, 80);
                    g.setFont(fontDestCode);
                    g.drawString(bagAddr, startWidth + 90, startHeight + 530);
                }else if (bagAddr.length() > 8){
                    Font fontDestCode = new Font("微软雅黑", Font.BOLD, 50);
                    g.setFont(fontDestCode);
                    g.drawString(bagAddr.substring(0, 12), startWidth + 90, startHeight + 475);
                    g.drawString(bagAddr.substring(12, bagAddr.length()), startWidth + 90, startHeight + 530);
                }else {
                    //目的地代码
                    Font fontDestCode = new Font("微软雅黑", Font.BOLD, 130);
                    g.setFont(fontDestCode);
                    g.drawString(bagAddr, startWidth + 90, startHeight + 530);
                }

                //收件人表格栏
                g.drawLine(startWidth, startHeight + 720, startWidth + 750, startHeight + 720);
                g.drawLine(startWidth + 80, startHeight + 563, startWidth + 80, startHeight + 720);

                //设置收件人标题字体
                Font fontRevicer = new Font("黑体", Font.BOLD, 25);
                g.setFont(fontRevicer);
                //收件人标题字符串
                String revicerTitleStr = "收件人";
                char[] revicerTitleArray = revicerTitleStr.toCharArray();
                int revicerTitleWidth = startWidth + 40;
                int revicerTitleHeight = startHeight + 620;
                for (int i = 0; i < revicerTitleStr.length(); i++) {
                    g.drawString(String.valueOf(revicerTitleArray[i]), revicerTitleWidth, revicerTitleHeight);
                    revicerTitleHeight += 31;
                }

                /*
                 * 收件人详细信息
                 * */
                String revicerInfo = receiveInfo.getReceiverName() +" "+receiveInfo.getReceiverMobile();    //姓名+手机号
                String dAddress = receiveInfo.getReceiverProvince() + receiveInfo.getReceiverCity() +
                        receiveInfo.getReceiverDistrict() +" "+ receiveInfo.getReceiverAddress();   //省市区+详细地址

                //设置收件人信息字体
                Font fontRevicerInfo = new Font("黑体", Font.BOLD, 35);
                g.setFont(fontRevicerInfo);
                g.drawString(revicerInfo, startWidth + 90, startHeight + 610);
                //设置收件人详细地址字体
                Font fontReviceAddress = new Font("黑体", Font.BOLD, 40);
                g.setFont(fontReviceAddress);
                if (dAddress.length() > 16) {
                    g.drawString(dAddress.substring(0, 16), startWidth + 90, startHeight + 655);
                    g.drawString(dAddress.substring(16, dAddress.length()), startWidth + 90, startHeight + 700);
                } else {
                    g.drawString(dAddress, startWidth + 90, startHeight + 655);
                }

                //绘制寄件人表格
                g.drawLine(startWidth, startHeight + 828, startWidth + 750, startHeight +828);
                g.drawLine(startWidth + 80, startHeight + 720, startWidth + 80, startHeight + 828);

                //设置寄件人标题字体
                Font fontSender = new Font("黑体", Font.BOLD, 25);
                g.setFont(fontSender);
                //寄件人标题字符串
                String senderTitleStr = "寄件人";
                char[] senderTitleArray = senderTitleStr.toCharArray();
                int senderTitleWidth = startWidth + 40;
                int senderTitleHeight = startHeight + 752;
                for (int i = 0; i < senderTitleStr.length(); i++) {
                    g.drawString(String.valueOf(senderTitleArray[i]), senderTitleWidth, senderTitleHeight);
                    senderTitleHeight += 27;
                }


                /*
                 * 寄件人信息
                 * **/
                String senderInfo = SENDER_NAME + " " + SENDER_MOBILE;  //姓名+电话号码
                String jAddress = SENDER_PROVINCE + SENDER_CITY + SENDER_DISTRICT +" "+ SENDER_ADDRESS;     //省市区+详细地址

                //设置寄件人信息字体
                Font fontSenderInfo = new Font("黑体", Font.PLAIN, 30);
                g.setFont(fontSenderInfo);
                g.drawString(senderInfo, startWidth + 90, startHeight + 752);

                //设置寄件人详细地址字体
                Font fontSenderAddress = new Font("黑体", Font.PLAIN, 30);
                g.setFont(fontSenderAddress);
                if (jAddress.length() > 22) {
                    g.drawString(jAddress.substring(0, 22), startWidth + 90, startHeight + 785);
                    g.drawString(jAddress.substring(22, jAddress.length()), startWidth + 90, startHeight + 817);
                } else {
                    g.drawString(jAddress, startWidth + 90, startHeight + 785);
                }

                //快递详细信息
                Font cellFont = new Font("黑体", Font.PLAIN, 30);
                g.setFont(cellFont);
                int cellLineHeight = startHeight + 870;
                for (int i = 0; i < lists.size(); i++) {
                    if (i == 0){
                        DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        g.drawString("下单时间: "+sdf.format(orders.getPayTime()), startWidth + 30, cellLineHeight);
                        cellLineHeight += 50;
                    }
                    g.drawString("产品名称: "+lists.get(i).getProductName()+" "+lists.get(i).getSpecInfo()+" "+lists.get(i).getNumber(), startWidth + 30, cellLineHeight);
                    cellLineHeight += 50;
                }

                g.drawLine(startWidth, startHeight + 1080, startWidth + 750, startHeight + 1080);
                //  尊敬的客户,本次服务使用中通官网(www.zto.com)公示的快递服务协议条款。您对此单的签收代表您已收到快件且完好无损。
                //  全国统一客服热线:95311
                Font fontLogisticsIntroduction = new Font("黑体", Font.PLAIN, 30);
                g.setFont(fontLogisticsIntroduction);
                String StrLogisticsIntroduction = "尊敬的客户,本次服务使用中通官网(www.zto.com)公示的快递服务协议条款。您对此单的签收代表您已收到快件且完好无损。";
                if (StrLogisticsIntroduction.length() > 23) {
                    g.drawString(StrLogisticsIntroduction.substring(0, 23), startWidth + 90, startHeight + 1130);
                    g.drawString(StrLogisticsIntroduction.substring(23, 50), startWidth + 20, startHeight + 1175);
                    g.drawString(StrLogisticsIntroduction.substring(50, StrLogisticsIntroduction.length()), startWidth + 20, startHeight + 1220);
                } else {
                    g.drawString(StrLogisticsIntroduction, startWidth + 90, startHeight + 1130);
                }

                Font subOrderFont = new Font("黑体", Font.BOLD, 30);
                g.setFont(subOrderFont);
                g.drawString("全国统一客服热线:95311", startWidth + 350, startHeight + 1270);

                g.dispose();
                File sfbarFile = new File(saveFilePath+"resources/admin/img/jbarcode/jbarcode.jpg");
                if (sfbarFile.exists() && sfbarFile.isFile()) {
                    sfbarFile.delete();
                }
                //生成订单图片
                createImage(saveFilePath+"resources/admin/img/jbarcode/jbarcode.jpg");   //生成图片
                compressImg(saveFilePath+"resources/admin/img/jbarcode/jbarcode.jpg", 760, 1300);     //以设置的宽高设计图片

                System.out.println("订单生成成功. " + saveFilePath+"resources/admin/img/jbarcode/jbarcode.jpg");

                File file = new File(saveFilePath+"resources/admin/img/jbarcode/jbarcode.jpg");   //打印文件路径
//                String printerName = "ZDesigner GT800 (EPL)";//打印机名包含字串
                HttpJsonResult<Boolean> print = JPGPrint(file);
                if (print != null){
                    return print;
                }
                jsonResult=print;
            } catch (Exception e) {
                e.printStackTrace();
            }

        }else {
            //查询出当前订单信息
            Orders orders = orderService.getOrderWithOPById(id).getResult();

            //中通返回的数据
            ServiceResult<ZtoReturnResult> zto = ztoReturnResultService.getPartnerOrderCode(orders.getOrderSn());
            ZtoReturnResult ztoReturnResult = zto.getResult();

            //收货人信息
            //根据省市区id获取省市区
            String provinceName = resionsService.getRegionsById(orders.getProvinceId()).getResult().getRegionName();
            String cityName = resionsService.getRegionsById(orders.getCityId()).getResult().getRegionName();
            String areaName = resionsService.getRegionsById(orders.getAreaId()).getResult().getRegionName();
            ReceiveInfo receiveInfo = new ReceiveInfo();
            receiveInfo.setReceiverMobile(orders.getMobile());//收件人手机号
            receiveInfo.setReceiverName(orders.getName());//收件人姓名
            receiveInfo.setReceiverProvince(provinceName + "省");//收件人省
            receiveInfo.setReceiverCity(cityName + "市");//收件人市
            receiveInfo.setReceiverDistrict(areaName);//收件人区
            receiveInfo.setReceiverAddress(orders.getAddressInfo());//收件人详细地址

            //获取订单商品信息
            ServiceResult<List<OrdersProduct>> oId = ordersProductService.getOrdersProductByOId(id);
            List<OrdersProduct> list = oId.getResult();

            //验证数据是否齐全
            if (receiveInfo.getReceiverProvince().equals("") || receiveInfo.getReceiverCity().equals("") || receiveInfo.getReceiverDistrict().equals("") ||
                    orders.getLogisticsNumber().equals("") || list == null || ztoReturnResult == null) {
                jsonResult = new HttpJsonResult<Boolean>("错误!订单号 "+orders.getOrderSn()+" 信息不足,打印快递单失败,请注意!发货已中断");
                return jsonResult;
            }

            //将查询出来的商品统计好数量,有一样的商品就将当前商品数量加1
            List<OrdersProduct> lists = new ArrayList<>();  //保存统计好商品的集合
            for ( OrdersProduct ls : list ){    //循环
                if ( lists.size() == 0 ){   //如果当前lists集合为空,直接将当前商品保存到lists集合中
                    lists.add(ls);  //保存
                }else {
                    for (int i = 0; i <= lists.size(); i++) {   //使用有下标的循环,判断当前集合是否遍历完
                        if ( lists.get(i).getProductName().equals(ls.getProductName()) ) {  //当当前商品名字跟当前遍历商品名字一样
                            lists.get(i).setNumber(lists.get(i).getNumber() + 1); //得到当前商品数量,将当前商品数量加1
                            break;  //中断当前循环
                        }
                        if ( lists.size() == (i+1) ) {  //如果当前集合遍历到最后一条,没有找到相同的商品,说明当前商品跟现有的商品不一样
                            lists.add(ls);  //保存当前商品数据
                            break;  //中断当前循环
                        }
                    }
                }
            }

/*
                开始画快递单
             */
            int startHeight = 0;  //表格的起始高度
            int startWidth = 0;   //表格的起始宽度
            try {
                //创建图形
                image = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, BufferedImage.TYPE_INT_RGB);
                Graphics2D g = image.createGraphics();  //创建画板

                //设置背景色为白色
                g.setColor(Color.WHITE);
                //设置颜色区域大小
                g.fillRect(0, 0, IMG_WIDTH, IMG_HEIGHT);

                /*
                 * 绘制表格 填充内容
                 * */
                //表格线条的颜色
                g.setColor(Color.BLACK);
                //边框加粗
                g.setStroke(new BasicStroke(2.0f));
                //消除文本出现锯齿现象
                g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                //表格的四个边框
//                g.drawLine(startWidth, startHeight, startWidth + 750, startHeight); //上边框
//                g.drawLine(startWidth, startHeight, startWidth, startHeight + 1300); //左边框
//                g.drawLine(startWidth, startHeight + 1298, startWidth + 750, startHeight + 1298); //下边框
//                g.drawLine(startWidth + 748, startHeight, startWidth + 748, startHeight + 1300); //右边框

                //绘制表格内容 第一行
                g.drawLine(startWidth, startHeight + 155, startWidth + 750, startHeight + 155);

                //获取相对路径
                String saveFilePath = request.getServletContext().getRealPath("/");
                saveFilePath= URLDecoder.decode(saveFilePath,"utf-8");   //这样就能解决掉那个空格的问题了。
                //快递公司logo
//                Image logoImg = insertImage(saveFilePath+"resources\\admin\\img\\logo.png", LOGO_WIDTH, LOGO_HEIGHT, true);   //测试环境
                Image logoImg = insertImage(saveFilePath+"resources/admin/img/logo.png", LOGO_WIDTH, LOGO_HEIGHT, true);    //上线。暂时斜杠相反没有问题,测试环境使用如果有问题使用上面的
                g.drawImage(logoImg, startWidth + 20, startHeight, null);

                //普通订单
                Font fontSfTyp = new Font("微软雅黑", Font.BOLD, 70);
                g.setFont(fontSfTyp);
                g.drawString("普通订单", startWidth + 445, startHeight + 100);

                //绘制第二行
                g.drawLine(startWidth, startHeight + 396, startWidth + 750, startHeight + 396);

                //将运单编号传递过去,生成条形码
                JbarCode.createBarcode(ztoReturnResult.getBillCode(), new File(saveFilePath+"resources/admin/img/jbarcode/jbarcode.jpg"),"");
                //生成code128c 条码
//                SFBarCodeGenerateUtil.generateBarCode("123456789",          //运单号
//                        picPath + "SFBarCoding_" + orderParam.getMailNo() + ".jpg",           //图片名称
//                        600,                                   //图片宽度
//                        120,                                   //图片高度
//                        SFBarCodeGenerateUtil.PICTURE_JPG);
                //导入条码图片
                Image sfBarImg = insertImage(saveFilePath+"resources/admin/img/jbarcode/jbarcode.jpg", 600, 120, true);
                g.drawImage(sfBarImg, startWidth + 80, startHeight + 191, null);

                //设置字体
                Font fontSfBarCode = new Font("黑体",Font.BOLD,35);
                g.setFont(fontSfBarCode);

//                String sfBarCodeStr = "888888888888";
//                sfBarCodeStr = ztoReturnResult.getBillCode().replaceAll("(.{3})", "$1 ");
                //生成快递单号等信息
                g.drawString("快递单号  " + ztoReturnResult.getBillCode().replaceAll("(.{4})", "$1 "), startWidth + 120, startHeight + 355);

                //目的地栏的绘制
                g.drawLine(startWidth, startHeight + 563, startWidth + 750, startHeight + 563);
                g.drawLine(startWidth + 80, startHeight + 396, startWidth + 80, startHeight + 563);

                //目的地填写
                Font fontDest = new Font("黑体", Font.BOLD, 30);
                g.setFont(fontDest);
                //目的地标题
                String destTitleStr = "集包地";
                char[] destTitleArray = destTitleStr.toCharArray();
                int destTitleWidth = startWidth + 40;
                int destTitleHeight = startHeight + 460;
                for (int i = 0; i < destTitleStr.length(); i++) {
                    g.drawString(String.valueOf(destTitleArray[i]), destTitleWidth, destTitleHeight);
                    destTitleHeight += 33;
                }

                //目的地代码字符串
                String bagAddr = ztoReturnResult.getBagAddr() == null ? "" : ztoReturnResult.getBagAddr();
                if (bagAddr.length() > 4 && bagAddr.length() < 8){
                    //目的地代码
                    Font fontDestCode = new Font("微软雅黑", Font.BOLD, 80);
                    g.setFont(fontDestCode);
                    g.drawString(bagAddr, startWidth + 90, startHeight + 530);
                }else if (bagAddr.length() > 8){
                    Font fontDestCode = new Font("微软雅黑", Font.BOLD, 50);
                    g.setFont(fontDestCode);
                    g.drawString(bagAddr.substring(0, 12), startWidth + 90, startHeight + 475);
                    g.drawString(bagAddr.substring(12, bagAddr.length()), startWidth + 90, startHeight + 530);
                }else {
                    //目的地代码
                    Font fontDestCode = new Font("微软雅黑", Font.BOLD, 130);
                    g.setFont(fontDestCode);
                    g.drawString(bagAddr, startWidth + 90, startHeight + 530);
                }

                //收件人表格栏
                g.drawLine(startWidth, startHeight + 720, startWidth + 750, startHeight + 720);
                g.drawLine(startWidth + 80, startHeight + 563, startWidth + 80, startHeight + 720);

                //设置收件人标题字体
                Font fontRevicer = new Font("黑体", Font.BOLD, 25);
                g.setFont(fontRevicer);
                //收件人标题字符串
                String revicerTitleStr = "收件人";
                char[] revicerTitleArray = revicerTitleStr.toCharArray();
                int revicerTitleWidth = startWidth + 40;
                int revicerTitleHeight = startHeight + 620;
                for (int i = 0; i < revicerTitleStr.length(); i++) {
                    g.drawString(String.valueOf(revicerTitleArray[i]), revicerTitleWidth, revicerTitleHeight);
                    revicerTitleHeight += 31;
                }

                /*
                 * 收件人详细信息
                 * */
                String revicerInfo = receiveInfo.getReceiverName() +" "+receiveInfo.getReceiverMobile();    //姓名+手机号
                String dAddress = receiveInfo.getReceiverProvince() + receiveInfo.getReceiverCity() +
                        receiveInfo.getReceiverDistrict() +" "+ receiveInfo.getReceiverAddress();   //省市区+详细地址

                //设置收件人信息字体
                Font fontRevicerInfo = new Font("黑体", Font.BOLD, 35);
                g.setFont(fontRevicerInfo);
                g.drawString(revicerInfo, startWidth + 90, startHeight + 610);
                //设置收件人详细地址字体
                Font fontReviceAddress = new Font("黑体", Font.BOLD, 40);
                g.setFont(fontReviceAddress);
                if (dAddress.length() > 16) {
                    g.drawString(dAddress.substring(0, 16), startWidth + 90, startHeight + 655);
                    g.drawString(dAddress.substring(16, dAddress.length()), startWidth + 90, startHeight + 700);
                } else {
                    g.drawString(dAddress, startWidth + 90, startHeight + 655);
                }

                //绘制寄件人表格
                g.drawLine(startWidth, startHeight + 828, startWidth + 750, startHeight +828);
                g.drawLine(startWidth + 80, startHeight + 720, startWidth + 80, startHeight + 828);

                //设置寄件人标题字体
                Font fontSender = new Font("黑体", Font.BOLD, 25);
                g.setFont(fontSender);
                //寄件人标题字符串
                String senderTitleStr = "寄件人";
                char[] senderTitleArray = senderTitleStr.toCharArray();
                int senderTitleWidth = startWidth + 40;
                int senderTitleHeight = startHeight + 752;
                for (int i = 0; i < senderTitleStr.length(); i++) {
                    g.drawString(String.valueOf(senderTitleArray[i]), senderTitleWidth, senderTitleHeight);
                    senderTitleHeight += 27;
                }


                /*
                 * 寄件人信息
                 * **/
                String senderInfo = SENDER_NAME + " " + SENDER_MOBILE;  //姓名+电话号码
                String jAddress = SENDER_PROVINCE + SENDER_CITY + SENDER_DISTRICT +" "+ SENDER_ADDRESS;     //省市区+详细地址

                //设置寄件人信息字体
                Font fontSenderInfo = new Font("黑体", Font.PLAIN, 30);
                g.setFont(fontSenderInfo);
                g.drawString(senderInfo, startWidth + 90, startHeight + 752);

                //设置寄件人详细地址字体
                Font fontSenderAddress = new Font("黑体", Font.PLAIN, 30);
                g.setFont(fontSenderAddress);
                if (jAddress.length() > 22) {
                    g.drawString(jAddress.substring(0, 22), startWidth + 90, startHeight + 785);
                    g.drawString(jAddress.substring(22, jAddress.length()), startWidth + 90, startHeight + 817);
                } else {
                    g.drawString(jAddress, startWidth + 90, startHeight + 785);
                }

                //快递详细信息
                Font cellFont = new Font("黑体", Font.PLAIN, 30);
                g.setFont(cellFont);
                int cellLineHeight = startHeight + 870;
                for (int i = 0; i < lists.size(); i++) {
                    if (i == 0){
                        DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        g.drawString("下单时间: "+sdf.format(orders.getPayTime()), startWidth + 30, cellLineHeight);
                        cellLineHeight += 50;
                    }
                    g.drawString("产品名称: "+lists.get(i).getProductName()+" "+lists.get(i).getSpecInfo()+" "+lists.get(i).getNumber(), startWidth + 30, cellLineHeight);
                    cellLineHeight += 50;
                }

                g.drawLine(startWidth, startHeight + 1080, startWidth + 750, startHeight + 1080);
                //  尊敬的客户,本次服务使用中通官网(www.zto.com)公示的快递服务协议条款。您对此单的签收代表您已收到快件且完好无损。
                //  全国统一客服热线:95311
                Font fontLogisticsIntroduction = new Font("黑体", Font.PLAIN, 30);
                g.setFont(fontLogisticsIntroduction);
                String StrLogisticsIntroduction = "尊敬的客户,本次服务使用中通官网(www.zto.com)公示的快递服务协议条款。您对此单的签收代表您已收到快件且完好无损。";
                if (StrLogisticsIntroduction.length() > 23) {
                    g.drawString(StrLogisticsIntroduction.substring(0, 23), startWidth + 90, startHeight + 1130);
                    g.drawString(StrLogisticsIntroduction.substring(23, 50), startWidth + 20, startHeight + 1175);
                    g.drawString(StrLogisticsIntroduction.substring(50, StrLogisticsIntroduction.length()), startWidth + 20, startHeight + 1220);
                } else {
                    g.drawString(StrLogisticsIntroduction, startWidth + 90, startHeight + 1130);
                }

                Font subOrderFont = new Font("黑体", Font.BOLD, 30);
                g.setFont(subOrderFont);
                g.drawString("全国统一客服热线:95311", startWidth + 350, startHeight + 1270);

                g.dispose();
                File sfbarFile = new File(saveFilePath+"/resources/admin/img/jbarcode/jbarcode.jpg");
                if (sfbarFile.exists() && sfbarFile.isFile()) {
                    sfbarFile.delete();
                }
                //生成订单图片

                createImage(saveFilePath+"resources/admin/img/jbarcode/jbarcode.jpg");   //生成图片
                compressImg(saveFilePath+"resources/admin/img/jbarcode/jbarcode.jpg", 760, 1300);     //以设置的宽高设计图片

                System.out.println("订单生成成功. " + saveFilePath+"resources/admin/img/jbarcode/jbarcode.jpg");

                File file = new File(saveFilePath+"resources/admin/img/jbarcode/jbarcode.jpg");   //打印文件路径
//                String printerName = "ZDesigner GT800 (EPL)";//打印机名包含字串
                HttpJsonResult<Boolean> print = JPGPrint(file);
                if (print != null){
                    return print;
                }
                jsonResult=print;
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
        jsonResult = new HttpJsonResult<>(true);
        return jsonResult;
    }

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值