Эх сурвалжийг харах

3.3.0 签到表条码增加页码

xiaofei 1 жил өмнө
parent
commit
79e6b65d05

+ 57 - 21
distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/CreatePrintPdfUtil.java

@@ -28,6 +28,7 @@ public class CreatePrintPdfUtil {
      *
      * @param pdfFillDto   签到表数据
      * @param destFileName 文件名
+     * @param diallel      是否双列显示
      */
     public File createSignPdf(PdfSignDto pdfFillDto, String destFileName, Boolean diallel) throws Exception {
 
@@ -43,7 +44,7 @@ public class CreatePrintPdfUtil {
             pdfWriter = PdfWriter.getInstance(document, fos);
 
             //3、设置pdf页眉和页脚和水印
-            MyHeaderFooter headerFooter = new MyHeaderFooter();
+            MyHeaderFooter headerFooter = new MyHeaderFooter(pdfFillDto.getPackageNumber());
             pdfWriter.setPageEvent(headerFooter);
 
             // 3:打开文档
@@ -117,18 +118,15 @@ public class CreatePrintPdfUtil {
         // 空格
         Paragraph blank = new Paragraph(" ");
         // 标题table
-        PdfPTable titleTable = PdfFillUtils.createTable(new float[]{33, 34, 33});
-        titleTable.addCell(PdfFillUtils.createCell("", null, null, Element.ALIGN_CENTER, 15, 3, 1));
-        titleTable.addCell(PdfFillUtils.createCell(pdfFillDto.getTitle(), PdfFillUtils.textFont14, null, Element.ALIGN_CENTER, 15, 3, 1));
-        // 条码
-        Image code128Image = PdfFillUtils.createBarcode(pdfWriter, pdfFillDto.getPackageNumber(), false, null, null);
-        code128Image.scalePercent(100);
-        titleTable.addCell(PdfFillUtils.createCell(code128Image, 50f, Element.ALIGN_RIGHT, 15, 3, 1));
-        document.add(titleTable);
+//        PdfPTable titleTable = PdfFillUtils.createTable(new float[]{100});
+//        titleTable.addCell(PdfFillUtils.createCell(pdfFillDto.getTitle(), PdfFillUtils.textFont16, null, Element.ALIGN_CENTER, 15, 3, 1));
+//        titleTable.getDefaultCell().setFixedHeight(50f);
+//        document.add(titleTable);
 
 
         // 基础信息表格
         PdfPTable basicTable = PdfFillUtils.createTable(6);
+        basicTable.addCell(PdfFillUtils.createTitleCell(pdfFillDto.getTitle(), PdfFillUtils.textFont16, 60f, 15, 1, 6));
         List<Map<String, String>> basicPlate = pdfFillDto.getBasicPlate();
         for (Map<String, String> stringMap : basicPlate) {
             basicTable.addCell(PdfFillUtils.createCell(stringMap.get("name") + ":" + stringMap.get("value"), PdfFillUtils.textFont11, null, Element.ALIGN_LEFT, 0, 1, 3));
@@ -215,7 +213,8 @@ public class CreatePrintPdfUtil {
                 }
             }
         }
-
+        //将表格的第一行设置为表头 让它在每一页都显示出来
+        studentTable.setHeaderRows(1);
         document.add(studentTable);
 
         document.add(blank);
@@ -410,6 +409,12 @@ public class CreatePrintPdfUtil {
      * 添加页眉、页脚
      */
     public static class MyHeaderFooter extends PdfPageEventHelper {
+        private String packageCode;
+
+        public MyHeaderFooter(String packageCode) {
+            this.packageCode = packageCode;
+        }
+
         // 总页数
         PdfTemplate totalPage;
 
@@ -423,27 +428,58 @@ public class CreatePrintPdfUtil {
         // 一页加载完成触发,写入页眉和页脚
         @Override
         public void onEndPage(PdfWriter writer, Document document) {
-            PdfPTable table = new PdfPTable(3);
+            // 添加页眉
+            addHeader(writer);
+            // 添加页脚
+            addFooter(writer);
+
+        }
+
+        private void addHeader(PdfWriter writer) {
+            String packageNumber = packageCode.concat(String.valueOf(writer.getPageNumber()));
+            PdfPTable table = new PdfPTable(2);
+            try {
+                table.setTotalWidth(PageSize.A4.getWidth() - 80);
+                table.setWidths(new int[]{80, 20});
+                table.setLockedWidth(true);
+                table.getDefaultCell().setFixedHeight(0f);
+//                table.getDefaultCell().setBorder(Rectangle.NO_BORDER);
+//                table.getDefaultCell().setBorderWidth(0.5f);
+
+                table.addCell(PdfFillUtils.createCell("", null, null, Element.ALIGN_CENTER, 15, 1, 1));
+                table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
+                // 条码
+                Image code128Image = PdfFillUtils.createBarcode(writer, packageNumber, false, null, null);
+                code128Image.scalePercent(100);
+                table.addCell(PdfFillUtils.createCellBarCode(code128Image, 30f, Element.ALIGN_RIGHT, 15, 1, 1));
+                // 页眉
+                table.writeSelectedRows(0, -1, 40, PageSize.A4.getHeight() - 5, writer.getDirectContent());
+            } catch (Exception de) {
+                throw new ExceptionConverter(de);
+            }
+        }
+
+        private void addFooter(PdfWriter writer) {
+            PdfPTable table = new PdfPTable(2);
             try {
                 table.setTotalWidth(PageSize.A4.getWidth() - 80);
-                table.setWidths(new int[]{24, 24, 3});
+                table.setWidths(new int[]{50, 50});
                 table.setLockedWidth(true);
-                table.getDefaultCell().setFixedHeight(-10);
-                table.getDefaultCell().setBorder(Rectangle.BOTTOM);
+                table.getDefaultCell().setFixedHeight(-10f);
+                table.getDefaultCell().setBorder(Rectangle.NO_BORDER);
                 table.getDefaultCell().setBorderWidth(0.5f);
 
-                table.addCell(new Paragraph("", PdfFillUtils.textFont8));// 可以直接使用addCell(str),不过不能指定字体,中文无法显示
                 table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
                 table.addCell(new Paragraph("第" + writer.getPageNumber() + "页   /", PdfFillUtils.textFont8));
                 // 总页数
                 PdfPCell cell = new PdfPCell(Image.getInstance(totalPage));
-                cell.setBorder(Rectangle.BOTTOM);
+                cell.setBorder(Rectangle.NO_BORDER);
                 table.addCell(cell);
                 // 将页眉写到document中,位置可以指定,指定到下面就是页脚
                 // 页眉
-                table.writeSelectedRows(0, -1, 40, PageSize.A4.getHeight() - 20, writer.getDirectContent());
+//                table.writeSelectedRows(0, -1, 40, PageSize.A4.getHeight() - 10, writer.getDirectContent());
                 // 页脚
-//                table.writeSelectedRows(0, -1, 40, 40, writer.getDirectContent());
+                table.writeSelectedRows(0, -1, 40, 20, writer.getDirectContent());
             } catch (Exception de) {
                 throw new ExceptionConverter(de);
             }
@@ -519,7 +555,7 @@ public class CreatePrintPdfUtil {
 
         // 考生信息
         List<Map<String, String>> studentPlate = new ArrayList<>();
-        for (int i = 0; i < 61; i++) {
+        for (int i = 0; i < 150; i++) {
             Map<String, String> studentMap = new HashMap<>();
             String seq = String.valueOf(i + 1);
             studentMap.put("seq", seq);
@@ -577,8 +613,8 @@ public class CreatePrintPdfUtil {
 
         try {
             CreatePrintPdfUtil createPrintPdfUtil = new CreatePrintPdfUtil();
-            createPrintPdfUtil.createSignPdf(pdfFillDto, "D:/sign.pdf", false);
-            createPrintPdfUtil.createPackagePdf(pdfPackageDto, "D:/package.pdf");
+            createPrintPdfUtil.createSignPdf(pdfFillDto, "/Users/xiaofei/sign.pdf", true);
+//            createPrintPdfUtil.createPackagePdf(pdfPackageDto, "D:/package.pdf");
         } catch (Exception e) {
             e.printStackTrace();
         }

+ 59 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/PdfFillUtils.java

@@ -1,27 +1,20 @@
 package com.qmth.distributed.print.business.util;
 
-import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.itextpdf.awt.AsianFontMapper;
 import com.itextpdf.text.*;
 import com.itextpdf.text.pdf.*;
-import com.qmth.distributed.print.business.bean.dto.ExamStudentCourseDto;
 import com.qmth.distributed.print.business.bean.dto.PdfPackageDto;
 import com.qmth.distributed.print.business.bean.dto.PdfSignDto;
 import com.qmth.distributed.print.business.entity.BasicTemplate;
-import com.qmth.distributed.print.business.entity.ExamDetailCourse;
-import com.qmth.distributed.print.business.entity.ExamStudent;
-import com.qmth.distributed.print.business.enums.StudentClazzEnum;
 import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.teachcloud.common.contant.SpringContextHolder;
-import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.enums.ClassifyEnum;
-import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.*;
+import java.io.File;
 import java.util.List;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -366,6 +359,37 @@ public class PdfFillUtils {
         return cell;
     }
 
+    /**
+     * 填充table
+     *
+     * @param value       cell内容
+     * @param font        字体
+     */
+    public static PdfPCell createTitleCell(String value, Font font, float fixedHeight, int disableBorderSide, int rowspan, int colspan) {
+        PdfPCell cell = new PdfPCell();
+        cell.setBorderWidth(0.5F);
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
+        cell.setFixedHeight(fixedHeight);
+//        cell.setUseAscender(true);
+//        cell.setNoWrap(false);
+        if (font != null) {
+            cell.setPhrase(new Phrase(value, font));
+        } else {
+            cell.setPhrase(new Phrase(value));
+        }
+        if (disableBorderSide > 0) {
+            cell.disableBorderSide(disableBorderSide);
+        }
+        if (rowspan > 0) {
+            cell.setRowspan(rowspan);
+        }
+        if (colspan > 0) {
+            cell.setColspan(colspan);
+        }
+        return cell;
+    }
+
     /**
      * 填充table
      *
@@ -421,6 +445,33 @@ public class PdfFillUtils {
         return cell;
     }
 
+    /**
+     * 填充table
+     *
+     * @param image       cell内容
+     * @param fixedHeight 垂直对齐方式
+     */
+    public static PdfPCell createCellBarCode(Image image, float fixedHeight, int horizontalAlignment, int disableBorderSide, int rowspan, int colspan) {
+        PdfPCell cell = new PdfPCell(image);
+        cell.setBorderWidth(0.5F);
+        cell.setVerticalAlignment(Element.ALIGN_TOP);
+        cell.setUseAscender(true);
+        cell.setHorizontalAlignment(horizontalAlignment);
+        if (fixedHeight > 0) {
+            cell.setFixedHeight(fixedHeight);
+        }
+        if (disableBorderSide > 0) {
+            cell.disableBorderSide(disableBorderSide);
+        }
+        if (rowspan > 0) {
+            cell.setRowspan(rowspan);
+        }
+        if (colspan > 0) {
+            cell.setColspan(colspan);
+        }
+        return cell;
+    }
+
     /**
      * 创建指定列宽、列数的表格
      *