PDF导出-复杂样式【像搭积木一样排版】

可实现导出复杂样式的PDF文件

pom 导入依赖

        <dependency>
            <groupId>com.lowagie</groupId>
            <artifactId>itext</artifactId>
            <version>2.1.7</version>
        </dependency>
        <dependency>
            <groupId>com.lowagie</groupId>
            <artifactId>itext-rtf</artifactId>
            <version>2.1.7</version>
        </dependency>

code

package com.ly.education.cultivationprocess.server.utils;

import com.lowagie.text.*;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;
import org.apache.commons.lang.StringUtils;

import java.io.*;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

public class PdfView {

    public final static int endTableMaxRowPdf = 4;

    public final static int fontSize7 = 7;
    public final static String path = "D:\\opt\\";

    public static void main(String[] args) {
        previewAction5();
    }

    /**
     * 学籍卡预览
     */
    public static synchronized void previewAction3() {

        Document document = new Document(PageSize.A3.rotate(), 1, 1, 1, 1);
        PdfWriter writer;
        OutputStream outputStream = null;
        File pdfFile = null;
        String destPath = "";
        try {
            File rootFile = new File(path);
            //不存在文件就创建
            if (!rootFile.exists()) {
                boolean isCreate = rootFile.mkdirs();
            }

            Long xtsjmz = System.currentTimeMillis();
            String timeStr = xtsjmz.toString();
            //时间戳
            destPath = path + timeStr;
            pdfFile = new File(destPath + "3.pdf");
            outputStream = new FileOutputStream(pdfFile);

            //输出
            writer = PdfWriter.getInstance(document, outputStream);
            writer.setViewerPreferences(PdfWriter.FitWindow);
            document.open();

            // 构造pdf内容
            for (int i = 0; i < 2; i++) {
                getPdfTable3(document);
                document.newPage();
            }

            document.close();
            writer.close();
            outputStream.flush();

        } catch (DocumentException | IOException ignored) {
        } finally {
            try {
                document.close();
                if (outputStream != null) {
                    outputStream.close();
                }
            } catch (IOException ignored) {
            }
        }
    }

    /**
     * 学籍卡预览(5年制)
     */
    public static synchronized void previewAction5() {

        Document document = new Document(PageSize.A3.rotate(), 2, 2, 2, 2);
        PdfWriter writer;
        OutputStream outputStream = null;
        File pdfFile = null;
        String destPath = "";
        try {
            File rootFile = new File(path);
            //不存在文件就创建
            if (!rootFile.exists()) {
                boolean isCreate = rootFile.mkdirs();
            }
            Long xtsjmz = System.currentTimeMillis();
            String timeStr = xtsjmz.toString();
            //时间戳
            destPath = path + timeStr;
            pdfFile = new File(destPath + "5.pdf");
            outputStream = new FileOutputStream(pdfFile);

            //输出
            writer = PdfWriter.getInstance(document, outputStream);
            writer.setViewerPreferences(PdfWriter.FitWindow);
            document.open();

            // 构造pdf内容
            for (int i = 0; i < 10; i++) {
                getPdfTable5(document);
                document.newPage();
            }

            document.close();
            writer.close();
            outputStream.flush();

        } catch (Exception ignored) {
        } finally {
            try {
                document.close();
                if (outputStream != null) {
                    outputStream.close();
                }
            } catch (IOException ignored) {
            }
        }
    }

    /**
     * 5年制模板预览
     *
     * @param document
     * @throws DocumentException
     * @throws IOException
     */
    private static void getPdfTable5(Document document) throws DocumentException {

        BaseFont baseFont = baseFontKt();

        //8号字体
        com.lowagie.text.Font font8 =
                new com.lowagie.text.Font(baseFont, 8, com.lowagie.text.Font.NORMAL);
        // 10号加粗
        com.lowagie.text.Font font10 =
                new com.lowagie.text.Font(baseFont, 10, com.lowagie.text.Font.BOLD);
        //空白行
        Paragraph blankRow = new Paragraph(12f, " ", font10);

        /****** 表头start ******/
        PdfPTable headTable = new PdfPTable(2);
        headTable.setWidths(new float[]{500, 100});
        headTable.addCell(baseInfoTable(baseFont)); //左边
        //  插入图片
        headTable.addCell(pictureTable(baseFont)); //右边
        /****** 表头  end ******/

        /****** 学年 start ******/
        PdfPTable schoolYearTable = new PdfPTable(1);
        schoolYearTable.setWidths(new float[]{500});
        schoolYearTable.addCell(schoolYearTable5(baseFont));
        /****** 学年 end ******/

        /****** 课程成绩表头 start ******/
        PdfPTable courseTitleTable = new PdfPTable(1);
        courseTitleTable.setWidths(new float[]{500});
        courseTitleTable.addCell(courseTitleTable5(baseFont));
        /****** 课程成绩表头 end ******/

        /****** 输出课程成绩信息 start ******/
        List<List<Row>> groupList = new LinkedList<>();

        int groupListCnt = 5; //大纵列
        PdfPTable courseTable = new PdfPTable(groupListCnt);
        courseTable.setWidths(new float[]{683, 683, 683, 683, 683});
        //没有成绩填补空格
        for (int i = 0; i < groupListCnt; i++) {
            courseTable.addCell(courseScoreTable(null, baseFont));
        }

        /****** 输出课程成绩信息 end ******/

        /****** 学期汇总信息5年制 start ******/
        Map<String, String> sum5Map = new HashMap<>();

        PdfPTable sumSemesterTable = new PdfPTable(1);
        sumSemesterTable.setWidths(new float[]{500});
        sumSemesterTable.addCell(sumSemesterTable5(sum5Map, baseFont));

        /****** 学期汇总信息 end ******/
        //添加一行空
        PdfPTable nullTable = new PdfPTable(1);
        nullTable.setWidths(new float[]{500});
        nullTable.addCell(baseInfoTableSixRow(baseFont));

        /****** 异动、毕业情况、结业后尚待补考科目、毕业学分 start ******/
        //表头
        PdfPTable endTitleTable = new PdfPTable(1);
        endTitleTable.setWidths(new float[]{500});
        endTitleTable.addCell(endTitleTable(baseFont));

        //内容
        PdfPTable endTable = new PdfPTable(4);
        endTable.setWidths(new float[]{1416, 977, 1231, 476});
        //异动 TODO
        Map<String, String[]> change = new HashMap<>();
        endTable.addCell(changeTable(change, baseFont));
        //毕业情况
        endTable.addCell(byInfoTable(baseFont));
        //结业后尚待补考科目
        endTable.addCell(notPassTable(getNotpassInfo(groupList), baseFont));
        //毕业学分
        endTable.addCell(byxfTable(sum5Map, baseFont));

        /****** 异动、毕业情况、结业后尚待补考科目、毕业学分 end ******/

        /****** 组成完成的文档 ******/
        document.add(blankRow);
        document.add(blankRow);
        document.add(headTable);
        document.add(schoolYearTable);
        //        document.add(semesterTable);
        document.add(courseTitleTable);
        document.add(courseTable);
        document.add(sumSemesterTable);
        document.add(nullTable);
        document.add(endTitleTable);
        document.add(endTable);

        Phrase par =
                new Phrase("                                                                                " +
                        "注:“_”表示该成绩由补考获得,“[]”表示该成绩由重修获得", font8);

        document.add(par);

    }


    private static void getPdfTable3(Document document) throws DocumentException {

        BaseFont baseFont = baseFontKt();

        //8号字体
        com.lowagie.text.Font font8 =
                new com.lowagie.text.Font(baseFont, 8, com.lowagie.text.Font.NORMAL);
        // 10号加粗
        com.lowagie.text.Font font10 =
                new com.lowagie.text.Font(baseFont, 10, com.lowagie.text.Font.BOLD);
        //空白行
        Paragraph blankRow = new Paragraph(12f, " ", font10);

        /****** 表头start ******/
        PdfPTable headTable = new PdfPTable(2);
        headTable.setWidths(new float[]{500, 100});
        headTable.addCell(baseInfoTable(baseFont)); //左边
        //  插入图片
        headTable.addCell(pictureTable(baseFont)); //右边
        /****** 表头  end ******/

        /****** 学年 start ******/
        PdfPTable schoolYearTable = new PdfPTable(1);
        schoolYearTable.setWidths(new float[]{500});
        schoolYearTable.addCell(schoolYearTable(baseFont));
        /****** 学年 end ******/

        /****** 学期 start ******/
        PdfPTable semesterTable = new PdfPTable(1);
        semesterTable.setWidths(new float[]{500});
        semesterTable.addCell(semesterTable(baseFont));
        /****** 学期 end ******/

        /****** 课程成绩表头 start ******/
        PdfPTable courseTitleTable = new PdfPTable(1);
        courseTitleTable.setWidths(new float[]{500});
        courseTitleTable.addCell(courseTitleTable(baseFont));
        /****** 课程成绩表头 end ******/

        /****** 输出课程成绩信息 start ******/
        List<List<Row>> groupList = null;

        int groupListCnt = 6; //大纵列
        PdfPTable courseTable = new PdfPTable(groupListCnt);
        courseTable.setWidths(new float[]{683, 683, 683, 683, 683, 683});
        //没有成绩填补空格
        for (int i = 0; i < groupListCnt; i++) {
            courseTable.addCell(courseScoreTable(null, baseFont));
        }

        /****** 输出课程成绩信息 end ******/

        /****** 学期汇总信息 start ******/
        Map<String, String> sum3Map = new HashMap<>();
        sum3Map.put("第一学期", "tiger");
        sum3Map.put("第二学期", "rabbit");
        PdfPTable sumSemesterTable = new PdfPTable(1);
        sumSemesterTable.setWidths(new float[]{500});
        sumSemesterTable.addCell(sumSemesterTable(sum3Map, baseFont));

        /****** 学期汇总信息 end ******/

        //添加一行空
        PdfPTable nullTable = new PdfPTable(1);
        nullTable.setWidths(new float[]{500});
        nullTable.addCell(baseInfoTableSixRow(baseFont));


        /****** 异动、毕业情况、结业后尚待补考科目、毕业学分 start ******/
        //表头
        PdfPTable endTitleTable = new PdfPTable(1);
        endTitleTable.setWidths(new float[]{500});
        endTitleTable.addCell(endTitleTable(baseFont));

        //内容
        PdfPTable endTable = new PdfPTable(4);
        endTable.setWidths(new float[]{1416, 977, 1231, 476});
        //异动
        //异动 TODO
        Map<String, String[]> change = new HashMap<>();
        change.put("专业", new String[]{"xixi", "hehe", "haha"});
        endTable.addCell(changeTable(change, baseFont));
        //毕业情况
        endTable.addCell(byInfoTable(baseFont));
        //结业后尚待补考科目
        endTable.addCell(notPassTable(getNotpassInfo(groupList), baseFont));
        //毕业学分
        endTable.addCell(byxfTable(sum3Map, baseFont));

        /****** 异动、毕业情况、结业后尚待补考科目、毕业学分 end ******/
        //        PdfPTable floorTable = new PdfPTable(1);
        //        floorTable.setWidths(new float[] { 500 });
        //        PdfPCell oneFloor =
        //            new PdfPCell();
        //        oneFloor.setHorizontalAlignment(Element.ALIGN_CENTER);
        //        oneFloor.setVerticalAlignment(Element.ALIGN_MIDDLE);
        //        floorTable.addCell(oneFloor);

        /****** 组成完成的文档 ******/
        document.add(blankRow);
        document.add(blankRow);
        document.add(headTable);
        document.add(schoolYearTable);
        document.add(semesterTable);
        document.add(courseTitleTable);
        document.add(courseTable);
        document.add(sumSemesterTable);
        document.add(nullTable);
        document.add(endTitleTable);
        document.add(endTable);

        Phrase par =
                new Phrase("                                                                                " +
                        "注:“_”表示该成绩由补考获得,“[]”表示该成绩由重修获得", font8);

        document.add(par);

    }

    /**
     * 学年table(3年制)
     */
    private static PdfPCell schoolYearTable(BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, 8, com.lowagie.text.Font.NORMAL);

        PdfPTable table = new PdfPTable(3);
        table.setWidths(new float[]{500, 500, 500});
        PdfPCell one = new PdfPCell(new Phrase("第一学年 ", font1));
        one.setHorizontalAlignment(Element.ALIGN_CENTER);
        one.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell two = new PdfPCell(new Phrase("第二学年 ", font1));
        two.setHorizontalAlignment(Element.ALIGN_CENTER);
        two.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell three = new PdfPCell(new Phrase("第三学年 ", font1));
        three.setHorizontalAlignment(Element.ALIGN_CENTER);
        three.setVerticalAlignment(Element.ALIGN_MIDDLE);
        table.addCell(one);
        table.addCell(two);
        table.addCell(three);

        //将表格返回
        PdfPCell cell = new PdfPCell(table);
        cell.setBorder(PdfPCell.NO_BORDER);
        return cell;
    }

    /**
     * 学年table
     */
    private static PdfPCell schoolYearTable5(BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, 8, com.lowagie.text.Font.NORMAL);

        PdfPTable table = new PdfPTable(5);
        table.setWidths(new float[]{819, 819, 819, 819, 819});
        PdfPCell one = new PdfPCell(new Phrase("第一学年 ", font1));
        one.setHorizontalAlignment(Element.ALIGN_CENTER);
        one.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell two = new PdfPCell(new Phrase("第二学年 ", font1));
        two.setHorizontalAlignment(Element.ALIGN_CENTER);
        two.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell three = new PdfPCell(new Phrase("第三学年 ", font1));
        three.setHorizontalAlignment(Element.ALIGN_CENTER);
        three.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell four = new PdfPCell(new Phrase("第四学年 ", font1));
        four.setHorizontalAlignment(Element.ALIGN_CENTER);
        four.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell five = new PdfPCell(new Phrase("第五学年 ", font1));
        five.setHorizontalAlignment(Element.ALIGN_CENTER);
        five.setVerticalAlignment(Element.ALIGN_MIDDLE);

        table.addCell(one);
        table.addCell(two);
        table.addCell(three);
        table.addCell(four);
        table.addCell(five);

        //将表格返回
        PdfPCell cell = new PdfPCell(table);
        cell.setBorder(PdfPCell.NO_BORDER);
        return cell;
    }

    /**
     * 成绩表头(5年制)
     */
    private static PdfPCell scoreTitleTable(BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, 8, com.lowagie.text.Font.NORMAL);

        PdfPTable table = new PdfPTable(1);
        table.setWidths(new float[]{192});

        PdfPCell one21 = new PdfPCell(new Phrase("成绩 ", font1));
        one21.setHorizontalAlignment(Element.ALIGN_CENTER);
        one21.setVerticalAlignment(Element.ALIGN_MIDDLE);

        table.addCell(one21);

        //将表格返回
        PdfPCell cell = new PdfPCell(table);
        cell.setBorder(PdfPCell.NO_BORDER);
        return cell;
    }

    /**
     * 学期table(5年制)
     */
    private static PdfPCell semesterTable5(BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, 4, com.lowagie.text.Font.NORMAL);

        PdfPTable table = new PdfPTable(2);
        table.setWidths(new float[]{96, 96});

        PdfPCell one21 = new PdfPCell(new Phrase("一学期 ", font1));
        one21.setHorizontalAlignment(Element.ALIGN_CENTER);
        one21.setVerticalAlignment(Element.ALIGN_MIDDLE);

        PdfPCell one22 = new PdfPCell(new Phrase("二学期 ", font1));
        one22.setHorizontalAlignment(Element.ALIGN_CENTER);
        one22.setVerticalAlignment(Element.ALIGN_MIDDLE);

        table.addCell(one21);
        table.addCell(one22);

        //将表格返回
        PdfPCell cell = new PdfPCell(table);
        cell.setBorder(PdfPCell.NO_BORDER);
        return cell;
    }


    /**
     * 学期table
     */
    private static PdfPCell semesterTable(BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, 8, com.lowagie.text.Font.NORMAL);

        PdfPTable table = new PdfPTable(6);
        table.setWidths(new float[]{683, 683, 683, 683, 683, 683});

        PdfPCell one21 = new PdfPCell(new Phrase("第一学期 ", font1));
        one21.setHorizontalAlignment(Element.ALIGN_CENTER);
        one21.setVerticalAlignment(Element.ALIGN_MIDDLE);

        PdfPCell one22 = new PdfPCell(new Phrase("第二学期 ", font1));
        one22.setHorizontalAlignment(Element.ALIGN_CENTER);
        one22.setVerticalAlignment(Element.ALIGN_MIDDLE);

        PdfPCell one23 = new PdfPCell(new Phrase("第一学期 ", font1));
        one23.setHorizontalAlignment(Element.ALIGN_CENTER);
        one23.setVerticalAlignment(Element.ALIGN_MIDDLE);

        PdfPCell one24 = new PdfPCell(new Phrase("第二学期 ", font1));
        one24.setHorizontalAlignment(Element.ALIGN_CENTER);
        one24.setVerticalAlignment(Element.ALIGN_MIDDLE);

        PdfPCell one25 = new PdfPCell(new Phrase("第一学期 ", font1));
        one25.setHorizontalAlignment(Element.ALIGN_CENTER);
        one25.setVerticalAlignment(Element.ALIGN_MIDDLE);

        PdfPCell one26 = new PdfPCell(new Phrase("第二学期 ", font1));
        one26.setHorizontalAlignment(Element.ALIGN_CENTER);
        one26.setVerticalAlignment(Element.ALIGN_MIDDLE);

        table.addCell(one21);
        table.addCell(one22);
        table.addCell(one23);
        table.addCell(one24);
        table.addCell(one25);
        table.addCell(one26);

        //将表格返回
        PdfPCell cell = new PdfPCell(table);
        cell.setBorder(PdfPCell.NO_BORDER);
        return cell;
    }

    /**
     * 课程标题table(5年制)
     */
    private static PdfPCell courseTitleTable5(BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, fontSize7,
                        com.lowagie.text.Font.NORMAL);
        com.lowagie.text.Font font8 =
                new com.lowagie.text.Font(baseFont, 10, com.lowagie.text.Font.NORMAL);

        PdfPTable table = new PdfPTable(25);
        table.setWidths(new float[]{361, 136, 192, 65, 65, 361, 136, 192, 65,
                65, 361, 136, 192, 65, 65, 361, 136, 192,
                65, 65, 361, 136, 192, 65, 65});
        for (int i = 0; i < 5; i++) {
            PdfPCell one21 = new PdfPCell(new Phrase("课程", font8));
            one21.setHorizontalAlignment(Element.ALIGN_CENTER);
            one21.setVerticalAlignment(Element.ALIGN_MIDDLE);

            PdfPCell one22 = new PdfPCell(new Phrase("课程类型 ", font8));
            one22.setHorizontalAlignment(Element.ALIGN_CENTER);
            one22.setVerticalAlignment(Element.ALIGN_MIDDLE);

            //成绩在下边直接调用

            PdfPCell one24 = new PdfPCell(new Phrase("学分", font1));
            one24.setHorizontalAlignment(Element.ALIGN_CENTER);
            one24.setVerticalAlignment(Element.ALIGN_MIDDLE);

            PdfPCell one25 = new PdfPCell(new Phrase("绩点", font1));
            one25.setHorizontalAlignment(Element.ALIGN_CENTER);
            one25.setVerticalAlignment(Element.ALIGN_MIDDLE);

            table.addCell(one21);
            table.addCell(one22);
            table.addCell(scoreTable5(baseFont));
            table.addCell(one24);
            table.addCell(one25);
        }


        //将表格返回
        PdfPCell cell = new PdfPCell(table);
        cell.setBorder(PdfPCell.NO_BORDER);
        return cell;
    }

    /**
     * 成绩表头(5年制)
     */
    private static PdfPCell scoreTable5(BaseFont baseFont) throws DocumentException {

        PdfPTable table = new PdfPTable(1);
        table.setWidths(new float[]{500});

        table.addCell(scoreTitleTable(baseFont));
        table.addCell(semesterTable5(baseFont));

        //将表格返回
        PdfPCell cell = new PdfPCell(table);
        cell.setBorder(PdfPCell.NO_BORDER);
        return cell;
    }


    /**
     * 课程标题table
     */
    private static PdfPCell courseTitleTable(BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, fontSize7,
                        com.lowagie.text.Font.NORMAL);

        PdfPTable table = new PdfPTable(30);
        table.setWidths(new float[]{343, 100, 80, 80, 80, 343, 100, 80, 80,
                80, 343, 100, 80, 80, 80, 343, 100, 80,
                80, 80, 343, 100, 80, 80, 80, 343, 100,
                80, 80, 80});
        for (int i = 0; i < 6; i++) {
            PdfPCell one21 = new PdfPCell(new Phrase("课程", font1));
            one21.setHorizontalAlignment(Element.ALIGN_CENTER);
            one21.setVerticalAlignment(Element.ALIGN_MIDDLE);

            PdfPCell one22 = new PdfPCell(new Phrase("课程类型 ", font1));
            one22.setHorizontalAlignment(Element.ALIGN_CENTER);
            one22.setVerticalAlignment(Element.ALIGN_MIDDLE);

            PdfPCell one23 = new PdfPCell(new Phrase("成绩", font1));
            one23.setHorizontalAlignment(Element.ALIGN_CENTER);
            one23.setVerticalAlignment(Element.ALIGN_MIDDLE);

            PdfPCell one24 = new PdfPCell(new Phrase("学分", font1));
            one24.setHorizontalAlignment(Element.ALIGN_CENTER);
            one24.setVerticalAlignment(Element.ALIGN_MIDDLE);

            PdfPCell one25 = new PdfPCell(new Phrase("绩点", font1));
            one25.setHorizontalAlignment(Element.ALIGN_CENTER);
            one25.setVerticalAlignment(Element.ALIGN_MIDDLE);

            table.addCell(one21);
            table.addCell(one22);
            table.addCell(one23);
            table.addCell(one24);
            table.addCell(one25);
        }

        //将表格返回
        PdfPCell cell = new PdfPCell(table);
        cell.setBorder(PdfPCell.NO_BORDER);
        return cell;
    }

    /**
     * 是否合格table
     */
    private static PdfPCell sfhgTable(BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, 15, com.lowagie.text.Font.BOLD);
        //是否合格
        String Sfhg = "合格";
        PdfPTable table = new PdfPTable(1);
        table.setWidths(new float[]{256 + 220});

        PdfPCell one1 = new PdfPCell(new Phrase(Sfhg, font1));
        one1.setHorizontalAlignment(Element.ALIGN_CENTER);
        one1.setVerticalAlignment(Element.ALIGN_MIDDLE);

        table.addCell(one1);

        //将表格返回
        PdfPCell cell = new PdfPCell(table);
        cell.setBorder(PdfPCell.NO_BORDER);
        return cell;
    }

    /**
     * 毕业学分table
     */
    private static PdfPCell byxfTable(Map<String, String> map,
                                      BaseFont baseFont) throws DocumentException {

        PdfPTable table0 = new PdfPTable(1);
        table0.setWidths(new float[]{500});

        table0.addCell(byxfTable1(map, baseFont));
        table0.addCell(byxfTable2(baseFont));

        //将表格返回
        PdfPCell cell = new PdfPCell(table0);
        cell.setBorder(PdfPCell.NO_BORDER);
        return cell;
    }

    /**
     * 毕业学分table
     */
    private static PdfPCell byxfTable1(Map<String, String> map,
                                       BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, fontSize7,
                        com.lowagie.text.Font.NORMAL);

        PdfPTable table = new PdfPTable(2);
        table.setWidths(new float[]{256, 220});

        PdfPCell one1 = new PdfPCell(new Phrase("总学分", font1));
        one1.setHorizontalAlignment(Element.ALIGN_CENTER);
        one1.setVerticalAlignment(Element.ALIGN_MIDDLE);

        PdfPCell one2 = new PdfPCell(new Phrase(map.get("总学分"), font1));
        one2.setHorizontalAlignment(Element.ALIGN_CENTER);
        one2.setVerticalAlignment(Element.ALIGN_MIDDLE);

        PdfPCell one3 = new PdfPCell(new Phrase("实际获得学分", font1));
        one3.setHorizontalAlignment(Element.ALIGN_CENTER);
        one3.setVerticalAlignment(Element.ALIGN_MIDDLE);

        PdfPCell one4 = new PdfPCell(new Phrase(map.get("取得学分"), font1));
        one4.setHorizontalAlignment(Element.ALIGN_CENTER);
        one4.setVerticalAlignment(Element.ALIGN_MIDDLE);

        table.addCell(one1);
        table.addCell(one2);
        table.addCell(one3);
        table.addCell(one4);

        //将表格返回
        PdfPCell cell = new PdfPCell(table);
        cell.setBorder(PdfPCell.NO_BORDER);
        return cell;
    }

    /**
     * 毕业学分table
     */
    private static PdfPCell byxfTable2(BaseFont baseFont) throws DocumentException {
        PdfPTable table1 = new PdfPTable(1);
        table1.setWidths(new float[]{500});
        table1.addCell(sfhgTable(baseFont));

        //将表格返回
        PdfPCell cell = new PdfPCell(table1);
        cell.setBorder(PdfPCell.NO_BORDER);
        return cell;
    }

    /**
     * 结业后尚待补考科目table
     */
    private static PdfPCell notPassTable(Map<String, String> map,
                                         BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, fontSize7,
                        com.lowagie.text.Font.NORMAL);

        PdfPTable table = new PdfPTable(1);
        table.setWidths(new float[]{500});

        //不合格课程
        for (Map.Entry<String, String> a : map.entrySet()) {
            PdfPCell one2 =
                    new PdfPCell(new Phrase((String) a.getValue(), font1));
            one2.setHorizontalAlignment(Element.ALIGN_CENTER);
            one2.setVerticalAlignment(Element.ALIGN_MIDDLE);
            table.addCell(one2);
        }

        if (map.size() != endTableMaxRowPdf + 1) {
            PdfPCell emptyCell = new PdfPCell(new Phrase(" ", font1));
            for (int i = 0; i < endTableMaxRowPdf + 1 - map.size(); i++) {
                table.addCell(emptyCell);
            }
        }

        //将表格返回
        PdfPCell cell = new PdfPCell(table);
        cell.setBorder(PdfPCell.NO_BORDER);
        return cell;
    }

    /**
     * 学分汇总信息table
     */
    private static PdfPCell sumSemesterTable5(Map map,
                                              BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, 7, com.lowagie.text.Font.NORMAL);

        PdfPTable table = new PdfPTable(20);
        table.setWidths(new float[]{361, 136, 192, 130, 361, 136, 192, 130,
                361, 136, 192, 130, 361, 136, 192, 130,
                361, 136, 192, 130});

        for (int i = 0; i < 6; i++) {
            PdfPCell one21 = new PdfPCell(new Phrase("学期总学分 ", font1));
            one21.setHorizontalAlignment(Element.ALIGN_CENTER);
            one21.setVerticalAlignment(Element.ALIGN_MIDDLE);

            PdfPCell one22 =
                    new PdfPCell(new Phrase((String) map.get("总学分" + i), font1));
            one22.setHorizontalAlignment(Element.ALIGN_CENTER);
            one22.setVerticalAlignment(Element.ALIGN_MIDDLE);

            PdfPCell one23 = new PdfPCell(new Phrase("取得学分 ", font1));
            one23.setHorizontalAlignment(Element.ALIGN_CENTER);
            one23.setVerticalAlignment(Element.ALIGN_MIDDLE);

            PdfPCell one24 =
                    new PdfPCell(new Phrase((String) map.get("取得学分" + i), font1));
            one24.setHorizontalAlignment(Element.ALIGN_CENTER);
            one24.setVerticalAlignment(Element.ALIGN_MIDDLE);

            table.addCell(one21);
            table.addCell(one22);
            table.addCell(one23);
            table.addCell(one24);

        }

        //将表格返回
        PdfPCell cell = new PdfPCell(table);
        cell.setBorder(PdfPCell.NO_BORDER);
        return cell;
    }

    /**
     * 学分汇总信息table
     */
    private static PdfPCell sumSemesterTable(Map map,
                                             BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, 7, com.lowagie.text.Font.NORMAL);

        PdfPTable table = new PdfPTable(24);
        table.setWidths(new float[]{188, 155, 180, 160, 188, 155, 180, 160,
                188, 155, 180, 160, 188, 155, 180, 160,
                188, 155, 180, 160, 188, 155, 180,
                160});

        for (int i = 0; i < 6; i++) {
            PdfPCell one21 = new PdfPCell(new Phrase("学期总学分 ", font1));
            one21.setHorizontalAlignment(Element.ALIGN_CENTER);
            one21.setVerticalAlignment(Element.ALIGN_MIDDLE);

            PdfPCell one22 =
                    new PdfPCell(new Phrase((String) map.get("总学分" + i), font1));
            one22.setHorizontalAlignment(Element.ALIGN_CENTER);
            one22.setVerticalAlignment(Element.ALIGN_MIDDLE);

            PdfPCell one23 = new PdfPCell(new Phrase("取得学分 ", font1));
            one23.setHorizontalAlignment(Element.ALIGN_CENTER);
            one23.setVerticalAlignment(Element.ALIGN_MIDDLE);

            PdfPCell one24 =
                    new PdfPCell(new Phrase((String) map.get("取得学分" + i), font1));
            one24.setHorizontalAlignment(Element.ALIGN_CENTER);
            one24.setVerticalAlignment(Element.ALIGN_MIDDLE);

            table.addCell(one21);
            table.addCell(one22);
            table.addCell(one23);
            table.addCell(one24);

        }

        //将表格返回
        PdfPCell cell = new PdfPCell(table);
        cell.setBorder(PdfPCell.NO_BORDER);
        return cell;
    }


    /**
     * 毕业情况信息table
     */
    private static PdfPCell byInfoTable(BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, fontSize7,
                        com.lowagie.text.Font.NORMAL);

        PdfPTable table = new PdfPTable(2);
        table.setWidths(new float[]{291, 686});

        //毕业日期、毕业证号
        String Byrq = "20230901";
        String Byzh = "N0.1688888888";

        PdfPCell one21 = new PdfPCell(new Phrase("毕业日期 ", font1));
        one21.setHorizontalAlignment(Element.ALIGN_CENTER);
        one21.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one22 = new PdfPCell(new Phrase("毕业证号", font1));
        one22.setHorizontalAlignment(Element.ALIGN_CENTER);
        one22.setVerticalAlignment(Element.ALIGN_MIDDLE);

        PdfPCell one23 = new PdfPCell(new Phrase(Byrq, font1));
        one23.setHorizontalAlignment(Element.ALIGN_CENTER);
        one23.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one24 = new PdfPCell(new Phrase(Byzh, font1));
        one24.setHorizontalAlignment(Element.ALIGN_CENTER);
        one24.setVerticalAlignment(Element.ALIGN_MIDDLE);

        table.addCell(one21);
        table.addCell(one22);
        table.addCell(one23);
        table.addCell(one24);

        //填补空行
        PdfPCell emptyCell = new PdfPCell(new Phrase(" ", font1));
        for (int i = 0; i < endTableMaxRowPdf - 1; i++) {
            table.addCell(emptyCell);
            table.addCell(emptyCell);
        }

        PdfPCell cel21 = new PdfPCell(table);
        cel21.setBorder(PdfPCell.NO_BORDER);

        return cel21;
    }


    /**
     * 异动信息table
     */
    private static PdfPCell changeTable(Map<String, String[]> change,
                                        BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, fontSize7,
                        com.lowagie.text.Font.NORMAL);

        PdfPTable table = new PdfPTable(3);
        table.setWidths(new float[]{354, 327, 735});

        //第一行,表头
        PdfPCell one1 = new PdfPCell(new Phrase("类别", font1));
        one1.setHorizontalAlignment(Element.ALIGN_CENTER);
        one1.setVerticalAlignment(Element.ALIGN_MIDDLE);

        PdfPCell one2 = new PdfPCell(new Phrase("时间", font1));
        one2.setHorizontalAlignment(Element.ALIGN_CENTER);
        one2.setVerticalAlignment(Element.ALIGN_MIDDLE);

        PdfPCell one3 = new PdfPCell(new Phrase("原因", font1));
        one3.setHorizontalAlignment(Element.ALIGN_CENTER);
        one3.setVerticalAlignment(Element.ALIGN_MIDDLE);

        table.addCell(one1);
        table.addCell(one2);
        table.addCell(one3);

        // 内容
        for (Map.Entry<String, String[]> a : change.entrySet()) {
            String[] value = a.getValue();
            PdfPCell one11 = new PdfPCell(new Phrase(value[0], font1));
            one11.setHorizontalAlignment(Element.ALIGN_CENTER);
            one11.setVerticalAlignment(Element.ALIGN_MIDDLE);

            PdfPCell one12 = new PdfPCell(new Phrase(value[1], font1));
            one12.setHorizontalAlignment(Element.ALIGN_CENTER);
            one12.setVerticalAlignment(Element.ALIGN_MIDDLE);

            PdfPCell one13 = new PdfPCell(new Phrase(value[2], font1));
            one13.setHorizontalAlignment(Element.ALIGN_CENTER);
            one13.setVerticalAlignment(Element.ALIGN_MIDDLE);

            table.addCell(one11);
            table.addCell(one12);
            table.addCell(one13);
        }
        //填补空行
        if (change.size() != endTableMaxRowPdf) {
            PdfPCell emptyCell = new PdfPCell(new Phrase(" ", font1));
            for (int i = 0; i < endTableMaxRowPdf - change.size(); i++) {
                table.addCell(emptyCell);
                table.addCell(emptyCell);
                table.addCell(emptyCell);
            }
        }

        //将表格返回
        PdfPCell cell = new PdfPCell(table);
        cell.setBorder(PdfPCell.NO_BORDER);
        return cell;
    }

    /**
     * 课程值table
     */
    private static PdfPCell courseScoreTable5(List<Row> rowList,
                                              BaseFont baseFont) throws DocumentException {

        com.lowagie.text.Font font81 =
                new com.lowagie.text.Font(baseFont, 6, com.lowagie.text.Font.UNDERLINE);
        com.lowagie.text.Font font8 =
                new com.lowagie.text.Font(baseFont, 8, com.lowagie.text.Font.NORMAL);
        com.lowagie.text.Font font7 =
                new com.lowagie.text.Font(baseFont, 7, com.lowagie.text.Font.NORMAL);
        com.lowagie.text.Font font6 =
                new com.lowagie.text.Font(baseFont, 6, com.lowagie.text.Font.NORMAL);
        com.lowagie.text.Font font5 =
                new com.lowagie.text.Font(baseFont, 5, com.lowagie.text.Font.NORMAL);
        com.lowagie.text.Font font4 =
                new com.lowagie.text.Font(baseFont, 4, com.lowagie.text.Font.NORMAL);
        com.lowagie.text.Font font3 =
                new com.lowagie.text.Font(baseFont, 3, com.lowagie.text.Font.NORMAL);
        com.lowagie.text.Font font2 =
                new com.lowagie.text.Font(baseFont, 2, com.lowagie.text.Font.NORMAL);

        PdfPTable table = new PdfPTable(6);
        table.setWidths(new float[]{361, 136, 96, 96, 65, 65});

        //课程成绩最大行数(5年制)
        int semesterGradeRowMaxLength = 28;

        PdfPCell emptyCell = new PdfPCell(new Phrase(" ", font7));

        if (rowList != null && !rowList.isEmpty()) {
            int cnt = rowList.size();
            for (int j = 0; j < cnt; j++) {
                Row dataRow = rowList.get(j);
                String kcStr = "解剖学"; //课程名称
                String lbStr = "必修"; //类别,考试方式名称 --》 课程性质,update on 20200413
                Object xfObj = "4"; //学分
                String xfStr = "";
                if (xfObj == null) {
                    xfStr = "";
                } else {
                    xfStr = String.valueOf(xfObj);
                }
                Object jdObj = "4"; //绩点
                String jdStr = "";
                if (jdObj == null) {
                    jdStr = "";
                } else {
                    jdStr = String.valueOf(jdObj);
                }

                String cjStr = "98"; //正考成绩
                String bkStr = "0"; //补考成绩
                String cxStr = "0"; //重修成绩
                String displayScore = cjStr;
                com.lowagie.text.Font cjFont8 = font7;
                if (!StringUtils.isEmpty(cxStr)) {
                    //重修成绩不为空设时设为重修成绩
                    displayScore = "[" + cxStr + "]";
                } else if (!StringUtils.isEmpty(bkStr)) {
                    //补考成绩,带下划线
                    displayScore = bkStr;
                    cjFont8 = font81;
                } else if (!StringUtils.isEmpty(cjStr)) {
                    //正考成绩
                    displayScore = cjStr;
                }

                //课程类型
                com.lowagie.text.Font fontKclx = font5;
                if (lbStr != null) {
                    if (lbStr.length() <= 6) {
                        fontKclx = font4;
                    }
                }

                com.lowagie.text.Font fontKc = font8;
                //课程名称大小动态设置
                if (kcStr != null) {
                    if (kcStr.length() <= 12) {
                        fontKc = font6;
                    } else if (kcStr.length() <= 14) {
                        fontKc = font6;
                    } else if (kcStr.length() <= 17) {
                        fontKc = font5;
                    } else if (kcStr.length() <= 22) {
                        fontKc = font3;
                    } else if (kcStr.length() <= 26) {
                        fontKc = font3;
                    } else {
                        fontKc = font2;
                    }
                }

                //课程
                PdfPCell one21 = new PdfPCell(new Phrase(kcStr, fontKc));
                one21.setHorizontalAlignment(Element.ALIGN_CENTER);
                one21.setVerticalAlignment(Element.ALIGN_MIDDLE);
                //课程类型
                PdfPCell one22 = new PdfPCell(new Phrase(lbStr, fontKclx));
                one22.setHorizontalAlignment(Element.ALIGN_CENTER);
                one22.setVerticalAlignment(Element.ALIGN_MIDDLE);

                table.addCell(one21);
                table.addCell(one22);

                if ("1".equals("1")) {
                    //成绩
                    PdfPCell one23 =
                            new PdfPCell(new Phrase(displayScore, cjFont8));
                    one23.setHorizontalAlignment(Element.ALIGN_CENTER);
                    one23.setVerticalAlignment(Element.ALIGN_MIDDLE);

                    //学分
                    PdfPCell one24 = new PdfPCell(new Phrase(xfStr, font7));
                    one24.setHorizontalAlignment(Element.ALIGN_CENTER);
                    one24.setVerticalAlignment(Element.ALIGN_MIDDLE);

                    //绩点
                    PdfPCell one25 = new PdfPCell(new Phrase(jdStr, font7));
                    one25.setHorizontalAlignment(Element.ALIGN_CENTER);
                    one25.setVerticalAlignment(Element.ALIGN_MIDDLE);

                    table.addCell(one23);
                    table.addCell(emptyCell);
                    table.addCell(one24);
                    table.addCell(one25);
                } else if ("2".equals("2")) {
                    PdfPCell one23 =
                            new PdfPCell(new Phrase(displayScore, cjFont8));
                    one23.setHorizontalAlignment(Element.ALIGN_CENTER);
                    one23.setVerticalAlignment(Element.ALIGN_MIDDLE);

                    //学分
                    PdfPCell one24 = new PdfPCell(new Phrase(xfStr, font7));
                    one24.setHorizontalAlignment(Element.ALIGN_CENTER);
                    one24.setVerticalAlignment(Element.ALIGN_MIDDLE);

                    //绩点
                    PdfPCell one25 = new PdfPCell(new Phrase(jdStr, font7));
                    one25.setHorizontalAlignment(Element.ALIGN_CENTER);
                    one25.setVerticalAlignment(Element.ALIGN_MIDDLE);

                    table.addCell(emptyCell);
                    table.addCell(one23);
                    table.addCell(one24);
                    table.addCell(one25);

                }

            }
            //填补空格
            if (semesterGradeRowMaxLength != cnt) {
                for (int j = 0; j < semesterGradeRowMaxLength - cnt; j++) {
                    table.addCell(emptyCell);
                    table.addCell(emptyCell);
                    table.addCell(emptyCell);
                    table.addCell(emptyCell);
                    table.addCell(emptyCell);
                    table.addCell(emptyCell);
                }
            }
        } else {
            //填补空格
            for (int i = 0; i < semesterGradeRowMaxLength; i++) {
                table.addCell(emptyCell);
                table.addCell(emptyCell);
                table.addCell(emptyCell);
                table.addCell(emptyCell);
                table.addCell(emptyCell);
                table.addCell(emptyCell);
            }
        }

        //将表格返回
        PdfPCell cell = new PdfPCell(table);
        cell.setBorder(PdfPCell.NO_BORDER);
        return cell;
    }


    /**
     * 课程值table
     */
    private static PdfPCell courseScoreTable(List<Row> rowList,
                                             BaseFont baseFont) throws DocumentException {

        com.lowagie.text.Font font81 =
                new com.lowagie.text.Font(baseFont, 6, com.lowagie.text.Font.UNDERLINE);
        com.lowagie.text.Font font8 =
                new com.lowagie.text.Font(baseFont, 8, com.lowagie.text.Font.NORMAL);
        com.lowagie.text.Font font7 =
                new com.lowagie.text.Font(baseFont, 7, com.lowagie.text.Font.NORMAL);
        com.lowagie.text.Font font6 =
                new com.lowagie.text.Font(baseFont, 6, com.lowagie.text.Font.NORMAL);
        com.lowagie.text.Font font5 =
                new com.lowagie.text.Font(baseFont, 5, com.lowagie.text.Font.NORMAL);
        com.lowagie.text.Font font4 =
                new com.lowagie.text.Font(baseFont, 4, com.lowagie.text.Font.NORMAL);
        com.lowagie.text.Font font3 =
                new com.lowagie.text.Font(baseFont, 3, com.lowagie.text.Font.NORMAL);
        com.lowagie.text.Font font2 =
                new com.lowagie.text.Font(baseFont, 2, com.lowagie.text.Font.NORMAL);

        PdfPTable table = new PdfPTable(5);
        table.setWidths(new float[]{343, 100, 80, 80, 80});

        //课程最大行数(3年制)
        int semesterGradeRowMaxLength = 16;

        PdfPCell emptyCell = new PdfPCell(new Phrase(" ", font7));

        if (rowList != null && !rowList.isEmpty()) {
            int cnt = rowList.size();
            for (int j = 0; j < cnt; j++) {
                Row dataRow = rowList.get(j);
                String kcStr = "解剖学"; //课程名称
                String lbStr = "必修"; //类别,考试方式名称 --》 课程性质,update on 20200413
                Object xfObj = "4"; //学分
                String xfStr = "";
                if (xfObj == null) {
                    xfStr = "";
                } else {
                    xfStr = String.valueOf(xfObj);
                }
                Object jdObj = "5"; //绩点
                String jdStr = "";
                if (jdObj == null) {
                    jdStr = "";
                } else {
                    jdStr = String.valueOf(jdObj);
                }

                String cjStr = "98"; //正考成绩
                String bkStr = "0"; //补考成绩
                String cxStr = "0"; //重修成绩
                String displayScore = cjStr;
                com.lowagie.text.Font cjFont8 = font7;
                if (!StringUtils.isEmpty(cxStr)) {
                    //重修成绩不为空设时设为重修成绩
                    displayScore = "[" + cxStr + "]";
                } else if (!StringUtils.isEmpty(bkStr)) {
                    //补考成绩,带下划线
                    displayScore = bkStr;
                    cjFont8 = font81;
                } else if (!StringUtils.isEmpty(cjStr)) {
                    //正考成绩
                    displayScore = cjStr;
                }

                //课程类型
                com.lowagie.text.Font fontKclx = font5;
                if (lbStr != null) {
                    if (lbStr.length() <= 6) {
                        fontKclx = font3;
                    }
                }

                com.lowagie.text.Font fontKc = font8;
                //课程名称大小动态设置
                if (kcStr != null) {
                    if (kcStr.length() <= 12) {
                        fontKc = font6;
                    } else if (kcStr.length() <= 14) {
                        fontKc = font6;
                    } else if (kcStr.length() <= 17) {
                        fontKc = font5;
                    } else if (kcStr.length() <= 22) {
                        fontKc = font3;
                    } else if (kcStr.length() <= 26) {
                        fontKc = font3;
                    } else {
                        fontKc = font2;
                    }
                }

                //课程
                PdfPCell one21 = new PdfPCell(new Phrase(kcStr, fontKc));
                one21.setHorizontalAlignment(Element.ALIGN_CENTER);
                one21.setVerticalAlignment(Element.ALIGN_MIDDLE);
                //课程类型
                PdfPCell one22 = new PdfPCell(new Phrase(lbStr, fontKclx));
                one22.setHorizontalAlignment(Element.ALIGN_CENTER);
                one22.setVerticalAlignment(Element.ALIGN_MIDDLE);
                //成绩
                PdfPCell one23 =
                        new PdfPCell(new Phrase(displayScore, cjFont8));
                one23.setHorizontalAlignment(Element.ALIGN_CENTER);
                one23.setVerticalAlignment(Element.ALIGN_MIDDLE);
                //学分
                PdfPCell one24 = new PdfPCell(new Phrase(xfStr, font7));
                one24.setHorizontalAlignment(Element.ALIGN_CENTER);
                one24.setVerticalAlignment(Element.ALIGN_MIDDLE);
                //绩点
                PdfPCell one25 = new PdfPCell(new Phrase(jdStr, font7));
                one25.setHorizontalAlignment(Element.ALIGN_CENTER);
                one25.setVerticalAlignment(Element.ALIGN_MIDDLE);

                table.addCell(one21);
                table.addCell(one22);
                table.addCell(one23);
                table.addCell(one24);
                table.addCell(one25);
            }
            //填补空格
            if (semesterGradeRowMaxLength != cnt) {
                for (int j = 0; j < semesterGradeRowMaxLength - cnt; j++) {
                    table.addCell(emptyCell);
                    table.addCell(emptyCell);
                    table.addCell(emptyCell);
                    table.addCell(emptyCell);
                    table.addCell(emptyCell);
                }
            }
        } else {
            //填补空格
            for (int i = 0; i < semesterGradeRowMaxLength; i++) {
                table.addCell(emptyCell);
                table.addCell(emptyCell);
                table.addCell(emptyCell);
                table.addCell(emptyCell);
                table.addCell(emptyCell);
            }
        }


        //将表格返回
        PdfPCell cell = new PdfPCell(table);
        cell.setBorder(PdfPCell.NO_BORDER);
        return cell;
    }


    /**
     * 基础信息table
     */
    private static PdfPCell baseInfoTable(BaseFont baseFont) throws DocumentException {

        PdfPTable table = new PdfPTable(1);
        table.setWidths(new float[]{500});

        // 第1行:XX学院学学生籍表
        table.addCell(baseInfoTableOneRow(baseFont));
        // 第2-6行: 基本
        table.addCell(baseInfoTableTwoRow(baseFont));
        //家庭地址,邮编
        table.addCell(baseInfoTableThreeRow(baseFont));
        table.addCell(baseInfoTableFourRow(baseFont));
        table.addCell(baseInfoTableFiveRow(baseFont));
        //空白行
        table.addCell(baseInfoTableSixRow(baseFont));

        //将表格返回
        PdfPCell cell = new PdfPCell(table);
        cell.setBorder(PdfPCell.NO_BORDER);
        return cell;
    }

    /**
     * 基础信息table 第1行
     */
    private static PdfPCell baseInfoTableOneRow(BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, 16, com.lowagie.text.Font.BOLD);

        PdfPTable table11 = new PdfPTable(1);
        table11.setWidths(new float[]{500});

        PdfPCell one = new PdfPCell(new Phrase("XX学院学学生籍表 ", font1));
        one.setPaddingTop(10.0f);
        one.setPaddingBottom(10.0f);
        one.setHorizontalAlignment(Element.ALIGN_CENTER);
        one.setVerticalAlignment(Element.ALIGN_MIDDLE);
        table11.addCell(one);

        PdfPCell cel21 = new PdfPCell(table11);
        cel21.setBorder(PdfPCell.NO_BORDER);

        return cel21;
    }

    /**
     * 基础信息table 第2行
     */
    private static PdfPCell baseInfoTableTwoRow(BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, 8, com.lowagie.text.Font.NORMAL);

        PdfPTable table21 = new PdfPTable(18);
        table21.setWidths(new float[]{127, 166, 116, 80, 191, 219, 193, 394,
                110, 111, 205, 213, 120, 161, 120, 280,
                125, 450});

        String Xm = "佳佳"; //姓名
        String Xbmc = "女"; //性别
        String Csrq = "20000101"; //出生日期
        String Sfzjh = "440834200012091314"; //身份证号
        String Mzmc = "汉族"; //民族
        String Zzmmmc = "党员"; //政治面貌
        String Jg = "广东梅州"; //籍贯
        String Yddh = "13631295485"; //移动电话
        String Dzyx = "1165069099@qq.com"; //di案子邮箱

        PdfPCell one21 = new PdfPCell(new Phrase("姓名 ", font1));
        one21.setHorizontalAlignment(Element.ALIGN_CENTER);
        one21.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one22 = new PdfPCell(new Phrase(Xm, font1));
        one22.setHorizontalAlignment(Element.ALIGN_CENTER);
        one22.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one23 = new PdfPCell(new Phrase("性别", font1));
        one23.setHorizontalAlignment(Element.ALIGN_CENTER);
        one23.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one24 = new PdfPCell(new Phrase(Xbmc, font1));
        one24.setHorizontalAlignment(Element.ALIGN_CENTER);
        one24.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one25 = new PdfPCell(new Phrase("出生日期", font1));
        one25.setHorizontalAlignment(Element.ALIGN_CENTER);
        one25.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one26 = new PdfPCell(new Phrase(Csrq, font1));
        one26.setHorizontalAlignment(Element.ALIGN_CENTER);
        one26.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one27 = new PdfPCell(new Phrase("身份证号", font1));
        one27.setHorizontalAlignment(Element.ALIGN_CENTER);
        one27.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one28 = new PdfPCell(new Phrase(Sfzjh, font1));
        one28.setHorizontalAlignment(Element.ALIGN_CENTER);
        one28.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one29 = new PdfPCell(new Phrase("民族", font1));
        one29.setHorizontalAlignment(Element.ALIGN_CENTER);
        one29.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one210 = new PdfPCell(new Phrase(Mzmc, font1));
        one210.setHorizontalAlignment(Element.ALIGN_CENTER);
        one210.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one211 = new PdfPCell(new Phrase("政治面貌", font1));
        one211.setHorizontalAlignment(Element.ALIGN_CENTER);
        one211.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one212 = new PdfPCell(new Phrase(Zzmmmc, font1));
        one212.setHorizontalAlignment(Element.ALIGN_CENTER);
        one212.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one213 = new PdfPCell(new Phrase("籍贯", font1));
        one213.setHorizontalAlignment(Element.ALIGN_CENTER);
        one213.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one214 = new PdfPCell(new Phrase(Jg, font1));
        one214.setHorizontalAlignment(Element.ALIGN_CENTER);
        one214.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one215 = new PdfPCell(new Phrase("电话", font1));
        one215.setHorizontalAlignment(Element.ALIGN_CENTER);
        one215.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one216 = new PdfPCell(new Phrase(Yddh, font1));
        one216.setHorizontalAlignment(Element.ALIGN_CENTER);
        one216.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one217 = new PdfPCell(new Phrase("邮箱", font1));
        one217.setHorizontalAlignment(Element.ALIGN_CENTER);
        one217.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one218 = new PdfPCell(new Phrase(Dzyx, font1));
        one218.setHorizontalAlignment(Element.ALIGN_CENTER);
        one218.setVerticalAlignment(Element.ALIGN_MIDDLE);

        table21.addCell(one21);
        table21.addCell(one22);
        table21.addCell(one23);
        table21.addCell(one24);
        table21.addCell(one25);
        table21.addCell(one26);
        table21.addCell(one27);
        table21.addCell(one28);
        table21.addCell(one29);
        table21.addCell(one210);
        table21.addCell(one211);
        table21.addCell(one212);
        table21.addCell(one213);
        table21.addCell(one214);
        table21.addCell(one215);
        table21.addCell(one216);
        table21.addCell(one217);
        table21.addCell(one218);

        PdfPCell cel21 = new PdfPCell(table21);
        cel21.setBorder(PdfPCell.NO_BORDER);

        return cel21;
    }

    /**
     * 基础信息table 第3行
     */
    private static PdfPCell baseInfoTableThreeRow(BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, 8, com.lowagie.text.Font.NORMAL);

        PdfPTable table21 = new PdfPTable(4);
        table21.setWidths(new float[]{188, 2618, 125, 450});

        String Jtdz = "家庭地址"; //家庭地址
        String Yzbm = "523343"; //邮政编码

        PdfPCell one21 = new PdfPCell(new Phrase("家庭地址 ", font1));
        one21.setHorizontalAlignment(Element.ALIGN_CENTER);
        one21.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one22 = new PdfPCell(new Phrase(Jtdz, font1));
        one22.setHorizontalAlignment(Element.ALIGN_CENTER);
        one22.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one23 = new PdfPCell(new Phrase("邮编", font1));
        one23.setHorizontalAlignment(Element.ALIGN_CENTER);
        one23.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one24 = new PdfPCell(new Phrase(Yzbm, font1));
        one24.setHorizontalAlignment(Element.ALIGN_CENTER);
        one24.setVerticalAlignment(Element.ALIGN_MIDDLE);

        table21.addCell(one21);
        table21.addCell(one22);
        table21.addCell(one23);
        table21.addCell(one24);

        PdfPCell cel21 = new PdfPCell(table21);
        cel21.setBorder(PdfPCell.NO_BORDER);

        return cel21;
    }

    /**
     * 基础信息table 第4行
     */
    private static PdfPCell baseInfoTableFourRow(BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, 8, com.lowagie.text.Font.NORMAL);

        PdfPTable table21 = new PdfPTable(12);
        table21.setWidths(new float[]{188, 222, 240, 250, 251, 267, 190, 390,
                189, 618, 125, 450});


        String Xh = "130403021032"; //学号
        //家庭成员
        String Jzxm = "林先生"; //家长姓名
        String Ybrgx = "父亲"; //与本人关系
        String Jzlxfs = "13631295485"; //家长联系方式
        String Jzyx = "1165069099@qq.com"; //家长邮箱
        String Gzdw = "廣州天河"; //工作单位

        PdfPCell one21 = new PdfPCell(new Phrase("家长姓名 ", font1));
        one21.setHorizontalAlignment(Element.ALIGN_CENTER);
        one21.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one22 = new PdfPCell(new Phrase(Jzxm, font1));
        one22.setHorizontalAlignment(Element.ALIGN_CENTER);
        one22.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one23 = new PdfPCell(new Phrase("与本人关系", font1));
        one23.setHorizontalAlignment(Element.ALIGN_CENTER);
        one23.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one24 = new PdfPCell(new Phrase(Ybrgx, font1));
        one24.setHorizontalAlignment(Element.ALIGN_CENTER);
        one24.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one25 = new PdfPCell(new Phrase("家长联系方式", font1));
        one25.setHorizontalAlignment(Element.ALIGN_CENTER);
        one25.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one26 = new PdfPCell(new Phrase(Jzlxfs, font1));
        one26.setHorizontalAlignment(Element.ALIGN_CENTER);
        one26.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one27 = new PdfPCell(new Phrase("家长邮箱", font1));
        one27.setHorizontalAlignment(Element.ALIGN_CENTER);
        one27.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one28 = new PdfPCell(new Phrase(Jzyx, font1));
        one28.setHorizontalAlignment(Element.ALIGN_CENTER);
        one28.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one29 = new PdfPCell(new Phrase("工作单位", font1));
        one29.setHorizontalAlignment(Element.ALIGN_CENTER);
        one29.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one210 = new PdfPCell(new Phrase(Gzdw, font1));
        one210.setHorizontalAlignment(Element.ALIGN_CENTER);
        one210.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one211 = new PdfPCell(new Phrase("学号", font1));
        one211.setHorizontalAlignment(Element.ALIGN_CENTER);
        one211.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one212 = new PdfPCell(new Phrase(Xh, font1));
        one212.setHorizontalAlignment(Element.ALIGN_CENTER);
        one212.setVerticalAlignment(Element.ALIGN_MIDDLE);

        table21.addCell(one21);
        table21.addCell(one22);
        table21.addCell(one23);
        table21.addCell(one24);
        table21.addCell(one25);
        table21.addCell(one26);
        table21.addCell(one27);
        table21.addCell(one28);
        table21.addCell(one29);
        table21.addCell(one210);
        table21.addCell(one211);
        table21.addCell(one212);


        PdfPCell cel21 = new PdfPCell(table21);
        cel21.setBorder(PdfPCell.NO_BORDER);

        return cel21;
    }

    /**
     * 基础信息table 第5行
     */
    private static PdfPCell baseInfoTableFiveRow(BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, 8, com.lowagie.text.Font.NORMAL);

        PdfPTable table21 = new PdfPTable(12);
        table21.setWidths(new float[]{188, 222, 240, 250, 152, 434, 122, 434,
                146, 618, 125, 450});

        String Rxfsmc = "统招"; //入学方式
        String Rxny = "202209"; //入学年月
        String Dwmc = "基础医学院"; //单位名称
        String Zyfxmc = "临床医学"; //专业
        Object xzObj = "3"; //学制
        String Xz = "3";
        Xz = String.valueOf(xzObj);
        String Bjmc = "解剖1班"; //班级名称

        PdfPCell one21 = new PdfPCell(new Phrase("入学方式 ", font1));
        one21.setHorizontalAlignment(Element.ALIGN_CENTER);
        one21.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one22 = new PdfPCell(new Phrase(Rxfsmc, font1));
        one22.setHorizontalAlignment(Element.ALIGN_CENTER);
        one22.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one23 = new PdfPCell(new Phrase("入学年月", font1));
        one23.setHorizontalAlignment(Element.ALIGN_CENTER);
        one23.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one24 = new PdfPCell(new Phrase(Rxny, font1));
        one24.setHorizontalAlignment(Element.ALIGN_CENTER);
        one24.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one25 = new PdfPCell(new Phrase("系部", font1));
        one25.setHorizontalAlignment(Element.ALIGN_CENTER);
        one25.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one26 = new PdfPCell(new Phrase(Dwmc, font1));
        one26.setHorizontalAlignment(Element.ALIGN_CENTER);
        one26.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one27 = new PdfPCell(new Phrase("专业", font1));
        one27.setHorizontalAlignment(Element.ALIGN_CENTER);
        one27.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one28 = new PdfPCell(new Phrase(Zyfxmc, font1));
        one28.setHorizontalAlignment(Element.ALIGN_CENTER);
        one28.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one29 = new PdfPCell(new Phrase("行政班", font1));
        one29.setHorizontalAlignment(Element.ALIGN_CENTER);
        one29.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one210 = new PdfPCell(new Phrase(Bjmc, font1));
        one210.setHorizontalAlignment(Element.ALIGN_CENTER);
        one210.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one211 = new PdfPCell(new Phrase("学制", font1));
        one211.setHorizontalAlignment(Element.ALIGN_CENTER);
        one211.setVerticalAlignment(Element.ALIGN_MIDDLE);
        PdfPCell one212 = new PdfPCell(new Phrase(Xz, font1));
        one212.setHorizontalAlignment(Element.ALIGN_CENTER);
        one212.setVerticalAlignment(Element.ALIGN_MIDDLE);

        table21.addCell(one21);
        table21.addCell(one22);
        table21.addCell(one23);
        table21.addCell(one24);
        table21.addCell(one25);
        table21.addCell(one26);
        table21.addCell(one27);
        table21.addCell(one28);
        table21.addCell(one29);
        table21.addCell(one210);
        table21.addCell(one211);
        table21.addCell(one212);

        PdfPCell cel21 = new PdfPCell(table21);
        cel21.setBorder(PdfPCell.NO_BORDER);

        return cel21;
    }

    /**
     * 基础信息table 第6行
     */
    private static PdfPCell baseInfoTableSixRow(BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, 8, com.lowagie.text.Font.NORMAL);

        PdfPTable table21 = new PdfPTable(1);
        table21.setWidths(new float[]{180});

        PdfPCell one21 = new PdfPCell(new Phrase(" ", font1));
        one21.setHorizontalAlignment(Element.ALIGN_CENTER);
        one21.setVerticalAlignment(Element.ALIGN_MIDDLE);

        table21.addCell(one21);

        PdfPCell cel21 = new PdfPCell(table21);
        cel21.setBorder(PdfPCell.NO_BORDER);

        return cel21;
    }

    /**
     * 照片table
     */
    private static PdfPCell pictureTable(BaseFont bf) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(bf, 8, com.lowagie.text.Font.NORMAL);

        PdfPTable table = new PdfPTable(3);
        table.setWidths(new float[]{100, 10, 100});

        /************** 插入录取照片图片 start **************/
//        String imagePathLq =
//                "D:/" + "jwxt" + "/" + "picture" + "/" + "xspic" + "/" + Dwmc +
//                        "/" + njmc + "/" + Zyfxmc + "/" + Bjmc + "/" + Sfzjh + ".jpg";

//        String imagePathXl =
//                "D:/" + "jwxt" + "/" + "picture" + "/" + "xspic2" + "/" + Dwmc +
//                        "/" + njmc + "/" + Zyfxmc + "/" + Bjmc + "/" + Sfzjh + ".jpg";

        String imagePathLq = "D:\\opt\\第一套人名币.png";
        String imagePathXl = "D:\\opt\\简况表.jpg";

        FileInputStream fis = null;
        try {
            File file = new File(imagePathLq);
            if (file.exists()) {
                Image png = Image.getInstance(imagePathLq);
                //                png.scaleToFit(2.0f, 2.0f);
                png.scalePercent(2.8f);
                PdfPCell one = new PdfPCell(png, true);
                one.setFixedHeight(80);
                one.setHorizontalAlignment(Element.ALIGN_CENTER);
                one.setVerticalAlignment(Element.ALIGN_MIDDLE);
                table.addCell(one);
            } else {
                PdfPCell one = new PdfPCell(new Phrase("请上传录取照片", font1));
                one.setFixedHeight(80);
                one.setHorizontalAlignment(Element.ALIGN_CENTER);
                one.setVerticalAlignment(Element.ALIGN_MIDDLE);
                table.addCell(one);

            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (fis != null) {
                    fis.close();
                    fis = null;
                }
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }
        }
        /************** 插入录取照片图片 end **************/

        // 间隔
        PdfPCell two = new PdfPCell(new Phrase("", font1));
        two.setHorizontalAlignment(Element.ALIGN_CENTER);
        two.setVerticalAlignment(Element.ALIGN_MIDDLE);
        table.addCell(two);

        /************** 插入学历照片图片 start **************/
        try {
            // 获取图片路径
            File file = new File(imagePathXl);
            if (file.exists()) {
                Image png = Image.getInstance(imagePathXl);
                png.scalePercent(2.8f);
                PdfPCell three = new PdfPCell(png, true);
                three.setFixedHeight(80);
                three.setHorizontalAlignment(Element.ALIGN_CENTER);
                three.setVerticalAlignment(Element.ALIGN_MIDDLE);
                table.addCell(three);
            } else {
                PdfPCell three = new PdfPCell(new Phrase("请上传学历照片", font1));
                three.setFixedHeight(80);
                three.setHorizontalAlignment(Element.ALIGN_CENTER);
                three.setVerticalAlignment(Element.ALIGN_MIDDLE);
                table.addCell(three);

            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (fis != null) {
                    fis.close();
                    fis = null;
                }
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }
        }
        /************** 插入学历照片图片 end **************/

        PdfPCell cell = new PdfPCell(table);
        cell.setBorder(PdfPCell.NO_BORDER);
        return cell;
    }

    /**
     * 异动、毕业情况、结业后尚待补考科目、毕业学分 表头
     */
    private static PdfPCell endTitleTable(BaseFont baseFont) throws DocumentException {
        com.lowagie.text.Font font1 =
                new com.lowagie.text.Font(baseFont, 8, com.lowagie.text.Font.NORMAL);

        PdfPTable table21 = new PdfPTable(4);
        table21.setWidths(new float[]{1416, 977, 1231, 476});

        PdfPCell one1 = new PdfPCell(new Phrase("学籍异动", font1));
        one1.setHorizontalAlignment(Element.ALIGN_CENTER);
        one1.setVerticalAlignment(Element.ALIGN_MIDDLE);

        PdfPCell one2 = new PdfPCell(new Phrase("毕业情况", font1));
        one2.setHorizontalAlignment(Element.ALIGN_CENTER);
        one2.setVerticalAlignment(Element.ALIGN_MIDDLE);

        PdfPCell one3 = new PdfPCell(new Phrase("结业后尚待补考科目", font1));
        one3.setHorizontalAlignment(Element.ALIGN_CENTER);
        one3.setVerticalAlignment(Element.ALIGN_MIDDLE);

        PdfPCell one4 = new PdfPCell(new Phrase("毕业学分", font1));
        one4.setHorizontalAlignment(Element.ALIGN_CENTER);
        one4.setVerticalAlignment(Element.ALIGN_MIDDLE);

        table21.addCell(one1);
        table21.addCell(one2);
        table21.addCell(one3);
        table21.addCell(one4);

        PdfPCell cel21 = new PdfPCell(table21);
        cel21.setBorder(PdfPCell.NO_BORDER);

        return cel21;
    }

    /**
     * add by ljt on 20190610
     * pdf成绩预览
     */
    private static Map<String, String> getNotpassInfo(List<List<Row>> groupList) {
        //存储每个学期不及格课程信息
        Map<String, String> map = new HashMap();
        if (groupList == null || groupList.size() <= 0) {
            return map;
        }

        return map;
    }

    /**
     * 删除文件夹下所有文件,递归
     */
    private static boolean removeDir(File dir) {
        if (dir.isDirectory()) {
            String[] fileList = dir.list();
            for (String file : fileList) {
                boolean flag = removeDir(new File(dir, file));
                if (!flag) {
                    return false;
                }
            }
        }
        return dir.delete(); //此时目录为空,可以删除
    }

    //楷体
    public static BaseFont baseFontKt() {
        try {
            String font = "";
            if (Common.isLinux()) {
                font = "/usr/lib/jvm/java-1.8-openjdk/jre/lib/fonts/fallback/simkai.ttf";
            } else {
                font = "c:\\windows\\fonts\\simkai.ttf";
            }
            return BaseFont.createFont(font, com.itextpdf.text.pdf.BaseFont.IDENTITY_H, com.itextpdf.text.pdf.BaseFont.NOT_EMBEDDED);
        } catch (DocumentException | IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    //隶书
    public static BaseFont baseFontLs() {
        try {
            String font = "";
            if (Common.isLinux()) {
                font = "/usr/lib/jvm/java-1.8-openjdk/jre/lib/fonts/fallback/STLITI.TTF";
            } else {
                font = "c:\\windows\\fonts\\STLITI.TTF";
            }
            return BaseFont.createFont(font, com.itextpdf.text.pdf.BaseFont.IDENTITY_H, com.itextpdf.text.pdf.BaseFont.NOT_EMBEDDED);
        } catch (DocumentException | IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ljt-tiger

thanks

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值