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

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

快递单展示

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时 输入的宽度和高度才起作用
* 为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 JPGPrint(File file) throws PrintException { HttpJsonResult jsonResult = null; if (file == null) { jsonResult = new HttpJsonResult ("缺少打印文件路径!"); 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 ("未找到默认打印机!"); 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 printCourier(HttpServletRequest request, Integer id,Map dataMap) { HttpJsonResult 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 ("错误!订单号 "+orders.getOrderSn()+" 信息不足,打印快递单失败,请注意!"); return jsonResult; } //获取订单商品信息 ServiceResult > oId = ordersProductService.getOrdersProductByOId(orderId); List list = oId.getResult(); //将查询出来的商品统计好数量,有一样的商品就将当前商品数量加1 List 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("", //运单号 // 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 = "8"; // 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 print = JPGPrint(file); if (print != null){ return print; } jsonResult=print; } catch (Exception e) { e.printStackTrace(); } }else { //查询出当前订单信息 Orders orders = orderService.getOrderWithOPById(id).getResult(); //中通返回的数据 ServiceResult 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 > oId = ordersProductService.getOrdersProductByOId(id); List list = oId.getResult(); //验证数据是否齐全 if (receiveInfo.getReceiverProvince().equals("") || receiveInfo.getReceiverCity().equals("") || receiveInfo.getReceiverDistrict().equals("") || orders.getLogisticsNumber().equals("") || list == null || ztoReturnResult == null) { jsonResult = new HttpJsonResult ("错误!订单号 "+orders.getOrderSn()+" 信息不足,打印快递单失败,请注意!发货已中断"); return jsonResult; } //将查询出来的商品统计好数量,有一样的商品就将当前商品数量加1 List 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("", //运单号 // 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 = "8"; // 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 print = JPGPrint(file); if (print != null){ return print; } jsonResult=print; } catch (Exception e) { e.printStackTrace(); } } jsonResult = new HttpJsonResult<>(true); return jsonResult; }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211024.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午11:22
下一篇 2026年3月18日 下午11:22


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号