springboot l 利用x-easypdf生成PDF

 String outputPath = "D:\\document.pdf";

        Document document = TemplateHandler.Document.build();

        Font font = new Font("微软雅黑", Font.PLAIN, 12);

        //============================================水印====================================================//

        // 创建多行水印
        Watermark watermark = TemplateHandler.Watermark.build()
                // 设置水印id
                .setId("SY")
                // 设置水印文本
                .setText("我就是个水印")
                // 设置水印文本字体大小
                .setFontSize("54pt")
                // 设置水印图片宽度
                .setWidth("300pt")
                // 设置水印图片高度
                .setHeight("200pt")
                // 设置水印显示宽度
                .setShowWidth("300pt")
                .setFontAlpha("20")
                .setRepeat("no-repeat")
                .setHorizontalPosition("center")
                .setVerticalPosition("center")
                .setRadians("-45")
                // 开启文件覆盖
                .enableOverwrite();


        //封面
        Page fm = TemplateHandler.Page.build().setFontFamily("微软雅黑");
        fm.setBodyBackgroundColor("#f6f5ec");
        // 添加水印
        fm.setBodyWatermark(watermark);

        // 创建普通文本
        Text fmtext1 = TemplateHandler.Text.build().setText("验房大师验房报告").setFontSize("36").setHorizontalStyle("center").setMarginTop("150pt");
        Text fmtext2 = TemplateHandler.Text.build().setText("房屋面积:  132㎡").setFontSize("18").setTextIndent("200pt").setMarginTop("130pt");
        Text fmtext3 = TemplateHandler.Text.build().setText("楼盘名称:  真隆夫").setFontSize("18").setTextIndent("200pt").setMarginTop("10pt");
        Text fmtext4 = TemplateHandler.Text.build().setText("门牌号码:  7-1-302").setFontSize("18").setTextIndent("200pt").setMarginTop("10pt");
        Text fmtext5 = TemplateHandler.Text.build().setText("验房老师:  杨老师").setFontSize("18").setTextIndent("200pt").setMarginTop("10pt");
        Text fmtext6 = TemplateHandler.Text.build().setText("验房日期:  2024-10-10").setFontSize("18").setTextIndent("200pt").setMarginTop("10pt");
        Text fmtext7 = TemplateHandler.Text.build().setText("咨询电话:  18833665656").setFontSize("18").setTextIndent("200pt").setMarginTop("10pt");

//        // 创建图像
//        Barcode lCode = TemplateHandler.Barcode.build()
//                // 设置类型
//                .setType("qr_code")
//                // 设置宽度
//                .setWidth("150px")
//                // 设置高度
//                .setHeight("150px")
//                .setMarginTop("50pt")
//                // 设置内容
//                .setContent("https://www.x-easypdf.cn")
//                // 设置显示文本
//                .setWords("https://www.x-easypdf.cn")
//                // 设置水平居中
//                .setHorizontalStyle("center");
//        // 创建图像
//        Barcode rCode = TemplateHandler.Barcode.build()
//                // 设置类型
//                .setType("qr_code")
//                // 设置宽度
//                .setWidth("150px")
//                // 设置高度
//                .setHeight("150px")
//                .setMarginTop("50pt")
//                // 设置内容
//                .setContent("https://www.x-easypdf.cn")
//                // 设置显示文本
//                .setWords("https://www.x-easypdf.cn")
//                // 设置水平居中
//                .setHorizontalStyle("center");

        // 创建表格
        Table fmtable = TemplateHandler.Table.build();
        fmtable.setMarginTop("70pt");
        fmtable.setMarginLeft("60pt");
        fmtable.setMarginRight("60pt");
        // 创建表格体
        TableBody fmtableBody = TemplateHandler.Table.Body.build();

        TableRow fmrow = TemplateHandler.Table.Row.build();
        // 循环创建表格单元格
        for (int j = 1; j <= 2; j++) {

            // 创建表格单元格
            TableCell cell = TemplateHandler.Table.Cell.build();

            // 创建图像
            Barcode rCode = TemplateHandler.Barcode.build()
                    // 设置类型
                    .setType("qr_code")
                    // 设置宽度
                    .setWidth("150px")
                    // 设置高度
                    .setHeight("150px")
                    // 设置内容
                    .setContent("https://www.x-easypdf.cn")
                    // 设置显示文本
                    .setWords("https://www.x-easypdf.cn");
            // 添加文本
            cell.addComponent(rCode);
            cell.setHorizontalStyle("center");
            // 添加单元格
            fmrow.addCell(cell);
        }
        // 添加行
        fmtableBody.addRow(fmrow);

        // 设置表格体
        fmtable.setBody(fmtableBody);

        // 添加文本
        fm.addBodyComponent(fmtext1);
        fm.addBodyComponent(fmtext2);
        fm.addBodyComponent(fmtext3);
        fm.addBodyComponent(fmtext4);
        fm.addBodyComponent(fmtext5);
        fm.addBodyComponent(fmtext6);
        fm.addBodyComponent(fmtext7);
        // 添加图像
        fm.addBodyComponent(fmtable);


        document.addPage(fm);

        //============================================页眉====================================================//

        //正文
        Page page = TemplateHandler.Page.build().setFontFamily("微软雅黑");
        // 添加水印
        page.setBodyWatermark(watermark);

        page.setBodyMarginTop("70pt");
        page.setBodyMarginBottom("50pt");
        page.setMarginLeft("50pt");
        page.setMarginRight("50pt");

        //页眉
        Text headerText = TemplateHandler.Text.build().setText("品质验房,专业品质,贴心服务");
        // 创建图像
        org.dromara.pdf.fop.core.doc.component.image.Image iheader = TemplateHandler.Image.build()
                // 设置图像路径(绝对路径)
                .setPath("/D:\\360Downloads\\4_0.png")
                // 设置图像宽度
                .setWidth("20px")
                // 设置图像高度
                .setHeight("20px");

        // 创建表格
        Table h_table = TemplateHandler.Table.build().setHeight("40pt").setMarginTop("20pt");
        // 创建表格体
        TableBody h_tableBody = TemplateHandler.Table.Body.build();

        // 创建表格行
        TableRow h_row = TemplateHandler.Table.Row.build();

        // 创建表格单元格
        TableCell l_cell = TemplateHandler.Table.Cell.build();
        l_cell.setHorizontalStyle("left");
        l_cell.setVerticalStyle("after");
        // 添加文本
        l_cell.addComponent(iheader);
        // 添加单元格
        h_row.addCell(l_cell);

        // 创建表格单元格
        TableCell r_cell = TemplateHandler.Table.Cell.build();
        r_cell.setHorizontalStyle("right");
        r_cell.setVerticalStyle("after");
        // 添加文本
        r_cell.addComponent(headerText);
        // 添加单元格
        h_row.addCell(r_cell);

        // 添加行
        h_tableBody.addRow(h_row);

        // 设置表格体
        h_table.setBody(h_tableBody);

        //分割线
        SplitLine solid1 = TemplateHandler.SplitLine.build().setStyle("solid").setLength("100%");
        solid1.enableKeepTogether();
        page.setHeaderHeight("50pt").setMarginBottom("10pt").addHeaderComponent(h_table, solid1);

        //============================================页脚====================================================//

        // 创建页脚
        Text l_footerText = TemplateHandler.Text.build().setText("服务人员");
        Text r_footerText = TemplateHandler.Text.build().setText("电话:18825365655");

        // 创建当前页码
        CurrentPageNumber currentPageNumber = TemplateHandler.CurrentPageNumber.build();
        // 创建总页码
        TotalPageNumber totalPageNumber = TemplateHandler.TotalPageNumber.build().setPageId("page");

        // 创建表格
        Table f_table = TemplateHandler.Table.build().setHeight("50pt");
        // 创建表格体
        TableBody f_tableBody = TemplateHandler.Table.Body.build();

        // 创建表格行
        TableRow f_row = TemplateHandler.Table.Row.build();

        // 创建表格单元格
        TableCell l_f_cell = TemplateHandler.Table.Cell.build();
        l_f_cell.setHorizontalStyle("left");
        l_f_cell.setVerticalStyle("after");
        // 添加文本
        l_f_cell.addComponent(l_footerText);
        // 添加单元格
        f_row.addCell(l_f_cell);

        // 创建表格单元格
        TableCell z_cell = TemplateHandler.Table.Cell.build();
        z_cell.setHorizontalStyle("center");
        z_cell.setVerticalStyle("after");

        // 创建容器
        BlockContainer container = TemplateHandler.BlockContainer.build();
        // 创建当前页码文本
        Text pageCurrentText = TemplateHandler.Text.build().setText("第 ");
        // 创建总页码文本
        Text pageTotalText = TemplateHandler.Text.build().setText(" 页/共 ");

        Text pageTotalEndText = TemplateHandler.Text.build().setText(" 页");
        // 添加容器内组件
        container.addComponent(pageCurrentText, currentPageNumber, pageTotalText, totalPageNumber, pageTotalEndText);
        container.setMarginTop("5pt");
        // 添加文本
        z_cell.addComponent(container);
        // 添加单元格
        f_row.addCell(z_cell);

        // 创建表格单元格
        TableCell r_f_cell = TemplateHandler.Table.Cell.build();
        r_f_cell.setHorizontalStyle("right");
        r_f_cell.setVerticalStyle("after");
        // 添加文本
        r_f_cell.addComponent(r_footerText);
        // 添加单元格
        f_row.addCell(r_f_cell);

        // 添加行
        f_tableBody.addRow(f_row);

        // 设置表格体
        f_table.setBody(f_tableBody);
        page.setFooterHeight("50pt").addFooterComponent(f_table);
        page.setId("page");

//============================================第一页====================================================//

        Text title_1 = TemplateHandler.Text.build().setText("一、委托信息").setFontSize("24");
        page.addBodyComponent(title_1);

        // 创建表格
        Table t1_table = TemplateHandler.Table.build().setMarginTop("30pt");
        // 创建表格体
        TableBody t1_tableBody = TemplateHandler.Table.Body.build();

        for (int i = 0; i < 4; i++) {
            // 创建表格行
            TableRow row = TemplateHandler.Table.Row.build();

            if (i == 0) {
                // 创建表格单元格
                TableCell cell1 = TemplateHandler.Table.Cell.build();
                // 设置单元格边框
                // 创建文本
                Text text1 = TemplateHandler.Text.build().setText("楼盘: 真隆夫");
                // 添加文本
                cell1.addComponent(text1);
                cell1.setHeight("40");
                // 添加单元格
                row.addCell(cell1);

                // 创建表格单元格
                TableCell cell = TemplateHandler.Table.Cell.build();
                // 设置单元格边框
                //cell.setBorder("1 solid black");
                // 创建文本
                Text text = TemplateHandler.Text.build().setText("房间: 7-1-302");
                // 添加文本
                cell.addComponent(text);
                cell.setHeight("40");
                // 添加单元格
                row.addCell(cell);

                // 添加行
                t1_tableBody.addRow(row);

            } else if (i == 1) {
                // 创建表格单元格
                TableCell cell1 = TemplateHandler.Table.Cell.build();
                // 设置单元格边框
                //cell1.setBorder("1 solid black");
                // 创建文本
                Text text1 = TemplateHandler.Text.build().setText("姓名: 王先生");
                // 添加文本
                cell1.addComponent(text1);
                cell1.setHeight("40");
                // 添加单元格
                row.addCell(cell1);

                // 创建表格单元格
                TableCell cell = TemplateHandler.Table.Cell.build();
                // 设置单元格边框
                //cell.setBorder("1 solid black");
                // 创建文本
                Text text = TemplateHandler.Text.build().setText("电话: 18832653232");
                // 添加文本
                cell.addComponent(text);
                cell.setHeight("40");
                // 添加单元格
                row.addCell(cell);

                // 添加行
                t1_tableBody.addRow(row);
            } else if (i == 2) {
                // 创建表格单元格
                TableCell cell = TemplateHandler.Table.Cell.build();
                // 设置单元格边框
                //cell.setBorder("1 solid black");
                cell.setColumnSpan(2);
                cell.setHeight("50");
                // 创建文本
                Text text = TemplateHandler.Text.build().setText("【委托书】:应业主要求,研发岗的后代洒家打开就ask了解的卡拉就是考虑到吉安卡罗设计的刻录机");
                // 添加文本
                cell.addComponent(text);
                // 添加单元格
                row.addCell(cell);

                // 添加行
                t1_tableBody.addRow(row);
            } else {
                // 创建表格单元格
                TableCell cell = TemplateHandler.Table.Cell.build();
                // 设置单元格边框
                //cell.setBorder("1 solid black");
                cell.setColumnSpan(2);
                cell.setHeight("120");
                // 创建文本
                Text text = TemplateHandler.Text.build().setText("【业主须知】:暗红色的卡卡洒家打开hjhjkhjk法国很多很多的的还得反对法二撒旦发射点发生的发生的发生的发生的发生的发生的垃圾卡拉就是快乐的骄傲看似简单卡拉就是看了大家深刻理解奥克兰的就卡了就打开垃圾的卡拉打开了案件考虑到吉安卡罗的金克拉觉得卡拉就打开垃圾贷款");
                // 添加文本
                cell.addComponent(text);

                // 添加单元格
                row.addCell(cell);

                // 添加行
                t1_tableBody.addRow(row);
            }
        }
        // 设置表格体
        t1_table.setBody(t1_tableBody);
        t1_table.setHeight("800");
        t1_table.setWidth("400");
        t1_table.setMargin("10pt");
        // 添加表格
        page.addBodyComponent(t1_table);

        Text title_2 = TemplateHandler.Text.build().setText("二、查询数据分析").setFontSize("24");
        title_2.setMarginTop("20pt");
        page.addBodyComponent(title_2);

        //饼图
        DefaultPieDataset bar_dataset = new DefaultPieDataset();
        bar_dataset.setValue("前厅 A", 40);
        bar_dataset.setValue("大门 B", 30);
        bar_dataset.setValue("阳台 C", 20);
        bar_dataset.setValue("卫生间 D", 10);

        ChartFactory.setChartTheme(JfreeChartUtil.createChartTheme());
        JFreeChart bar_chart = ChartFactory.createPieChart(
                "饼图",  // chart title
                bar_dataset,             // dataset
                true,                // include legend
                true,
                false
        );

        // 设置中文字体
        bar_chart.getTitle().setFont(font);
        bar_chart.setTextAntiAlias(false);
        JfreeChartUtil.setPieRender(bar_chart.getPlot());

        File bar_file = new File("D:\\360Downloads\\22.png");
        try {
            ChartUtils.saveChartAsJPEG(bar_file, bar_chart, 400, 300);
        } catch (IOException e) {
            e.printStackTrace();
        }

        org.dromara.pdf.fop.core.doc.component.image.Image barImage = TemplateHandler.Image.build()
                // 设置图像路径(绝对路径)
                .setPath("/" + bar_file.getPath())
                // 设置图像宽度
                .setWidth("600px")
                // 设置图像高度
                .setHeight("280px")
                // 设置水平居中
                .setHorizontalStyle("center")
                .setMarginTop("10pt");
        // 添加图像
        page.addBodyComponent(barImage);

        //============================================第er页====================================================//

        //曲线图
        DefaultCategoryDataset line_taset = new DefaultCategoryDataset();

        // 添加数据,横轴为字符串,纵轴为数值
        line_taset.addValue(1.0, "", "前厅");
        line_taset.addValue(4.0, "", "卫生间");
        line_taset.addValue(3.0, "", "厨房");
        line_taset.addValue(5.0, "", "客厅");

        // 创建柱状图
        JFreeChart line_Chart = ChartFactory.createBarChart(
                "房屋问题统计",        // 图表标题
                "",             // 横轴标签
                "",               // 纵轴标签
                line_taset,           // 数据集
                PlotOrientation.VERTICAL, // 图表方向
                false,              // 显示图例
                true,              // 显示工具提示
                false);// 显示 URL

        // 设置中文字体
        line_Chart.getTitle().setFont(font);
        JfreeChartUtil.setBarRenderer(line_Chart.getPlot(),true);

        File line_file = new File("D:\\360Downloads\\33.png");
        try {
            ChartUtils.saveChartAsPNG(line_file, line_Chart, 400, 300);
        } catch (IOException e) {
            e.printStackTrace();
        }

        org.dromara.pdf.fop.core.doc.component.image.Image lineImage = TemplateHandler.Image.build()
                // 设置图像路径(绝对路径)
                .setPath("/" + line_file.getPath())
                // 设置图像宽度
                .setWidth("600px")
                // 设置图像高度
                .setHeight("280px")
                // 设置水平居中
                .setHorizontalStyle("center");
        // 添加图像
        page.addBodyComponent(lineImage);

        Text title_3 = TemplateHandler.Text.build().setText("三、房屋查验内容").setFontSize("24");
        title_3.setMarginTop("20pt");
        page.addBodyComponent(title_3);


        //图片内容  table
        // 创建表格
        Table img_table = TemplateHandler.Table.build().setHorizontalStyle("center");
        // 创建表格体
        TableBody img_tableBody = TemplateHandler.Table.Body.build();
        // 循环创建表格行
        for (int i = 1; i <= 5; i++) {//问题数量
            //标题
            TableRow row1 = TemplateHandler.Table.Row.build();
            TableCell cell1 = TemplateHandler.Table.Cell.build();
            cell1.setHorizontalStyle("center");
            cell1.setVerticalStyle("center");
            cell1.addComponent(TemplateHandler.Text.build().setText("部位"));
            cell1.setBackgroundColor("green");
            cell1.setColumnSpan(2);
            cell1.setHeight("30pt");
            cell1.setBorder("1 solid black");
            row1.addCell(cell1);
            img_tableBody.addRow(row1);

            //描述
            TableRow row2 = TemplateHandler.Table.Row.build();
            TableCell cell2 = TemplateHandler.Table.Cell.build();
            cell2.setHorizontalStyle("left");
            cell2.setColumnSpan(2);
            cell2.setVerticalStyle("center");
            cell2.setHeight("70pt");
            cell2.setBorder("1 solid black");
            cell2.addComponent(TemplateHandler.Text.build().setText("这里是问题描述的地方,爱睡觉的卢卡库老师金克拉就是卡拉几十块Djakarta吉安卡罗觉得卡拉就是的卡拉就是的刻录机ask了点击"));
            row2.addCell(cell2);
            img_tableBody.addRow(row2);

            //图片
            int img = RandomUtil.randomInt(0, 7);//图片数量

            if (img == 0) continue;

            int c = 0;

            while (c <= img) {
                for (int x = 1; x <= 2; x++) {//标题  描述  图片
                    TableRow row = TemplateHandler.Table.Row.build();
                    for (int y = c; y <= c+1; y++) {//问题数量

                        //判断数据集是否超出
                        if (y> img) continue;

                        TableCell cell = TemplateHandler.Table.Cell.build();
                        cell.setBorder("1 solid black");
                        if (x == 1) {
                            Image m1 = TemplateHandler.Image.build()
                                    // 设置图像路径(绝对路径)
                                    .setPath("/D:\\360Downloads\\4_0.png")
                                    // 设置图像宽度
                                    .setWidth("200px")
                                    // 设置图像高度
                                    .setHeight("150px")
                                    // 设置水平居中
                                    .setHorizontalStyle("center")
                                    .setMarginBottom("5pt");

                            cell.addComponent(m1);
                        } else {
                            cell.addComponent(TemplateHandler.Text.build().setText("这里是问题描述的地方"));
                            cell.setHorizontalStyle("center");
                            cell.setVerticalStyle("center");
                            cell.setHeight("20px");
                        }
                        row.addCell(cell);
                    }
                    img_tableBody.addRow(row);
                }
                c = c + 2;
            }
        }

        // 设置表格体
        img_table.setWidth("490");
        img_table.setMarginTop("20pt");
        img_table.setBody(img_tableBody);

        // 添加表格
        page.addBodyComponent(img_table);

        Text title_4 = TemplateHandler.Text.build().setText("四、查验依据说明").setFontSize("24").setBreakBefore("page");
        title_4.setMarginTop("20pt");
        page.addBodyComponent(title_4);

        // 创建表格
        Table we_table = TemplateHandler.Table.build().setHorizontalStyle("center");
        // 创建表格体
        TableBody we_tableBody = TemplateHandler.Table.Body.build();
        // 循环创建表格行
        TableRow we_row = TemplateHandler.Table.Row.build();
        TableCell we_cell = TemplateHandler.Table.Cell.build();
        we_cell.setBorder("1 solid black");
        we_cell.setHorizontalStyle("left");
        we_cell.setVerticalStyle("top");
        we_cell.setHeight("300pt");

        Text text = TemplateHandler.Text.build().setText("【精装房整改共性建议】\n").setLeading("2");
        Text text1 = TemplateHandler.Text.build().setText("1、五金件松动、故障需调试安装\n").setLeading("2");
        Text text2 = TemplateHandler.Text.build().setText("一、五金件:松动、故障:调试、更换。\n").setLeading("2");
        Text text3 = TemplateHandler.Text.build().setText("参考规范:《建筑装饰装修工程质量验收标准》GB50210-2018\n").setLeading("2");
        Text text4 = TemplateHandler.Text.build().setText("二、石材:破损可通过相近颜色云石胶修补,破损严重需更换。\n").setLeading("2");
        Text text5 = TemplateHandler.Text.build().setText("参考规范:《建筑地面工程施工质量验收规范》GB50209-2010\n").setLeading("2");
        Text text6 = TemplateHandler.Text.build().setText("三、木地板:\n").setLeading("2");
        Text text7 = TemplateHandler.Text.build().setText("1.软塌:地坪重新找平。\n").setLeading("2");
        Text text8 = TemplateHandler.Text.build().setText("2.起灰:清理地板余灰。\n").setLeading("2");
        Text text9 = TemplateHandler.Text.build().setText("参考规范:《建筑地面工程施工质量验收规范》GB50209-2010\n").setLeading("2");
        Text text10 = TemplateHandler.Text.build().setText("四、瓷砖:\n").setLeading("2");
        Text text11 = TemplateHandler.Text.build().setText("1.空鼓:墙砖空鼓需重新铺贴。地砖边角空鼓可灌浆处理,面积较大、中空需重新铺贴。\n").setLeading("2");
        Text text12 = TemplateHandler.Text.build().setText("2.高低差:地砖高低差超0.5mm需重新铺贴,墙砖高低差超1mm需重新铺贴。\n").setLeading("2");
        Text text13 = TemplateHandler.Text.build().setText("3.平整度:瓷砖超过2mm需重新铺贴。\n").setLeading("2");
        Text text14 = TemplateHandler.Text.build().setText("参考规范:《建筑装饰装修工程质量验收标准》GB50210-2018;《建筑地面工程施工质量\n").setLeading("2");
        Text text15 = TemplateHandler.Text.build().setText("第10页\n").setLeading("2");
        Text text16 = TemplateHandler.Text.build().setText("验收规范》GB50209-2010\n").setLeading("2");
        Text text17 = TemplateHandler.Text.build().setText("五、地漏:\n").setLeading("2");
        Text text18 = TemplateHandler.Text.build().setText("1.错位:弯头连接或重新铺装。\n").setLeading("2");
        Text text19 = TemplateHandler.Text.build().setText("2.下水管短缺:短管连接,防水砂浆抹边。\n").setLeading("2");
        Text text20 = TemplateHandler.Text.build().setText("参考规范:《建筑给水排水及采暖工程施工质量验收规范》GB50242-2002\n").setLeading("2");

        we_cell.addComponent(text, text1, text2, text3, text4, text5, text6, text7, text8, text9, text10, text11, text12, text13, text14, text15, text16, text17, text18, text19, text20);

        we_row.addCell(we_cell);
        we_tableBody.addRow(we_row);
        // 设置表格体
        we_table.setWidth("490");
        we_table.setMarginTop("20pt");
        we_table.setBody(we_tableBody);

        // 添加表格
        page.addBodyComponent(we_table);

        document.addPage(page);

        document.transform(outputPath);

x-easypdf基于pdfbox构建而来,极大降低使用门槛,以组件化的形式进行pdf的构建。简单易用,仅需一行代码,便可完成pdf的操作。 x-easypdf特性: 1、轻量级 仅添加pdfbox相关依赖,无其他任何依赖 2、简单易用 仅需一行代码,便可完成pdf的操作 3、自动换行分页 文本超出单行显示时,即可自动换行;内容超出单页显示时,即可自动分页 4、模板填充 提供内置方法,可轻松实现模板填充 5、组件化 页面所有内容均采用组件化形式进行构建,使用不同的组件组合方式,即可构造出理想的文档 6、扩展灵活 只需实现系统提供的接口,即可完成自定义的组件扩展 x-easypdf软件架构: 1、document(文档):PDF文档 2、page(页面):若干个页面组成PDF文档 3、watermark(水印):每个页面可设置页面级别的独立水印,也可设置文档级别的全局水印,优先级为:页面级别>文档级别 4、header(页眉):每个页面可设置页面级别的独立页眉,也可设置文档级别的全局页眉,优先级为:页面级别>文档级别 5、footer(页脚):每个页面可设置页面级别的独立页脚,也可设置文档级别的全局页脚,优先级为:页面级别>文档级别 6、component(组件):核心,每个页面由若干个组件构成 text(文本组件):已提供,文本写入组件 line(线条组件):已提供,线条写入组件 image(图片组件):已提供,图片写入组件 table(表格组件):已提供,表格写入组件,cell(单元格)->row(行)->table(表格) rect(方形组件):已提供,方形写入组件 后续将添加更多其他方便实用的组件。。。 x-easypdf安装教程: mvn clean install   x-easypdf 更新日志: v2.2.0 新特性: 1、新增文档改变页面尺寸方法 2、新增文档提取器简单表格的文本内容提取(单行单列) 3、表格组件功能增强,已支持添加图片与文本,更灵活的表格定义 原有变更: 1、移除XEasyPdfUtil工具类 2、文档XEasyPdfDocument#image方法变更为imager,返回值变为XEasyPdfDocumentImager(文档图像器) 3、文档操作完毕,需手动关闭文档(调用close方法关闭) 问题修复: 1、修复字体错误问题(issue#I2BGJ1,issue#I2BGM3)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值