소스 검색

提交代码

xwh 4 년 전
부모
커밋
cb63936c33

+ 5 - 0
kmall-admin/pom.xml

@@ -111,6 +111,11 @@
             <version>5.2.0</version>
         </dependency>
         <dependency>
+            <groupId>net.sf.barcode4j</groupId>
+            <artifactId>barcode4j-light</artifactId>
+            <version>2.0</version>
+        </dependency>
+        <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-test</artifactId>
             <version>4.3.7.RELEASE</version>

+ 77 - 0
kmall-admin/src/main/java/com/kmall/admin/utils/pdf/BarcodeUtil.java

@@ -0,0 +1,77 @@
+package com.kmall.admin.utils.pdf;
+
+
+import org.apache.commons.lang3.ObjectUtils;
+import org.krysalis.barcode4j.HumanReadablePlacement;
+import org.krysalis.barcode4j.impl.code128.Code128Bean;
+import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
+
+import javax.imageio.stream.FileImageOutputStream;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+
+public class BarcodeUtil {
+
+
+    /**
+     * 生成code128条形码
+     *
+     * @param height        条形码的高度
+     * @param width         条形码的宽度
+     * @param message       要生成的文本
+     * @param withQuietZone 是否两边留白
+     * @param hideText      隐藏可读文本
+     * @return 图片对应的字节码
+     */
+    public static byte[] generateBarCode128(String message, Double height, Double width, boolean withQuietZone, boolean hideText) {
+        Code128Bean bean = new Code128Bean();
+        // 分辨率
+        int dpi = 512;
+        // 设置两侧是否留白
+        bean.doQuietZone(withQuietZone);
+
+        // 设置条形码高度和宽度
+        bean.setBarHeight((double) ObjectUtils.defaultIfNull(height, 9.0D));
+        if (width != null) {
+            bean.setModuleWidth(width);
+        }
+        // 设置文本位置(包括是否显示)
+        if (hideText) {
+            bean.setMsgPosition(HumanReadablePlacement.HRP_NONE);
+        }
+        // 设置图片类型
+        String format = "image/png";
+
+        ByteArrayOutputStream ous = new ByteArrayOutputStream();
+        BitmapCanvasProvider canvas = new BitmapCanvasProvider(ous, format, dpi,
+                BufferedImage.TYPE_BYTE_BINARY, false, 0);
+
+        // 生产条形码
+        bean.generateBarcode(canvas, message);
+        try {
+            canvas.finish();
+        } catch (IOException e) {
+            //ByteArrayOutputStream won't happen
+        }
+
+        return ous.toByteArray();
+    }
+
+    //byte数组到图片到硬盘上
+    public static void byte2image(byte[] data, String path){
+        if(data.length<3||path.equals("")) return;//判断输入的byte是否为空
+        try{
+            FileImageOutputStream imageOutput = new FileImageOutputStream(new File(path));//打开输入流
+            imageOutput.write(data, 0, data.length);//将byte写入硬盘
+            imageOutput.close();
+            System.out.println("Make Picture success,Please find image in " + path);
+        } catch(Exception ex) {
+            System.out.println("Exception: " + ex);
+            ex.printStackTrace();
+        }
+    }
+
+
+}

+ 11 - 5
kmall-admin/src/main/java/com/kmall/admin/utils/pdf/type/PDFWrite_nohead_36.java

@@ -1,6 +1,8 @@
 package com.kmall.admin.utils.pdf.type;
 
+import com.kmall.admin.utils.pdf.BarcodeUtil;
 import com.kmall.api.entity.exportpdf.PDFGoodsDto;
+import com.kmall.common.fileserver.util.FileManager;
 import com.lowagie.text.*;
 import com.lowagie.text.Font;
 import com.lowagie.text.Image;
@@ -9,6 +11,7 @@ import com.lowagie.text.pdf.*;
 import java.awt.*;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.util.UUID;
 
 /**
  * @author zhangchuangbiao
@@ -28,10 +31,10 @@ public class PDFWrite_nohead_36 {
         String path = uploadDir;
         FileOutputStream out = new FileOutputStream(path);
 
-//        doc.setMargins(0,0,0,0);
 
         writer.setPdfVersion(PdfWriter.PDF_VERSION_1_2);//版本(默认1.4)
         doc.open();// 打开文档
+        doc.setMargins(0,0,0,0);
 
         // -----------------------标签头----------------------
         for (int i = 0; i < 9; i++) {
@@ -49,7 +52,7 @@ public class PDFWrite_nohead_36 {
         table = new PdfPTable(4);
 
         for (int i = 0; i < 4; i++) {
-            setTable(bfHei, table, 13, pdfGoodsDto.getProductName());
+            setTable(bfHei, table, 10, pdfGoodsDto.getProductName());
         }
 
         doc.add(table);
@@ -113,8 +116,10 @@ public class PDFWrite_nohead_36 {
 
 
         doc.add(table);
-
+        String dtoBarCode = pdfGoodsDto.getBarCode();
         table = new PdfPTable(4);
+        byte[] bytes = BarcodeUtil.generateBarCode128(dtoBarCode, 9.0d, 1.28d, false, true);
+        String uploadUrl = FileManager.upload(dtoBarCode + UUID.randomUUID().toString(), bytes, String.valueOf(bytes.length));
         for (int i = 0; i < 4; i++) {
             // --------------底部黑色和条形码区域-------------------------------
             PdfPTable pdfPTable7 = new PdfPTable(2);
@@ -122,7 +127,7 @@ public class PDFWrite_nohead_36 {
             font.setColor(Color.WHITE);
             Paragraph PLU = new Paragraph(pdfGoodsDto.getPlu(), font);
             Paragraph blankParagraph = new Paragraph("                        ", font);
-            Paragraph barCode = new Paragraph(pdfGoodsDto.getBarCode().substring(pdfGoodsDto.getBarCode().length()-4), font);
+            Paragraph barCode = new Paragraph(dtoBarCode.substring(dtoBarCode.length()-4), font);
             blankParagraph.add(barCode);
             PLU.add(blankParagraph);
             PLU.setAlignment(Element.ALIGN_CENTER);
@@ -134,7 +139,8 @@ public class PDFWrite_nohead_36 {
             pluCell.setHorizontalAlignment(Element.ALIGN_LEFT); // 水平居中
             pluCell.setVerticalAlignment(Element.ALIGN_MIDDLE); // 垂直居中
             // -------------条形码图片
-            Image img = Image.getInstance("E:\\demo\\barCode.jpg");
+
+            Image img = Image.getInstance(uploadUrl);
             img.setAlignment(Image.ALIGN_CENTER);  //设置图片居中
             img.setBorder(Image.NO_BORDER);
             img.setBorderColor(Color.WHITE);

+ 1 - 1
kmall-manager/src/main/resources/conf/print.properties

@@ -1,2 +1,2 @@
 font.url=/static/font/ams1015.ttf
-upload.dir=H:/Demo/code_1.pdf
+upload.dir=E:/demo/code_1.pdf