快递单展示

标题

不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 {// 设置打印格式,如果未确定类型,可选择autosenseDocFlavor 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();//将查询出来的商品统计好数量,有一样的商品就将当前商品数量加1List<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); //得到当前商品数量,将当前商品数量加1break;  //中断当前循环}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.pngString 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)公示的快递服务协议条款。您对此单的签收代表您已收到快件且完好无损。//  全国统一客服热线:95311Font 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;}//将查询出来的商品统计好数量,有一样的商品就将当前商品数量加1List<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); //得到当前商品数量,将当前商品数量加1break;  //中断当前循环}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)公示的快递服务协议条款。您对此单的签收代表您已收到快件且完好无损。//  全国统一客服热线:95311Font 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;}

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

  1. 【项目管理】Java使用pdfbox调用打印机打印PDF文件

    [项目管理]Java使用pdfbox调用打印机打印PDF文件 1.项目前言 2.项目实现 3.关键代码 4.效果演示 5.问题处理 5.1 安装对应字体 5.2 修改对应代码 系统:Win10 Jav ...

  2. java打印word_Java jacob调用打印机打印word文档

    前面说了Java如何生成复杂的Word文档,今年记录下Java如何调用打印机打印word文档. 起初用的是自带的PrintJob,但是系统提供的打印机制并不成熟完整.网上的代码也是千篇一律,在我的打印 ...

  3. Java调用打印机打印(远程、本地皆可用)

    Java调用打印机打印(远程.本地皆可用) 背景 准备 MAVEN环境 步骤 获取PrinterJob 设置PrinterJob纸张样式 打印PDF 背景 开发个Java项目需要远程调用共享打印机打印 ...

  4. java程序实现wifi连接打印_Android下通过wifi调用打印机打印,Java代码片段分享,

    Android下通过wifi调用打印机打印 chongq 分享于 2小时前 4972阅 0人收藏此代码, 好图网图标搜索引擎,提供超过60万的免费图标.PNG图标.ICO图标.ICNS图标.网页图标 ...

  5. java 调用打印机打印

    要在 Java 中调用打印机打印,您可以使用 Java 的打印 API.下面是一个简单的示例,展示了如何使用 Java 打印 API 来打印文本: import java.awt.print.Prin ...

  6. Java调用打印机打印pdf

    要在Java中调用打印机打印PDF,可以使用Java打印API和第三方库,如Apache PDFBox或iText PDF. 以下是使用Java打印API打印PDF的基本步骤: 安装打印机:确保您已经 ...

  7. 思维导图怎么画?如何利用画图工具绘制思维导图

    在我们的日常办公中,越来越多的人们开始尝试着使用思维导图,它简单却很有效,可以帮助我们记忆,是一种很实用的思维工具,但是很多人们在绘制思维导图的时候都说很难绘制,每当看到别人绘制的思维导图都是那么的好 ...

  8. Java调用打印机打印PDF文档的两种方法

    最近,由于项目需求,需要增加系统调用打印机打印PDF文档功能.以前在Asp.Net项目中做过套打,但是现在的需求直接文档打印,下面是实现代码调用打印机的两种方法. 1.Java Print Servi ...

  9. html 绘制体温单,使用zrender.js绘制体温单效果

    今天我们来画折线图 效果图 以下为模拟数据 [{"time":19,"text":"入\n院\n19\n时\n11\n分","po ...

  10. html 绘制体温单,使用zrender.js绘制体温单(2)

    今天我们来画折线图 效果图 以下为模拟数据 [{"time":19,"text":"入\n院\n19\n时\n11\n分","po ...

最新文章

  1. 算法设计思想(2)— 贪婪法
  2. 【目标检测】yolo系列:从yolov1到yolov5之YOLOv2详解及复现
  3. 在同一台电脑上同时安装Python2和Python3
  4. C 语言编程 — 高级数据类型 — 枚举
  5. 《Ajax基础教程》一书推荐的JS工具备忘
  6. MyBatis源码-解读Executor的三个实现类之BatchExecutor(批处理执行器)
  7. Java程序员从笨鸟到菜鸟之(一百零六)java操作office和pdf文件(四)页面列表导出cvs,excel、pdf报表.
  8. PWA(Progressive Web App)入门系列:Sync 后台同步
  9. datepicker不能选择是为什么_为什么客厅不好看?休闲椅选错了
  10. pycache怎么用_如何用python3输出dos命令?
  11. 基于JAVA+Servlet+JSP+MYSQL的新闻发布系统
  12. 【BZOJ1095】【ZJOI2007】捉迷藏 [动态点分治]
  13. less中mixins与extend的区别
  14. 论文英文参考文献[10]的时候后面多空格_毕业生必看论文查重修改技巧
  15. Mybatis-第N篇配置log4j1、log4j2打印执行的sql语句
  16. 【图像分割】基于matlab超像素图像分割【含Matlab源码 720期】
  17. 啦啦外卖小程序上传提示43003解决办法
  18. 【Unity3D 灵巧小知识点】☀️ | Unity 移动物体到指定位置的几种方法【精选快捷使用】
  19. Matlab查找图像块在原图中的位置
  20. android 系统光标,如何定位android系统中光标的位置

热门文章

  1. 清华大学计算机杜瑜皓,我在清华等你来|2015国际信息学奥赛全球第四名杜瑜皓:人生不搏枉少年...
  2. oracle 索引原理
  3. 关于Protel 2004 绘制电路原理图
  4. CreateThread()和_beginthread()有什么不同?
  5. c语言控制单片机38译码器,单片机+38译码器控制的数码管怎么点亮?
  6. 编程珠玑第一章习题解答
  7. 偏微分方程数值解法python_微分方程数值方法和偏微分方程有什么区别吗?
  8. C#之AutoCAD文本字体样式设置
  9. 地震matlab频域分析,基于matlab的地震数据的分析.doc
  10. win7美化_桌面美化之 windows10