使用java Graphics 绘图工具生成顺丰快递电子面单
最近公司需要开发一个公司内部使用的快递下单系统,给我的开发任务中有一个生成电子面单功能,为了下单时更方便,利用此功能使用快递公司给我们的打印机直接打印出电子面单,刚接到这个任务时我想这应该很简单,不就是做一个表格打印出来吗,原本以为使用excel或者word等工具直接生成一个文档,后来经理说不用excel和word工具,让用Java直接生成电子面单,刚开始有点懵,因为不知道Java还有绘图功能,因此在网上学习了一下Java怎样绘图,索性直接开干。
废话不多说直接上代码。
一、 首先是生成条码工具类,此类是生成快递单号条码。
SFBarCodeGenerateUtil.java
1 package testNetty.wu; 2 3 import java.awt.Color; 4 import java.awt.Graphics; 5 import java.awt.Image; 6 import java.awt.image.BufferedImage; 7 import java.io.BufferedInputStream; 8 import java.io.BufferedOutputStream; 9 import java.io.File; 10 import java.io.FileInputStream; 11 import java.io.FileNotFoundException; 12 import java.io.FileOutputStream; 13 import java.io.OutputStream; 14 import java.util.ArrayList; 15 import java.util.List; 16 import java.util.regex.Pattern; 17 18 import javax.imageio.ImageIO; 19 20 import org.apache.log4j.Logger; 21 22 23 import com.sun.image.codec.jpeg.JPEGCodec; 24 import com.sun.image.codec.jpeg.JPEGImageEncoder; 25 26 /** 27 * 顺丰速运条码生成工具<br/> 28 * 采用 code128c编码规则<br/> 29 * <pre> 30 * CODE128C:[00]-[99]的数字对集合,共100个 31 * 即只能表示偶数位长度的数字 32 * </pre> 33 * @author wu 34 * @version 1.0 35 * @Time 2017/03/29 36 * */ 37 public class SFBarCodeGenerateUtil { 38 39 private static final Logger logger = Logger.getLogger(SFBarCodeGenerateUtil.class.getSimpleName()); 40 41 /**图片格式 jpg 格式*/ 42 public static final String PICTURE_JPG = "JPG"; 43 /**图片格式 png 格式*/ 44 public static final String PICTURE_PNG = "PNG"; 45 /**图片格式 gif 格式*/ 46 public static final String PICTURE_GIF = "GIF"; 47 48 /** code128编码字符集 二维数组*/ 49 private static String[][] code128 = { 50 { " ", " ", "00", "212222", "11011001100" }, 51 { "!", "!", "01", "222122", "11001101100" }, 52 { "\"", "\"", "02", "222221", "11001100110" }, 53 { "#", "#", "03", "121223", "10010011000" }, 54 { "$", "$", "04", "121322", "10010001100" }, 55 { "%", "%", "05", "131222", "10001001100" }, 56 { "&", "&", "06", "122213", "10011001000" }, 57 { "\'", "\'", "07", "122312", "10011000100" }, 58 { "(", "(", "08", "132212", "10001100100" }, 59 { ")", ")", "09", "221213", "11001001000" }, 60 { "*", "*", "10", "221312", "11001000100" }, 61 { "+", "+", "11", "231212", "11000100100" }, 62 { ",", ",", "12", "112232", "10110011100" }, 63 { "-", "-", "13", "122132", "10011011100" }, 64 { ".", ".", "14", "122231", "10011001110" }, 65 { "/", "/", "15", "113222", "10111001100" }, 66 { "0", "0", "16", "123122", "10011101100" }, 67 { "1", "1", "17", "123221", "10011100110" }, 68 { "2", "2", "18", "223211", "11001110010" }, 69 { "3", "3", "19", "221132", "11001011100" }, 70 { "4", "4", "20", "221231", "11001001110" }, 71 { "5", "5", "21", "213212", "11011100100" }, 72 { "6", "6", "22", "223112", "11001110100" }, 73 { "7", "7", "23", "312131", "11101101110" }, 74 { "8", "8", "24", "311222", "11101001100" }, 75 { "9", "9", "25", "321122", "11100101100" }, 76 { ":", ":", "26", "321221", "11100100110" }, 77 { ";", ";", "27", "312212", "11101100100" }, 78 { "<", "<", "28", "322112", "11100110100" }, 79 { "=", "=", "29", "322211", "11100110010" }, 80 { ">", ">", "30", "212123", "11011011000" }, 81 { "?", "?", "31", "212321", "11011000110" }, 82 { "@", "@", "32", "232121", "11000110110" }, 83 { "A", "A", "33", "111323", "10100011000" }, 84 { "B", "B", "34", "131123", "10001011000" }, 85 { "C", "C", "35", "131321", "10001000110" }, 86 { "D", "D", "36", "112313", "10110001000" }, 87 { "E", "E", "37", "132113", "10001101000" }, 88 { "F", "F", "38", "132311", "10001100010" }, 89 { "G", "G", "39", "211313", "11010001000" }, 90 { "H", "H", "40", "231113", "11000101000" }, 91 { "I", "I", "41", "231311", "11000100010" }, 92 { "J", "J", "42", "112133", "10110111000" }, 93 { "K", "K", "43", "112331", "10110001110" }, 94 { "L", "L", "44", "132131", "10001101110" }, 95 { "M", "M", "45", "113123", "10111011000" }, 96 { "N", "N", "46", "113321", "10111000110" }, 97 { "O", "O", "47", "133121", "10001110110" }, 98 { "P", "P", "48", "313121", "11101110110" }, 99 { "Q", "Q", "49", "211331", "11010001110" }, 100 { "R", "R", "50", "231131", "11000101110" }, 101 { "S", "S", "51", "213113", "11011101000" }, 102 { "T", "T", "52", "213311", "11011100010" }, 103 { "U", "U", "53", "213131", "11011101110" }, 104 { "V", "V", "54", "311123", "11101011000" }, 105 { "W", "W", "55", "311321", "11101000110" }, 106 { "X", "X", "56", "331121", "11100010110" }, 107 { "Y", "Y", "57", "312113", "11101101000" }, 108 { "Z", "Z", "58", "312311", "11101100010" }, 109 { "[", "[", "59", "332111", "11100011010" }, 110 { "\\", "\\", "60", "314111", "11101111010" }, 111 { "]", "]", "61", "221411", "11001000010" }, 112 { "^", "^", "62", "431111", "11110001010" }, 113 { "_", "_", "63", "111224", "10100110000" }, 114 { "NUL", "`", "64", "111422", "10100001100" }, 115 { "SOH", "a", "65", "121124", "10010110000" }, 116 { "STX", "b", "66", "121421", "10010000110" }, 117 { "ETX", "c", "67", "141122", "10000101100" }, 118 { "EOT", "d", "68", "141221", "10000100110" }, 119 { "ENQ", "e", "69", "112214", "10110010000" }, 120 { "ACK", "f", "70", "112412", "10110000100" }, 121 { "BEL", "g", "71", "122114", "10011010000" }, 122 { "BS", "h", "72", "122411", "10011000010" }, 123 { "HT", "i", "73", "142112", "10000110100" }, 124 { "LF", "j", "74", "142211", "10000110010" }, 125 { "VT", "k", "75", "241211", "11000010010" }, 126 { "FF", "I", "76", "221114", "11001010000" }, 127 { "CR", "m", "77", "413111", "11110111010" }, 128 { "SO", "n", "78", "241112", "11000010100" }, 129 { "SI", "o", "79", "134111", "10001111010" }, 130 { "DLE", "p", "80", "111242", "10100111100" }, 131 { "DC1", "q", "81", "121142", "10010111100" }, 132 { "DC2", "r", "82", "121241", "10010011110" }, 133 { "DC3", "s", "83", "114212", "10111100100" }, 134 { "DC4", "t", "84", "124112", "10011110100" }, 135 { "NAK", "u", "85", "124211", "10011110010" }, 136 { "SYN", "v", "86", "411212", "11110100100" }, 137 { "ETB", "w", "87", "421112", "11110010100" }, 138 { "CAN", "x", "88", "421211", "11110010010" }, 139 { "EM", "y", "89", "212141", "11011011110" }, 140 { "SUB", "z", "90", "214121", "11011110110" }, 141 { "ESC", "{", "91", "412121", "11110110110" }, 142 { "FS", "|", "92", "111143", "10101111000" }, 143 { "GS", "},", "93", "111341", "10100011110" }, 144 { "RS", "~", "94", "131141", "10001011110" }, 145 { "US", "DEL", "95", "114113", "10111101000" }, 146 { "FNC3", "FNC3", "96", "114311", "10111100010" }, 147 { "FNC2", "FNC2", "97", "411113", "11110101000" }, 148 { "SHIFT", "SHIFT", "98", "411311", "11110100010" }, 149 { "CODEC", "CODEC", "99", "113141", "10111011110" }, 150 { "CODEB", "FNC4", "CODEB", "114131", "10111101110" }, 151 { "FNC4", "CODEA", "CODEA", "311141", "11101011110" }, 152 { "FNC1", "FNC1", "FNC1", "411131", "11110101110" }, 153 { "StartA", "StartA", "StartA", "211412", "11010000100" }, 154 { "StartB", "StartB", "StartB", "211214", "11010010000" }, 155 { "StartC", "StartC", "StartC", "211232", "11010011100" }, 156 { "Stop", "Stop", "Stop", "2331112", "1100011101011" }, 157 }; 158 159 /** 160 * 生产Code128的条形码的code 161 * @param barCode 生成条码的数字号码 162 * @return 163 */ 164 private static String getCode(String barCode) { 165 String rtnCode = "";// 返回的参数 166 List<Integer> rtnCodeNumb = new ArrayList<Integer>();// 2截取位的组合 167 int examine = 105; // 首位 168 // 编码不能是奇数 169 if (!((barCode.length() & 1) == 0)) 170 return ""; 171 while (barCode.length() != 0) { 172 int temp = 0; 173 try { 174 // Code128 编码必须为数字 175 temp = (Integer) Integer.valueOf(barCode.substring(0, 2)); 176 } catch (Exception e) { 177 e.printStackTrace(); 178 return ""; 179 } 180 // 获得条纹 181 rtnCode += getValue(barCode, barCode.substring(0, 2), temp); 182 rtnCodeNumb.add(temp); 183 // 条码截取2个就需要去掉用过的前二位 184 barCode = barCode.substring(2); 185 } 186 if (rtnCodeNumb.size() == 0) { 187 return ""; 188 } 189 rtnCode = getValue(examine) + rtnCode; // 获取开始位 190 for (int i = 0; i != rtnCodeNumb.size(); i++) { 191 examine += rtnCodeNumb.get(i) * (i + 1); 192 } 193 examine = examine % 103; // 获得校验位 194 rtnCode += getValue(examine); // 获取校验位 195 rtnCode += "1100011101011"; // 结束位 196 return rtnCode; 197 } 198 199 /** 200 * 根据编号获得条纹 201 * 202 * @param encode 203 * @param p_Value 204 * @param p_SetID 205 * @return 206 */ 207 private static String getValue(String encode, String p_Value, int p_SetID) { 208 return code128[p_SetID][4]; 209 } 210 211 /** 212 * 根据编号获得条纹 213 * @param p_CodeId 214 * @return 215 */ 216 private static String getValue(int p_CodeId) { 217 return code128[p_CodeId][4]; 218 } 219 220 // 条码的高度像素数 221 private static int m_nImageHeight = 40; 222 223 /** 224 * 生成条码 225 * @param barString 条码模式字符串 226 * @param path 生成条码图片的路径 227 */ 228 private static boolean kiCode128C(String barString, String path) { 229 OutputStream out = null; 230 try { 231 File myPNG = new File(path); 232 out = new FileOutputStream(myPNG); 233 int nImageWidth = 0; 234 char[] cs = barString.toCharArray(); 235 for (int i = 0; i != cs.length; i++) { 236 nImageWidth = cs.length; 237 } 238 BufferedImage bi = new BufferedImage(nImageWidth, m_nImageHeight, 239 BufferedImage.TYPE_INT_RGB); 240 Graphics g = bi.getGraphics(); 241 for (int i = 0; i < cs.length; i++) { 242 if ("1".equals(cs[i] + "")) { 243 g.setColor(Color.BLACK); 244 g.fillRect(i, 0, 1, m_nImageHeight); 245 } else { 246 g.setColor(Color.WHITE); 247 g.fillRect(i, 0, 1, m_nImageHeight); 248 } 249 } 250 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); 251 encoder.encode(bi); 252 return true; 253 } catch (FileNotFoundException fe) { 254 logger.error("系统找不到指定路径!!" + path, fe); 255 return false; 256 } catch (Exception e) { 257 e.printStackTrace(); 258 } finally { 259 try { 260 if (out != null) 261 out.close(); 262 } catch (Exception e2) { 263 e2.printStackTrace(); 264 } 265 } 266 return false; 267 } 268 269 /** 270 * 生成条形码<br/> 271 * 条码是图片格式(JPG、PNG、GIF) 272 * @param wayBillNo 273 * 运单号 274 * @param generatePathName 275 * 生成条形码路径及名称 276 * @param width 277 * 条码图片宽度 278 * @param height 279 * 条码图片高度 280 * @param picTyp 281 * 图片格式<br/> 282 * JPG、PNG、GIF三种图片类型选择 283 * @return boolean类型值 284 * true 生成成功,false 生成失败 285 * */ 286 public static boolean generateBarCode(String wayBillNo, String generatePathName, int width, 287 int height, String picTyp){ 288 //只能是数字 289 if (!Pattern.matches("[0-9]+", wayBillNo)) { 290 logger.error("生成CODE128C条码只能是0~9的数字不能有其他字符!!"); 291 //运单号长度只能是偶数 292 } else if (wayBillNo.length() % 2 != 0) { 293 logger.error("生成CODE128C条码的长度只能是偶数!!"); 294 //生成条码 295 } else if (kiCode128C(getCode(wayBillNo), generatePathName)){ 296 /** 297 * 设置条码图片的尺寸 298 * */ 299 BufferedInputStream bis = null; 300 BufferedOutputStream out = null; 301 try { 302 File sfFile = new File(generatePathName); 303 if (sfFile.isFile() && sfFile.exists()) { 304 //读取图片 305 bis = new BufferedInputStream(new FileInputStream(generatePathName)); 306 //转换成图片对象 307 Image bi = ImageIO.read(bis); 308 //构建图片流 设置图片宽和高 309 BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 310 //绘制改变尺寸后的图 311 tag.getGraphics().drawImage(bi, 0, 0,width, height, null); 312 //保存图片 313 out = new BufferedOutputStream(new FileOutputStream(generatePathName)); 314 ImageIO.write(tag, picTyp,out); 315 out.flush(); 316 } 317 } catch (Exception e) { 318 e.printStackTrace(); 319 } finally { 320 try { 321 if (out != null) 322 out.close(); 323 if (bis != null) 324 bis.close(); 325 } catch (Exception e2) { 326 e2.printStackTrace(); 327 } 328 } 329 logger.info("条码生成成功. " + generatePathName + " 像素:" + width + "*" + height); 330 return true; 331 } 332 logger.error("条码生成失败!"); 333 return false; 334 } 335 336 }
二、其次是生成电子面单表格类,包含条码、单号、寄件人和收件人信息。
SFOrderGenerateUtil.java
1 package testNetty.wu; 2 3 import java.awt.BasicStroke; 4 import java.awt.Color; 5 import java.awt.Font; 6 import java.awt.Graphics2D; 7 import java.awt.Image; 8 import java.awt.RenderingHints; 9 import java.awt.image.BufferedImage; 10 import java.io.BufferedInputStream; 11 import java.io.BufferedOutputStream; 12 import java.io.ByteArrayOutputStream; 13 import java.io.File; 14 import java.io.FileInputStream; 15 import java.io.FileNotFoundException; 16 import java.io.FileOutputStream; 17 import java.io.IOException; 18 19 import javax.imageio.ImageIO; 20 21 import org.apache.commons.io.FileUtils; 22 import org.apache.log4j.Logger; 23 24 import com.sun.image.codec.jpeg.JPEGCodec; 25 import com.sun.image.codec.jpeg.JPEGEncodeParam; 26 import com.sun.image.codec.jpeg.JPEGImageEncoder; 27 28 /** 29 * 生成电子面单图片工具 30 * @author wu 31 * @version 1.0 32 * @time 2017/04/25 33 * */ 34 public class SFOrderGenerateUtil { 35 36 private static final Logger logger = Logger.getLogger(SFOrderGenerateUtil.class.getSimpleName()); 37 38 //图片的宽度 39 public static final int IMG_WIDTH = 1198; 40 //图片的宽度 41 public static final int IMG_HEIGHT = 1800; 42 //LOGO的宽度 43 public static final int LOGO_WIDTH = 240; 44 //LOGO高度 45 public static final int LOGO_HEIGHT = 100; 46 //LOGO客服电话的宽度 47 public static final int LOGO_TEL_WIDTH = 220; 48 //LOGO客服电话高度 49 public static final int LOGO_TEL_HEIGHT = 84; 50 51 //Logo路径 52 public static final String LOGO_PATH = "C:\\Users\\Administrator\\Desktop\\expressLogo\\logoSC.png"; 53 //Logo客服电话 54 public static final String LOGO_TEL_PATH = "C:\\Users\\Administrator\\Desktop\\expressLogo\\sf_Tel.png";; 55 56 57 public static BufferedImage image; 58 public static void createImage(String fileLocation) { 59 FileOutputStream fos = null; 60 BufferedOutputStream bos = null; 61 try { 62 fos = new FileOutputStream(fileLocation); 63 bos = new BufferedOutputStream(fos); 64 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos); 65 encoder.encode(image); 66 } catch (Exception e) { 67 e.printStackTrace(); 68 } finally { 69 try { 70 if (bos != null) bos.close(); 71 if (fos != null) fos.close(); 72 } catch (Exception e2) { 73 e2.printStackTrace(); 74 } 75 } 76 } 77 78 /** 79 * 生成订单图片 80 * @param orderPath 81 * 生成订单存放路径 82 * @param printTyp 83 * 订单打印类型 1:A4纸打印 2:热敏纸打印 84 * @param orderParam 85 * 生成订单所需的参数对象 86 * @param isCompress 87 * 是否需要根据输入宽高压缩图片 88 * <pre> 89 * isCompress 为ture时 所输入的宽高才起作用 90 * </pre> 91 * @param imgWidth 92 * 图片宽度 93 * @param imgHeidht 94 * 图片高度 95 * @author Administrator 96 * @return 97 * 98 * */ 99 public static boolean generateOrders(String orderPath, SfPrintOrderParam orderParam, String printTyp, boolean isCompress, int imgWidth, int imgHeidht){ 100 if (null == orderParam) 101 return false; 102 int startHeight = 0; //表格的起始高度 103 int startWidth = 0; //表格的起始宽度 104 try { 105 if (orderParam.getSubMailNos().size() == 0 || orderParam.getSubMailNos().isEmpty()) { 106 generateParentOrder(orderPath, orderParam, printTyp, isCompress, imgWidth, imgHeidht); 107 return true; 108 } else { 109 String picPath = orderPath; 110 File mk = new File(picPath + orderParam.getMailNo()); 111 if (mk.exists()){ 112 FileUtils.deleteDirectory(mk); 113 } 114 for (int k = 0; k < orderParam.getSubMailNos().size(); k++) { 115 image = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, BufferedImage.TYPE_INT_RGB); 116 Graphics2D g = image.createGraphics(); 117 //以运单号为名称创建存放订单的目录 118 FileUtils.forceMkdir(mk); 119 picPath += orderParam.getMailNo() + "/"; 120 121 //设置背景色为白色 122 g.setColor(Color.WHITE); 123 //设置颜色区域大小 124 g.fillRect(0, 0, IMG_WIDTH, IMG_HEIGHT); 125 //提高导入Img的清晰度 126 127 128 /* 129 * 绘制表格 填充内容 130 * */ 131 //表格线条的颜色 132 g.setColor(Color.BLACK); 133 134 //消除文本出现锯齿现象 135 g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 136 //g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP); 137 138 //表格的四个边框 139 g.drawLine(startWidth, startHeight, startWidth + 374, startHeight); //上边框 140 g.drawLine(startWidth, startHeight, startWidth, startHeight + 562); //左边框 141 g.drawLine(startWidth, startHeight + 562, startWidth + 375, startHeight + 562); //下边框 142 g.drawLine(startWidth + 374, startHeight, startWidth + 374, startHeight + 563); //右边框 143 144 //绘制表格内容 第一行 145 g.drawLine(startWidth, startHeight + 48, startWidth + 375, startHeight + 48); 146 147 //插入顺丰速运Logo 148 Image logoImg = insertImage(LOGO_PATH, LOGO_WIDTH, LOGO_HEIGHT, true); 149 g.drawImage(logoImg, startWidth + 4, startHeight + 8, null); 150 //插入第二个logo (客服电话) 151 Image logoTelImg = insertImage(LOGO_TEL_PATH, LOGO_TEL_WIDTH, LOGO_TEL_HEIGHT, true); 152 g.drawImage(logoTelImg, startWidth + 280, startHeight + 15, null); 153 154 //填写产品类型 155 Font fontSfTyp = new Font("黑体", Font.BOLD, 36); 156 g.setFont(fontSfTyp); 157 //产品类型字符串 158 String sfProTypStr = orderParam.getEarthCarryFlag(); 159 g.drawString(sfProTypStr, startWidth + 150, startHeight + 41); 160 161 //绘制第二行 162 g.drawLine(startWidth, startHeight + 124, startWidth + 375, startHeight + 124); 163 g.drawLine(startWidth + 276, startHeight + 48, startWidth + 276, startHeight + 124); 164 165 //生成code128c 条码 166 SFBarCodeGenerateUtil.generateBarCode(orderParam.getMailNo(), //运单号 167 picPath + "SFBarCoding_" + orderParam.getMailNo() + ".jpg", //图片名称 168 262, //图片宽度 169 45, //图片高度 170 SFBarCodeGenerateUtil.PICTURE_JPG); 171 //导入条码图片 172 Image sfBarImg = insertImage(picPath + "SFBarCoding_" + orderParam.getMailNo() + ".jpg", 0, 0, false); 173 g.drawImage(sfBarImg, startWidth + 7, startHeight + 53, null); 174 sfBarImg.flush(); 175 176 //设置字体 177 Font fontSfBarCode = new Font("黑体",Font.BOLD,10); 178 g.setFont(fontSfBarCode); 179 180 String pageNum = (k + 1) + "/" + orderParam.getSubMailNos().size(); 181 g.drawString(pageNum, startWidth + 7, startHeight + 108); 182 183 //子单号 184 String subBarCodeStr = orderParam.getSubMailNos().get(k); 185 subBarCodeStr = subBarCodeStr.replaceAll("(.{3})", "$1 "); 186 g.drawString("子单号 " + subBarCodeStr, startWidth + 80, startHeight + 108); 187 188 //条码字符串(条码母单号) 189 String sfBarCodeStr = orderParam.getMailNo(); 190 sfBarCodeStr = sfBarCodeStr.replaceAll("(.{3})", "$1 "); 191 g.drawString("母单号 " + sfBarCodeStr, startWidth + 80, startHeight + 120); 192 193 //绘制产品类型框 194 g.drawLine(startWidth + 276, startHeight + 70, startWidth + 375, startHeight + 70); 195 Font fontSfProtypSub = new Font("黑体", Font.BOLD, 14); 196 g.setFont(fontSfProtypSub); 197 198 //产品类型字符串 199 String subSfProTypStr = orderParam.getExpressTyp(); 200 g.drawString(subSfProTypStr, startWidth + 295, startHeight + 65); 201 202 //目的地栏的绘制 203 g.drawLine(startWidth, startHeight + 176, startWidth + 375, startHeight + 176); 204 g.drawLine(startWidth + 21, startHeight + 124, startWidth + 21, startHeight + 176); 205 206 //目的地填写 207 Font fontDest = new Font("黑体", Font.BOLD, 10); 208 g.setFont(fontDest); 209 //目的地标题 210 String destTitleStr = "目的地"; 211 char[] destTitleArray = destTitleStr.toCharArray(); 212 int destTitleWidth = startWidth + 6; 213 int destTitleHeight = startHeight + 140; 214 for (int i = 0; i < destTitleStr.length(); i++) { 215 g.drawString(String.valueOf(destTitleArray[i]), destTitleWidth, destTitleHeight); 216 destTitleHeight += 12; 217 } 218 219 //目的地代码 220 Font fontDestCode = new Font("Arial", Font.BOLD, 36); 221 g.setFont(fontDestCode); 222 //目的地代码字符串 223 String destCode = orderParam.getDestCode(); 224 g.drawString(destCode, startWidth + 24, startHeight + 165); 225 226 //收件人表格栏 227 g.drawLine(startWidth, startHeight + 225, startWidth + 1198, startHeight + 225); 228 g.drawLine(startWidth + 21, startHeight + 176, startWidth + 21, startHeight + 225); 229 230 //设置收件人标题字体 231 Font fontRevicer = new Font("黑体", Font.BOLD, 10); 232 g.setFont(fontRevicer); 233 //收件人标题字符串 234 String revicerTitleStr = "收件人"; 235 char[] revicerTitleArray = revicerTitleStr.toCharArray(); 236 int revicerTitleWidth = startWidth + 6; 237 int revicerTitleHeight = startHeight + 192; 238 for (int i = 0; i < revicerTitleStr.length(); i++) { 239 g.drawString(String.valueOf(revicerTitleArray[i]), revicerTitleWidth, revicerTitleHeight); 240 revicerTitleHeight += 11; 241 } 242 243 /* 244 * 收件人详细信息 245 * */ 246 String dContact = orderParam.getdContact(); //收件人姓名 247 String dTel = orderParam.getdTel(); //联系电话 248 String dMoblie = orderParam.getdMobile(); //联系人手机号 249 String dCompany = orderParam.getdCompany(); //公司名称 250 String dProvince = orderParam.getdProvince(); 251 String dCity = orderParam.getdCity(); 252 String dCounty = orderParam.getdCounty(); 253 String dAddress = orderParam.getdAddress(); //详细地址 254 255 String revicerInfo = dContact + " " + dTel + " " + dMoblie + "" + dCompany; 256 dAddress = dProvince + dCity + dCounty + dAddress; 257 258 //设置收件人信息字体 259 Font fontRevicerInfo = new Font("黑体", Font.BOLD, 14); 260 g.setFont(fontRevicerInfo); 261 g.drawString(revicerInfo, startWidth + 24, startHeight + 190); 262 //设置收件人详细地址字体 263 Font fontReviceAddress = new Font("黑体", Font.BOLD, 14); 264 g.setFont(fontReviceAddress); 265 if (dAddress.length() > 23) { 266 g.drawString(dAddress.substring(0, 23), startWidth + 24, startHeight + 205); 267 g.drawString(dAddress.substring(23, dAddress.length()), startWidth + 24, startHeight + 220); 268 } else { 269 g.drawString(dAddress, startWidth + 24, startHeight + 205); 270 } 271 272 //绘制寄件人表格 273 g.drawLine(startWidth, startHeight + 259, startWidth + 375, startHeight +259); 274 g.drawLine(startWidth + 21, startHeight + 225, startWidth + 21, startHeight + 259); 275 276 //设置寄件人标题字体 277 Font fontSender = new Font("黑体", Font.BOLD, 10); 278 g.setFont(fontSender); 279 //寄件人标题字符串 280 String senderTitleStr = "寄件人"; 281 char[] senderTitleArray = senderTitleStr.toCharArray(); 282 int senderTitleWidth = startWidth + 6; 283 int senderTitleHeight = startHeight + 235; 284 for (int i = 0; i < senderTitleStr.length(); i++) { 285 g.drawString(String.valueOf(senderTitleArray[i]), senderTitleWidth, senderTitleHeight); 286 senderTitleHeight += 11; 287 } 288 289 290 /* 291 * 寄件人信息 292 * **/ 293 String jContact = orderParam.getjContact(); //寄件人姓名 294 String jTel = orderParam.getjTel(); //寄件人联系电话 295 String jMobile = orderParam.getjMobile(); 296 String jCompany = orderParam.getjCompany(); 297 String jProvince = orderParam.getjProvince(); 298 String jCity = orderParam.getjCity(); 299 String jCounty = orderParam.getjCounty(); 300 String jAddress = orderParam.getjAddress(); 301 302 String senderInfo = jContact + " " + jTel + " " + jMobile + " " + jCompany; 303 jAddress = jProvince + jCity + jCounty + jAddress; 304 305 //设置寄件人信息字体 306 Font fontSenderInfo = new Font("黑体", Font.PLAIN, 8); 307 g.setFont(fontSenderInfo); 308 g.drawString(senderInfo, startWidth + 24, startHeight + 240); 309 310 //设置寄件人详细地址字体 311 Font fontSenderAddress = new Font("黑体", Font.PLAIN, 8); 312 g.setFont(fontSenderAddress); 313 if (jAddress.length() > 27) { 314 g.drawString(jAddress.substring(0, 27), startWidth + 24, startHeight + 250); 315 g.drawString(jAddress.substring(27, jAddress.length()), startWidth + 24, startHeight + 265); 316 } else { 317 g.drawString(jAddress, startWidth + 24, startHeight + 250); 318 } 319 320 //绘制派送方式表格 321 g.drawLine(startWidth + 310, startHeight + 225, startWidth + 310, startHeight + 338); 322 //设置派送类型字体 323 Font fontSenTyp = new Font("黑体", Font.BOLD, 55); 324 g.setFont(fontSenTyp); 325 326 //快递详细信息表格 327 g.drawLine(startWidth, startHeight + 304, startWidth + 310, startHeight + 304); 328 329 //快递详细信息 330 Font cellFont = new Font("黑体", Font.PLAIN, 9); 331 g.setFont(cellFont); 332 String[][] cellValue1 = { 333 {"付款方式:",orderParam.getPayMethod()}, 334 {"月结账号:",orderParam.getMonthSettleNo()}, 335 {"第三方地区:",orderParam.getThridArea()}, 336 {"实际重量:",orderParam.getRealWeight()} 337 }; 338 int cellLineHeight = startHeight + 268; 339 for (int i = 0; i < cellValue1.length; i++) { 340 g.drawString(cellValue1[i][0], startWidth + 3, cellLineHeight); 341 g.drawString(cellValue1[i][1], startWidth + 52, cellLineHeight); 342 cellLineHeight += 10; 343 } 344 String[][] cellValue2 = { 345 {"计费重量:",orderParam.getChargWeight()}, 346 {"声明价值:",orderParam.getDeclarPrice()}, 347 {"保价费用:",orderParam.getSupportFee()}, 348 {"定时派送:",orderParam.getSendTime()} 349 }; 350 cellLineHeight = startHeight + 268; 351 for (int i = 0; i < cellValue2.length; i++) { 352 g.drawString(cellValue2[i][0], startWidth + 100, cellLineHeight); 353 g.drawString(cellValue2[i][1], startWidth + 150, cellLineHeight); 354 cellLineHeight += 10; 355 } 356 String[][] cellValue3 = { 357 {"包装费用:",orderParam.getPackFee()}, 358 {"运费:",orderParam.getFreight()}, 359 {"费用合计:",orderParam.getSumFee()} 360 }; 361 cellLineHeight = startHeight + 268; 362 for (int i = 0; i < cellValue3.length; i++) { 363 g.drawString(cellValue3[i][0], startWidth + 220, cellLineHeight); 364 g.drawString(cellValue3[i][1], startWidth + 270, cellLineHeight); 365 cellLineHeight += 10; 366 } 367 368 //转寄协议客户 369 Font fowardFont = new Font("黑体", Font.BOLD, 9); 370 g.setFont(fowardFont); 371 String fowardStr = "转寄协议客户"; 372 g.drawString(fowardStr, startWidth + 250, startHeight + 302); 373 374 //托寄物 375 g.drawLine(startWidth + 21, startHeight + 304, startWidth + 21, startHeight + 338); 376 //托寄物标题字符串 377 String articleTitleStr = "托寄物"; 378 char[] articleTitleArray = articleTitleStr.toCharArray(); 379 int articleTitleWidth = startWidth + 6; 380 int articleTitleHeight = startHeight + 315; 381 for (int i = 0; i < articleTitleStr.length(); i++) { 382 g.drawString(String.valueOf(articleTitleArray[i]), articleTitleWidth, articleTitleHeight); 383 articleTitleHeight += 10; 384 } 385 386 Font cargoFont = new Font("黑体", Font.PLAIN, 8); 387 g.setFont(cargoFont); 388 String cargoContent = orderParam.getCargoContent(); 389 g.drawString(cargoContent, startWidth + 24, 315); 390 391 //收件员信息 392 g.drawLine(startWidth + 220, startHeight + 304, startWidth + 220, startHeight + 338); 393 Font receDriverFont = new Font("黑体", Font.PLAIN, 8); 394 g.setFont(receDriverFont); 395 String[][] receDriverStrs = { 396 {"收件员:",orderParam.getReviceDriver()}, 397 {"寄件日期:",orderParam.getSendDate()}, 398 {"派件员:",orderParam.getSendDriver()} 399 }; 400 cellLineHeight = startHeight + 315; 401 for (int i = 0; i < receDriverStrs.length; i++) { 402 g.drawString(receDriverStrs[i][0], startWidth + 225, cellLineHeight); 403 g.drawString(receDriverStrs[i][1], startWidth + 265, cellLineHeight); 404 cellLineHeight += 10; 405 } 406 //签名 407 String signStr = "签名:"; 408 g.drawString(signStr, startWidth + 312, startHeight + 268); 409 //月日 410 String monthDay = "月 日"; 411 g.drawString(monthDay, startWidth + 345, startHeight + 336); 412 413 //母单与子单分割线 414 g.drawLine(startWidth, startHeight + 338, startWidth + 375, startHeight + 338); 415 416 //--------------------------- 如果有子单号 生成子单信息 ----------------------------------// 417 g.drawLine(startWidth, startHeight + 394, startWidth + 375, startHeight + 394); 418 g.drawLine(startWidth + 100, startHeight + 338, startWidth + 100, startHeight + 394); 419 //插入Logo 420 Image sublogoImg = insertImage(LOGO_PATH, LOGO_WIDTH, LOGO_HEIGHT, true); 421 g.drawImage(sublogoImg, startWidth + 10, startHeight + 338, null); 422 //插入第二个logo (客服电话) 423 Image sublogoTelImg = insertImage(LOGO_TEL_PATH, LOGO_TEL_WIDTH, LOGO_TEL_HEIGHT, true); 424 g.drawImage(sublogoTelImg, startWidth + 15, startHeight + 368, null); 425 426 //导入子单条码 427 //生成code128c 条码 428 SFBarCodeGenerateUtil.generateBarCode(orderParam.getSubMailNos().get(k), //运单号 429 picPath + "SFBarCoding_sub_" + orderParam.getSubMailNos().get(k) + ".jpg", //图片名称 430 169, //图片宽度 431 37, //图片高度 432 SFBarCodeGenerateUtil.PICTURE_JPG); 433 Image sfSubBarImg = insertImage(picPath + "SFBarCoding_sub_" + orderParam.getSubMailNos().get(k) + ".jpg", 0, 0, false); 434 g.drawImage(sfSubBarImg, startWidth + 150, startHeight + 342, null); 435 sfSubBarImg.flush(); 436 437 //子单号 438 Font subOrderFont = new Font("黑体", Font.BOLD, 10); 439 g.setFont(subOrderFont); 440 g.drawString("子单号: " + subBarCodeStr, startWidth + 160, startHeight + 390); 441 442 //绘制寄件人表格 子单 443 g.drawLine(startWidth, startHeight + 431, startWidth + 375, startHeight + 431); 444 g.drawLine(startWidth + 21, startHeight + 394, startWidth + 21, startHeight + 431); 445 //设置寄件人标题字体 446 Font fontsubSender = new Font("黑体", Font.BOLD, 10); 447 g.setFont(fontsubSender); 448 //寄件人标题字符串 449 String senderSubTitleStr = "寄件人"; 450 char[] senderSubTitleArray = senderSubTitleStr.toCharArray(); 451 int senderSubTitleWidth = startWidth + 6; 452 int senderSubTitleHeight = startHeight + 408; 453 for (int i = 0; i < senderSubTitleStr.length(); i++) { 454 g.drawString(String.valueOf(senderSubTitleArray[i]), senderSubTitleWidth, senderSubTitleHeight); 455 senderSubTitleHeight += 10; 456 } 457 Font subJInfoFont = new Font("黑体", Font.PLAIN, 8); 458 g.setFont(subJInfoFont); 459 g.drawString(senderInfo, startWidth + 24, startHeight + 405); 460 461 if (jAddress.length() > 30) { 462 g.drawString(jAddress.substring(0, 30), startWidth + 24, startHeight + 415); 463 g.drawString(jAddress.substring(30, jAddress.length()), startWidth + 24, startHeight + 425); 464 } else { 465 g.drawString(jAddress, startWidth + 24, startHeight + 415); 466 } 467 468 //绘制收件人表格 子单 469 g.drawLine(startWidth, startHeight + 469, startWidth + 375, startHeight + 469); 470 g.drawLine(startWidth + 21, startHeight + 394, startWidth + 21, startHeight + 469); 471 //收件人标题字符串 472 Font fontsubReveicer = new Font("黑体", Font.BOLD, 10); 473 g.setFont(fontsubReveicer); 474 String revicerSubTitleStr = "收件人"; 475 char[] revicerSubTitleArray = revicerSubTitleStr.toCharArray(); 476 int revicerSubTitleWidth = startWidth + 6; 477 int revicerSubTitleHeight = startHeight + 445; 478 for (int i = 0; i < revicerSubTitleStr.length(); i++) { 479 g.drawString(String.valueOf(revicerSubTitleArray[i]), revicerSubTitleWidth, revicerSubTitleHeight); 480 revicerSubTitleHeight += 10; 481 } 482 483 Font subDInfoFont = new Font("黑体", Font.PLAIN, 8); 484 g.setFont(subDInfoFont); 485 g.drawString(revicerInfo, startWidth + 24, startHeight + 442); 486 if (dAddress.length() > 35) { 487 g.drawString(dAddress.substring(0, 35), startWidth + 24, startHeight + 452); 488 g.drawString(dAddress.substring(35, dAddress.length()), startWidth + 24, startHeight + 462); 489 } else { 490 g.drawString(dAddress, startWidth + 24, startHeight + 452); 491 } 492 createImage(picPath + "SfOrderImage_" + orderParam.getMailNo() + "_" + (k + 1) + ".jpg"); 493 //如果需要需要根据自定义尺寸压缩图片 494 if (isCompress) { 495 //压缩图片 496 compressImg(picPath + "SfOrderImage_" + orderParam.getMailNo() + "_" + (k + 1) + ".jpg", imgWidth, imgHeidht); 497 } 498 g.dispose(); 499 File sfSubFile = new File(picPath + "SFBarCoding_sub_" + orderParam.getSubMailNos().get(k) + ".jpg"); 500 if (sfSubFile.exists() && sfSubFile.isFile()) { 501 if (!sfSubFile.delete()){ 502 logger.error("删除" + picPath + "SFBarCoding_sub_" + orderParam.getSubMailNos().get(k) + ".jpg 失败!"); 503 } 504 } 505 File sfbarFile = new File(picPath + "SFBarCoding_" + orderParam.getMailNo() + ".jpg"); 506 if (sfbarFile.exists() && sfbarFile.isFile()) { 507 if (!sfbarFile.delete()) { 508 logger.error("删除" + picPath + "SFBarCoding_" + orderParam.getMailNo() + ".jpg 失败!"); 509 } 510 } 511 logger.error("订单生成成功. " + picPath + "SfOrderImage_" + orderParam.getMailNo() + "_" + (k + 1) + ".jpg"); 512 picPath = orderPath; 513 } 514 } 515 return true; 516 517 } catch (IOException e) { 518 e.printStackTrace(); 519 } catch (Exception e) { 520 e.printStackTrace(); 521 } 522 return false; 523 } 524 525 /** 526 * 插入图片 自定义图片的宽高 527 * @param imgPath 528 * 插入图片的路径 529 * @param imgWidth 530 * 设置图片的宽度 531 * @param imgHeight 532 * 设置图片的高度 533 * @param isCompress 534 * 是否按输入的宽高定义图片的尺寸,只有为true时 输入的宽度和高度才起作用<br/> 535 * 为false时输入的宽高不起作用,按输入图片的默认尺寸 536 * @return 537 * @throws Exception 538 * */ 539 private static Image insertImage(String imgPath, int imgWidth, int imgHeight, boolean isCompress) throws Exception { 540 File fileimage = new File(imgPath); 541 Image src = ImageIO.read(fileimage); 542 if (isCompress) { 543 Image image = src.getScaledInstance(imgWidth, imgHeight, Image.SCALE_SMOOTH); 544 return image; 545 } 546 return src; 547 } 548 549 /** 550 * 生成母订单 551 * @param orderParam 生成订单所需的参数对象 552 * @return boolean 553 * */ 554 private static boolean generateParentOrder(String orderPath, SfPrintOrderParam orderParam, String printTyp, boolean isCompress, int imgWidth, int imgHeidht){ 555 if (null == orderParam) 556 return false; 557 String picPath = orderPath; 558 int startHeight = 0; //表格的起始高度 559 int startWidth = 0; //表格的起始宽度 560 try { 561 if (orderParam.getSubMailNos().size() == 0 || orderParam.getSubMailNos().isEmpty()) { 562 image = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, BufferedImage.TYPE_INT_RGB); 563 Graphics2D g = image.createGraphics(); 564 565 //以运单号为名称创建存放订单的目录 566 File mk = new File(picPath + orderParam.getMailNo()); 567 if (mk.exists()) { 568 FileUtils.deleteDirectory(mk); 569 } 570 FileUtils.forceMkdir(mk); 571 572 picPath += orderParam.getMailNo() + "/"; 573 574 //设置背景色为白色 575 g.setColor(Color.WHITE); 576 //设置颜色区域大小 577 g.fillRect(0, 0, IMG_WIDTH, IMG_HEIGHT); 578 579 /* 580 * 绘制表格 填充内容 581 * */ 582 //表格线条的颜色 583 g.setColor(Color.BLACK); 584 //边框加粗 585 g.setStroke(new BasicStroke(2.0f)); 586 //消除文本出现锯齿现象 587 g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 588 //表格的四个边框 589 g.drawLine(startWidth, startHeight, startWidth + 1198, startHeight); //上边框 590 591 g.drawLine(startWidth, startHeight, startWidth, startHeight + 1800); //左边框 592 g.drawLine(startWidth, startHeight + 1799, startWidth + 1198, startHeight + 1799); //下边框 593 g.drawLine(startWidth + 1197, startHeight, startWidth + 1197, startHeight + 1800); //右边框 594 595 //绘制表格内容 第一行 596 g.drawLine(startWidth, startHeight + 155, startWidth + 1198, startHeight + 155); 597 598 //A4纸打印是才有Logo 599 if (Integer.valueOf(printTyp) == ExpressConstant.ORDER_PRINT_TYP_A4) { 600 //插入Logo 601 Image logoImg = insertImage(LOGO_PATH, LOGO_WIDTH, LOGO_HEIGHT, true); 602 g.drawImage(logoImg, startWidth + 30, startHeight + 30, null); 603 //插入第二个logo (客服电话) 604 Image logoTelImg = insertImage(LOGO_TEL_PATH, LOGO_TEL_WIDTH, LOGO_TEL_HEIGHT, true); 605 g.drawImage(logoTelImg, startWidth + 920, startHeight + 30, null); 606 } 607 608 //E路标识 609 Font fontSfTyp = new Font("微软雅黑", Font.BOLD, 145); 610 g.setFont(fontSfTyp); 611 //E路标识 612 String sfProTypStr = orderParam.getEarthCarryFlag(); 613 g.drawString(sfProTypStr, startWidth + 445, startHeight + 130); 614 615 //绘制第二行 616 g.drawLine(startWidth, startHeight + 396, startWidth + 1198, startHeight + 396); 617 g.drawLine(startWidth + 750, startHeight + 155, startWidth + 750, startHeight + 396); 618 619 //生成code128c 条码 620 SFBarCodeGenerateUtil.generateBarCode(orderParam.getMailNo(), //运单号 621 picPath + "SFBarCoding_" + orderParam.getMailNo() + ".jpg", //图片名称 622 600, //图片宽度 623 120, //图片高度 624 SFBarCodeGenerateUtil.PICTURE_JPG); 625 //导入条码图片 626 Image sfBarImg = insertImage(picPath + "SFBarCoding_" + orderParam.getMailNo() + ".jpg", 0, 0, false); 627 g.drawImage(sfBarImg, startWidth + 80, startHeight + 191, null); 628 629 //设置字体 630 Font fontSfBarCode = new Font("黑体",Font.BOLD,35); 631 g.setFont(fontSfBarCode); 632 633 String sfBarCodeStr = orderParam.getMailNo(); 634 sfBarCodeStr = sfBarCodeStr.replaceAll("(.{3})", "$1 "); 635 g.drawString("母单号 " + sfBarCodeStr, startWidth + 150, startHeight + 355); 636 637 //绘制产品类型框 638 g.drawLine(startWidth + 750, startHeight + 240, startWidth + 1198, startHeight + 240); 639 Font fontSfProtypSub = new Font("黑体", Font.BOLD, 50); 640 g.setFont(fontSfProtypSub); 641 642 //产品类型字符串 643 String subSfProTypStr = orderParam.getExpressTyp(); 644 g.drawString(subSfProTypStr, startWidth + 850, startHeight + 220); 645 646 //目的地栏的绘制 647 g.drawLine(startWidth, startHeight + 563, startWidth + 1198, startHeight + 563); 648 g.drawLine(startWidth + 80, startHeight + 396, startWidth + 80, startHeight + 563); 649 650 //目的地填写 651 Font fontDest = new Font("黑体", Font.BOLD, 30); 652 g.setFont(fontDest); 653 //目的地标题 654 String destTitleStr = "目的地"; 655 char[] destTitleArray = destTitleStr.toCharArray(); 656 int destTitleWidth = startWidth + 40; 657 int destTitleHeight = startHeight + 460; 658 for (int i = 0; i < destTitleStr.length(); i++) { 659 g.drawString(String.valueOf(destTitleArray[i]), destTitleWidth, destTitleHeight); 660 destTitleHeight += 33; 661 } 662 663 //目的地代码 664 Font fontDestCode = new Font("Arial", Font.BOLD, 214); 665 g.setFont(fontDestCode); 666 //目的地代码字符串 667 String destCode = orderParam.getDestCode() == null ? "" : orderParam.getDestCode(); 668 g.drawString(destCode, startWidth + 90, startHeight + 555); 669 670 //收件人表格栏 671 g.drawLine(startWidth, startHeight + 720, startWidth + 1198, startHeight + 720); 672 g.drawLine(startWidth + 80, startHeight + 563, startWidth + 80, startHeight + 720); 673 674 //设置收件人标题字体 675 Font fontRevicer = new Font("黑体", Font.BOLD, 25); 676 g.setFont(fontRevicer); 677 //收件人标题字符串 678 String revicerTitleStr = "收件人"; 679 char[] revicerTitleArray = revicerTitleStr.toCharArray(); 680 int revicerTitleWidth = startWidth + 40; 681 int revicerTitleHeight = startHeight + 620; 682 for (int i = 0; i < revicerTitleStr.length(); i++) { 683 g.drawString(String.valueOf(revicerTitleArray[i]), revicerTitleWidth, revicerTitleHeight); 684 revicerTitleHeight += 31; 685 } 686 687 /* 688 * 收件人详细信息 689 * */ 690 String dContact = orderParam.getdContact(); //收件人姓名 691 String dTel = orderParam.getdTel(); //联系电话 692 String dMoblie = orderParam.getdMobile(); //联系人手机号 693 String dCompany = orderParam.getdCompany(); //公司名称 694 String dProvince = orderParam.getdProvince(); 695 String dCity = orderParam.getdCity(); 696 String dCounty = orderParam.getdCounty(); 697 String dAddress = orderParam.getdAddress(); //详细地址 698 699 String revicerInfo = dContact + " " + dTel + " " + dMoblie + " " + dCompany; 700 dAddress = dProvince + dCity + dCounty + dAddress; 701 702 //设置收件人信息字体 703 Font fontRevicerInfo = new Font("黑体", Font.BOLD, 35); 704 g.setFont(fontRevicerInfo); 705 g.drawString(revicerInfo, startWidth + 90, startHeight + 610); 706 //设置收件人详细地址字体 707 Font fontReviceAddress = new Font("黑体", Font.BOLD, 40); 708 g.setFont(fontReviceAddress); 709 if (dAddress.length() > 30) { 710 g.drawString(dAddress.substring(0, 30), startWidth + 90, startHeight + 655); 711 g.drawString(dAddress.substring(30, dAddress.length()), startWidth + 90, startHeight + 700); 712 } else { 713 g.drawString(dAddress, startWidth + 90, startHeight + 655); 714 } 715 716 //绘制寄件人表格 717 g.drawLine(startWidth, startHeight + 828, startWidth + 1198, startHeight +828); 718 g.drawLine(startWidth + 80, startHeight + 720, startWidth + 80, startHeight + 828); 719 720 //设置寄件人标题字体 721 Font fontSender = new Font("黑体", Font.BOLD, 25); 722 g.setFont(fontSender); 723 //寄件人标题字符串 724 String senderTitleStr = "寄件人"; 725 char[] senderTitleArray = senderTitleStr.toCharArray(); 726 int senderTitleWidth = startWidth + 40; 727 int senderTitleHeight = startHeight + 752; 728 for (int i = 0; i < senderTitleStr.length(); i++) { 729 g.drawString(String.valueOf(senderTitleArray[i]), senderTitleWidth, senderTitleHeight); 730 senderTitleHeight += 27; 731 } 732 733 734 /* 735 * 寄件人信息 736 * **/ 737 String jContact = orderParam.getjContact(); //寄件人姓名 738 String jTel = orderParam.getjTel(); //寄件人联系电话 739 String jMobile = orderParam.getjMobile(); 740 String jCompany = orderParam.getjCompany(); 741 String jProvince = orderParam.getjProvince(); 742 String jCity = orderParam.getjCity(); 743 String jCounty = orderParam.getjCounty(); 744 String jAddress = orderParam.getjAddress(); 745 746 String senderInfo = jContact + " " + jTel + " " + jMobile + " " + jCompany; 747 jAddress = jProvince + jCity + jCounty + jAddress; 748 749 //设置寄件人信息字体 750 Font fontSenderInfo = new Font("黑体", Font.PLAIN, 30); 751 g.setFont(fontSenderInfo); 752 g.drawString(senderInfo, startWidth + 90, startHeight + 752); 753 754 //设置寄件人详细地址字体 755 Font fontSenderAddress = new Font("黑体", Font.PLAIN, 30); 756 g.setFont(fontSenderAddress); 757 if (jAddress.length() > 27) { 758 g.drawString(jAddress.substring(0, 27), startWidth + 90, startHeight + 785); 759 g.drawString(jAddress.substring(27, jAddress.length()), startWidth + 90, startHeight + 817); 760 } else { 761 g.drawString(jAddress, startWidth + 90, startHeight + 785); 762 } 763 764 //绘制派送方式表格 765 g.drawLine(startWidth + 850, startHeight + 720, startWidth + 850, startHeight + 1080); 766 //设置派送类型字体 767 Font fontSenTyp = new Font("黑体", Font.BOLD, 55); 768 g.setFont(fontSenTyp); 769 770 //快递详细信息表格 771 g.drawLine(startWidth, startHeight + 972, startWidth + 850, startHeight + 972); 772 773 //快递详细信息 774 Font cellFont = new Font("黑体", Font.PLAIN, 22); 775 g.setFont(cellFont); 776 String[][] cellValue1 = { 777 {"付款方式:",orderParam.getPayMethod()}, 778 {"月结账号:",orderParam.getMonthSettleNo()}, 779 {"第三方地区:",orderParam.getThridArea()}, 780 {"实际重量:",orderParam.getRealWeight()} 781 }; 782 int cellLineHeight = startHeight + 855; 783 for (int i = 0; i < cellValue1.length; i++) { 784 g.drawString(cellValue1[i][0], startWidth + 30, cellLineHeight); 785 g.drawString(cellValue1[i][1], startWidth + 155, cellLineHeight); 786 cellLineHeight += 30; 787 } 788 String[][] cellValue2 = { 789 {"计费重量:",orderParam.getChargWeight()}, 790 {"声明价值:",orderParam.getDeclarPrice()}, 791 {"保价费用:",orderParam.getSupportFee()}, 792 {"定时派送:",orderParam.getSendTime()} 793 }; 794 cellLineHeight = startHeight + 855; 795 for (int i = 0; i < cellValue2.length; i++) { 796 g.drawString(cellValue2[i][0], startWidth + 355, cellLineHeight); 797 g.drawString(cellValue2[i][1], startWidth + 470, cellLineHeight); 798 cellLineHeight += 30; 799 } 800 String[][] cellValue3 = { 801 {"包装费用:",orderParam.getPackFee()}, 802 {"运费:",orderParam.getFreight()}, 803 {"费用合计:",orderParam.getSumFee()} 804 }; 805 cellLineHeight = startHeight + 855; 806 for (int i = 0; i < cellValue3.length; i++) { 807 g.drawString(cellValue3[i][0], startWidth + 655, cellLineHeight); 808 g.drawString(cellValue3[i][1], startWidth + 770, cellLineHeight); 809 cellLineHeight += 30; 810 } 811 812 //转寄协议客户 813 Font fowardFont = new Font("黑体", Font.BOLD, 25); 814 g.setFont(fowardFont); 815 String fowardStr = "转寄协议客户"; 816 g.drawString(fowardStr, startWidth + 693, startHeight + 965); 817 818 //托寄物 819 g.drawLine(startWidth + 80, startHeight + 972, startWidth + 80, startHeight + 1080); 820 //托寄物标题字符串 821 String articleTitleStr = "托寄物"; 822 char[] articleTitleArray = articleTitleStr.toCharArray(); 823 int articleTitleWidth = startWidth + 40; 824 int articleTitleHeight = startHeight + 1005; 825 for (int i = 0; i < articleTitleStr.length(); i++) { 826 g.drawString(String.valueOf(articleTitleArray[i]), articleTitleWidth, articleTitleHeight); 827 articleTitleHeight += 31; 828 } 829 830 //收件员信息 831 g.drawLine(startWidth + 600, startHeight + 972, startWidth + 600, startHeight + 1080); 832 Font receDriverFont = new Font("黑体", Font.PLAIN, 25); 833 g.setFont(receDriverFont); 834 String[][] receDriverStrs = { 835 {"收件员:",orderParam.getReviceDriver()}, 836 {"寄件日期:",orderParam.getSendDate()}, 837 {"派件员:",orderParam.getSendDriver()} 838 }; 839 cellLineHeight = startHeight + 1005; 840 for (int i = 0; i < receDriverStrs.length; i++) { 841 g.drawString(receDriverStrs[i][0], startWidth + 610, cellLineHeight); 842 g.drawString(receDriverStrs[i][1], startWidth + 730, cellLineHeight); 843 cellLineHeight += 31; 844 } 845 //签名 846 String signStr = "签名:"; 847 g.drawString(signStr, startWidth + 860, startHeight + 860); 848 //月日 849 String monthDay = "月 日"; 850 g.drawString(monthDay, startWidth + 1100, startHeight + 1070); 851 852 //母单与子单分割线 853 g.drawLine(startWidth, startHeight + 1080, startWidth + 1198, startHeight + 1080); 854 //--------------------------- 第二联信息 ----------------------------------// 855 g.drawLine(startWidth, startHeight + 1260, startWidth + 1198, startHeight + 1260); 856 g.drawLine(startWidth + 300, startHeight + 1080, startWidth + 300, startHeight + 1260); 857 //插入Logo 858 Image sublogoImg = insertImage(LOGO_PATH, LOGO_WIDTH, LOGO_HEIGHT, true); 859 g.drawImage(sublogoImg, startWidth + 40, startHeight + 1085, null); 860 //插入第二个logo (客服电话) 861 Image sublogoTelImg = insertImage(LOGO_TEL_PATH, LOGO_TEL_WIDTH, LOGO_TEL_HEIGHT, true); 862 g.drawImage(sublogoTelImg, startWidth + 50, startHeight + 1170, null); 863 864 //导入子单条码 865 Image sfSubBarImg = insertImage(picPath + "SFBarCoding_" + orderParam.getMailNo() + ".jpg", 0, 0, false); 866 g.drawImage(sfSubBarImg, startWidth + 400, startHeight + 1095, null); 867 868 //子单号 869 Font subOrderFont = new Font("黑体", Font.BOLD, 30); 870 g.setFont(subOrderFont); 871 g.drawString("母单号 " + sfBarCodeStr, startWidth + 460, startHeight + 1250); 872 873 //绘制寄件人表格 子单 874 g.drawLine(startWidth, startHeight + 1379, startWidth + 1198, startHeight + 1379); 875 g.drawLine(startWidth + 80, startHeight + 1260, startWidth + 80, startHeight + 1379); 876 //设置寄件人标题字体 877 Font fontsubSender = new Font("黑体", Font.BOLD, 30); 878 g.setFont(fontsubSender); 879 //寄件人标题字符串 880 String senderSubTitleStr = "寄件人"; 881 char[] senderSubTitleArray = senderSubTitleStr.toCharArray(); 882 int senderSubTitleWidth = startWidth + 40; 883 int senderSubTitleHeight = startHeight + 1295; 884 for (int i = 0; i < senderSubTitleStr.length(); i++) { 885 g.drawString(String.valueOf(senderSubTitleArray[i]), senderSubTitleWidth, senderSubTitleHeight); 886 senderSubTitleHeight += 33; 887 } 888 Font subJInfoFont = new Font("黑体", Font.PLAIN, 35); 889 g.setFont(subJInfoFont); 890 g.drawString(senderInfo, startWidth + 110, startHeight + 1295); 891 892 if (jAddress.length() > 30) { 893 g.drawString(jAddress.substring(0, 30), startWidth + 110, startHeight + 1330); 894 g.drawString(jAddress.substring(30, jAddress.length()), startWidth + 110, startHeight + 1365); 895 } else { 896 g.drawString(jAddress, startWidth + 110, startHeight + 1330); 897 } 898 899 //绘制收件人表格 子单 900 g.drawLine(startWidth, startHeight + 1499, startWidth + 1198, startHeight + 1499); 901 g.drawLine(startWidth + 80, startHeight + 1379, startWidth + 80, startHeight + 1499); 902 //收件人标题字符串 903 Font fontsubReveicer = new Font("黑体", Font.BOLD, 30); 904 g.setFont(fontsubReveicer); 905 String revicerSubTitleStr = "收件人"; 906 char[] revicerSubTitleArray = revicerSubTitleStr.toCharArray(); 907 int revicerSubTitleWidth = startWidth + 40; 908 int revicerSubTitleHeight = startHeight + 1415; 909 for (int i = 0; i < revicerSubTitleStr.length(); i++) { 910 g.drawString(String.valueOf(revicerSubTitleArray[i]), revicerSubTitleWidth, revicerSubTitleHeight); 911 revicerSubTitleHeight += 33; 912 } 913 914 Font subDInfoFont = new Font("黑体", Font.PLAIN, 35); 915 g.setFont(subDInfoFont); 916 g.drawString(revicerInfo, startWidth + 110, startHeight + 1415); 917 if (dAddress.length() > 30) { 918 g.drawString(dAddress.substring(0, 30), startWidth + 110, startHeight + 1450); 919 g.drawString(dAddress.substring(30, dAddress.length()), startWidth + 110, startHeight + 1486); 920 } else { 921 g.drawString(dAddress, startWidth + 110, startHeight + 1450); 922 } 923 g.dispose(); 924 File sfbarFile = new File(picPath + "SFBarCoding_" + orderParam.getMailNo() + ".jpg"); 925 if (sfbarFile.exists() && sfbarFile.isFile()) { 926 sfbarFile.delete(); 927 } 928 //生成订单图片 929 createImage(picPath + "SfOrderImage_" + orderParam.getMailNo() + ".jpg"); 930 if (isCompress) { 931 compressImg(picPath + "SfOrderImage_" + orderParam.getMailNo() + ".jpg", imgWidth, imgHeidht); 932 } 933 logger.info("订单生成成功. " + picPath + "SfOrderImage_" + orderParam.getMailNo() + ".jpg"); 934 return true; 935 } 936 } catch (Exception e) { 937 e.printStackTrace(); 938 } 939 return false; 940 } 941 942 /** 943 * 水平翻转图像 顺时针旋转90度、左右翻转 944 * @param bufferedimage 目标图像 945 * @return 946 */ 947 private static BufferedImage rotate90DX(BufferedImage bi) 948 { 949 int width = bi.getWidth(); 950 int height = bi.getHeight(); 951 952 BufferedImage biFlip = new BufferedImage(height, width, bi.getType()); 953 954 for(int i=0; i<width; i++) 955 for(int j=0; j<height; j++) 956 biFlip.setRGB(height-1-j, width-1-i, bi.getRGB(i, j)); 957 958 return biFlip; 959 } 960 961 962 /** 963 * 水平翻转图像 逆时针旋转90度、左右翻转 964 * @param bufferedimage 目标图像 965 * @return 966 */ 967 private static BufferedImage rotate90SX(BufferedImage bi) 968 { 969 int width = bi.getWidth(); 970 int height = bi.getHeight(); 971 972 BufferedImage biFlip = new BufferedImage(height, width, bi.getType()); 973 974 for(int i=0; i<width; i++) 975 for(int j=0; j<height; j++) 976 biFlip.setRGB(j, i, bi.getRGB(i, j)); 977 978 return biFlip; 979 } 980 981 /** 982 * 根据规定尺寸压缩图片 983 * @param imgPath 图片路径 984 * @param width 图片宽度 985 * @param height 图片高度 986 * */ 987 private static void compressImg(String imgPath, int width, int height){ 988 /** 989 * 设置条码图片的尺寸 990 * */ 991 BufferedInputStream bis = null; 992 BufferedOutputStream out = null; 993 FileOutputStream fis = null; 994 try { 995 File sfFile = new File(imgPath); 996 if (sfFile.isFile() && sfFile.exists()) { 997 //读取图片 998 bis = new BufferedInputStream(new FileInputStream(imgPath)); 999 //转换成图片对象 1000 Image bi = ImageIO.read(bis).getScaledInstance(width, height, Image.SCALE_SMOOTH); 1001 //构建图片流 设置图片宽和高 1002 BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 1003 //绘制改变尺寸后的图 1004 tag.getGraphics().drawImage(bi, 0, 0,width, height, null); 1005 //保存图片 1006 fis = new FileOutputStream(imgPath); 1007 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fis); 1008 JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag); 1009 //设置压缩图片质量 1010 jep.setQuality(3f, true); 1011 encoder.encode(tag, jep); 1012 } 1013 } catch (Exception e) { 1014 e.printStackTrace(); 1015 } finally { 1016 try { 1017 if (fis != null) fis.close(); 1018 if (out != null) out.close(); 1019 if (bis != null) bis.close(); 1020 } catch (Exception e2) { 1021 e2.printStackTrace(); 1022 } 1023 } 1024 } 1025 1026 //创建目录 1027 private static boolean createDir(String destDirName){ 1028 try { 1029 File file = new File(destDirName); 1030 if (destDirName.endsWith(File.separator)) 1031 destDirName += File.separator; 1032 if (file.mkdir()) 1033 return true; 1034 } catch (Exception e) { 1035 e.printStackTrace(); 1036 } 1037 return false; 1038 } 1039 1040 //删除目录 1041 public static boolean removeDir(File dir){ 1042 File[] files = dir.listFiles(); 1043 for (File file : files) { 1044 if (file.isDirectory()) { 1045 return removeDir(file); 1046 } else { 1047 return file.delete(); 1048 } 1049 } 1050 return dir.delete(); 1051 } 1052 1053 //删除目录 1054 public static boolean deleteMk(String dirPath){ 1055 File dirFile = new File(dirPath); 1056 if (dirFile.isDirectory()) { 1057 File[] files = dirFile.listFiles(); 1058 for (int i = 0; i < files.length; i++) { 1059 files[i].delete(); 1060 } 1061 } 1062 return dirFile.delete(); 1063 } 1064 1065 /** 1066 * 把文件转换为byte[] 1067 * @param filePath 文件路径 1068 * */ 1069 public static byte[] getFileBytes(String filePath){ 1070 byte[] buffer = null; 1071 FileInputStream fis = null; 1072 ByteArrayOutputStream bos = null; 1073 try { 1074 File file = new File(filePath); 1075 fis = new FileInputStream(file); 1076 bos = new ByteArrayOutputStream(1000); 1077 byte[] b = new byte[1000]; 1078 int n; 1079 while ((n = fis.read(b)) != -1) { 1080 bos.write(b, 0, n); 1081 } 1082 buffer = bos.toByteArray(); 1083 } catch (FileNotFoundException e) { 1084 e.printStackTrace(); 1085 } catch (IOException e) { 1086 e.printStackTrace(); 1087 } finally { 1088 try { 1089 if (bos != null) { 1090 bos.close(); 1091 } 1092 if (fis != null) { 1093 fis.close(); 1094 } 1095 } catch (Exception e2) { 1096 e2.printStackTrace(); 1097 } 1098 } 1099 return buffer; 1100 } 1101 }
三、生成电子面单所需参数类。
SfPrintOrderParam.java
1 package testNetty.wu; 2 3 import java.io.Serializable; 4 import java.util.ArrayList; 5 import java.util.List; 6 7 /** 8 * 打印订单所需要的参数 9 * */ 10 public class SfPrintOrderParam implements Serializable{ 11 12 /** 13 * 14 */ 15 private static final long serialVersionUID = 1L; 16 17 //陆运标识 18 private String earthCarryFlag = ""; 19 //母运单号 20 private String mailNo = ""; 21 //子运单号 22 private List<String> subMailNos = new ArrayList<String>(); 23 //目的地代码 24 private String destCode = ""; 25 //产品类型 26 private String expressTyp = ""; 27 //收件人姓名 28 private String dContact = ""; 29 //收件人公司名称 30 private String dCompany = ""; 31 //收件人联系方式 32 private String dTel = ""; 33 //收件人手机号 34 private String dMobile = ""; 35 //收件人省份 36 private String dProvince = ""; 37 //收件人城市 38 private String dCity = ""; 39 //收件人区、县 40 private String dCounty = ""; 41 //收件人详细地址 42 private String dAddress = ""; 43 //寄件人姓名 44 private String jContact = ""; 45 //寄件人公司名称 46 private String jCompany = ""; 47 //寄件人联系方式 48 private String jTel = ""; 49 //寄件人手机号 50 private String jMobile = ""; 51 //寄件人省份 52 private String jProvince = ""; 53 //寄件人城市 54 private String jCity = ""; 55 //寄件人区、县 56 private String jCounty = ""; 57 //寄件人详细地址 58 private String jAddress = ""; 59 //付款方式 60 private String payMethod = ""; 61 //月结账号 62 private String monthSettleNo = ""; 63 //第三方地区 64 private String thridArea = ""; 65 //实际重量 66 private String realWeight = ""; 67 //计费重量 68 private String chargWeight = ""; 69 //声明价值 70 private String declarPrice = ""; 71 //保价费用 72 private String supportFee = ""; 73 //定时派送时间 74 private String sendTime = ""; 75 //包装费用 76 private String packFee = ""; 77 //运费 78 private String freight = ""; 79 //费用合计 80 private String sumFee = ""; 81 //收件员编号 82 private String reviceDriver = ""; 83 //寄件日期 84 private String sendDate = ""; 85 //派件员 86 private String sendDriver = ""; 87 //拖寄物信息 88 private String cargoContent = ""; 89 90 public SfPrintOrderParam() { 91 super(); 92 // TODO Auto-generated constructor stub 93 } 94 95 public String getEarthCarryFlag() { 96 return earthCarryFlag; 97 } 98 public void setEarthCarryFlag(String earthCarryFlag) { 99 this.earthCarryFlag = earthCarryFlag; 100 } 101 public String getMailNo() { 102 return mailNo; 103 } 104 public void setMailNo(String mailNo) { 105 this.mailNo = mailNo; 106 } 107 public List<String> getSubMailNos() { 108 return subMailNos; 109 } 110 public String getExpressTyp() { 111 return expressTyp; 112 } 113 114 public void setExpressTyp(String expressTyp) { 115 this.expressTyp = expressTyp; 116 } 117 118 public void setSubMailNos(List<String> subMailNos) { 119 this.subMailNos = subMailNos; 120 } 121 public String getDestCode() { 122 return destCode; 123 } 124 public void setDestCode(String destCode) { 125 this.destCode = destCode; 126 } 127 public String getdContact() { 128 return dContact; 129 } 130 public void setdContact(String dContact) { 131 this.dContact = dContact; 132 } 133 public String getdCompany() { 134 return dCompany; 135 } 136 public void setdCompany(String dCompany) { 137 this.dCompany = dCompany; 138 } 139 public String getdTel() { 140 return dTel; 141 } 142 public void setdTel(String dTel) { 143 this.dTel = dTel; 144 } 145 public String getdMobile() { 146 return dMobile; 147 } 148 public void setdMobile(String dMobile) { 149 this.dMobile = dMobile; 150 } 151 public String getdProvince() { 152 return dProvince; 153 } 154 public void setdProvince(String dProvince) { 155 this.dProvince = dProvince; 156 } 157 public String getdCity() { 158 return dCity; 159 } 160 public void setdCity(String dCity) { 161 this.dCity = dCity; 162 } 163 public String getdCounty() { 164 return dCounty; 165 } 166 public void setdCounty(String dCounty) { 167 this.dCounty = dCounty; 168 } 169 public String getdAddress() { 170 return dAddress; 171 } 172 public void setdAddress(String dAddress) { 173 this.dAddress = dAddress; 174 } 175 public String getjContact() { 176 return jContact; 177 } 178 public void setjContact(String jContact) { 179 this.jContact = jContact; 180 } 181 public String getjCompany() { 182 return jCompany; 183 } 184 public void setjCompany(String jCompany) { 185 this.jCompany = jCompany; 186 } 187 public String getjTel() { 188 return jTel; 189 } 190 public void setjTel(String jTel) { 191 this.jTel = jTel; 192 } 193 public String getjMobile() { 194 return jMobile; 195 } 196 public void setjMobile(String jMobile) { 197 this.jMobile = jMobile; 198 } 199 public String getjProvince() { 200 return jProvince; 201 } 202 public void setjProvince(String jProvince) { 203 this.jProvince = jProvince; 204 } 205 public String getjCity() { 206 return jCity; 207 } 208 public void setjCity(String jCity) { 209 this.jCity = jCity; 210 } 211 public String getjCounty() { 212 return jCounty; 213 } 214 public void setjCounty(String jCounty) { 215 this.jCounty = jCounty; 216 } 217 public String getjAddress() { 218 return jAddress; 219 } 220 public void setjAddress(String jAddress) { 221 this.jAddress = jAddress; 222 } 223 public String getPayMethod() { 224 return payMethod; 225 } 226 public void setPayMethod(String payMethod) { 227 this.payMethod = payMethod; 228 } 229 public String getMonthSettleNo() { 230 return monthSettleNo; 231 } 232 public void setMonthSettleNo(String monthSettleNo) { 233 this.monthSettleNo = monthSettleNo; 234 } 235 public String getThridArea() { 236 return thridArea; 237 } 238 public void setThridArea(String thridArea) { 239 this.thridArea = thridArea; 240 } 241 public String getRealWeight() { 242 return realWeight; 243 } 244 public void setRealWeight(String realWeight) { 245 this.realWeight = realWeight; 246 } 247 public String getChargWeight() { 248 return chargWeight; 249 } 250 public void setChargWeight(String chargWeight) { 251 this.chargWeight = chargWeight; 252 } 253 public String getDeclarPrice() { 254 return declarPrice; 255 } 256 public void setDeclarPrice(String declarPrice) { 257 this.declarPrice = declarPrice; 258 } 259 public String getSupportFee() { 260 return supportFee; 261 } 262 public void setSupportFee(String supportFee) { 263 this.supportFee = supportFee; 264 } 265 public String getSendTime() { 266 return sendTime; 267 } 268 public void setSendTime(String sendTime) { 269 this.sendTime = sendTime; 270 } 271 public String getPackFee() { 272 return packFee; 273 } 274 public void setPackFee(String packFee) { 275 this.packFee = packFee; 276 } 277 public String getFreight() { 278 return freight; 279 } 280 public void setFreight(String freight) { 281 this.freight = freight; 282 } 283 public String getSumFee() { 284 return sumFee; 285 } 286 public void setSumFee(String sumFee) { 287 this.sumFee = sumFee; 288 } 289 public String getReviceDriver() { 290 return reviceDriver; 291 } 292 public void setReviceDriver(String reviceDriver) { 293 this.reviceDriver = reviceDriver; 294 } 295 public String getSendDate() { 296 return sendDate; 297 } 298 public void setSendDate(String sendDate) { 299 this.sendDate = sendDate; 300 } 301 public String getSendDriver() { 302 return sendDriver; 303 } 304 public void setSendDriver(String sendDriver) { 305 this.sendDriver = sendDriver; 306 } 307 308 public String getCargoContent() { 309 return cargoContent; 310 } 311 public void setCargoContent(String cargoContent) { 312 this.cargoContent = cargoContent; 313 } 314 315 }
四、测试运行此程序
1 package testNetty.wu; 2 3 /** 4 * 5 */ 6 public class App 7 { 8 public static void main( String[] args ) 9 { 10 SfPrintOrderParam param = new SfPrintOrderParam(); 11 12 param.setMailNo("883987638272"); 13 param.setEarthCarryFlag("E"); 14 param.setDestCode("0311"); 15 param.setdContact("李XX"); 16 param.setdCompany("河北北国商城"); 17 param.setdMobile("13588911223"); 18 param.setdProvince("河北省"); 19 param.setdCity("石家庄市"); 20 param.setdCounty("桥西区"); 21 param.setdAddress("华润万象城"); 22 param.setjContact("吴XX"); 23 param.setjMobile("13716533121"); 24 param.setjCompany("北京XXX科技公司"); 25 param.setjProvince("北京"); 26 param.setjCity("北京市"); 27 param.setjCounty("朝阳区"); 28 param.setjCounty("东三环24号XXX大厦"); 29 30 31 SFOrderGenerateUtil.generateOrders( 32 "C:\\Users\\Administrator\\Desktop\\", 33 param, 34 "1", 35 false, 36 600, 37 400); 38 } 39 }
五、生成电子面单图片效果 如图: