【问题标题】:Remove nested table border from itext table从 itext 表格中删除嵌套表格边框
【发布时间】:2020-09-01 08:41:52
【问题描述】:

我试图通过 java 在 itext 中创建嵌套表。我可以创建它,但出乎意料的是,嵌套表格与原始表格的单元格边框一起拥有自己的边框。 有没有办法在nestedParent 的 右侧列中仅删除嵌套表 的外边框? 我的代码:

String dest= FileSystems.getDefault().getPath("").toAbsolutePath().toString()+"/test.pdf";
        log.info(dest);
        PdfWriter writer= new PdfWriter(dest);
        PdfDocument pdfDoc = new PdfDocument(writer);
        pdfDoc.addNewPage();

        Document document = new Document(pdfDoc);

        float [] pointColumnWidths = {150F, 150F};
        Table outerTable = new Table(pointColumnWidths);

        for (int i = 0; i < 5; i++) {
            outerTable.addCell("col1-" + i);
            outerTable.addCell("col2-" + i);

        }

        float [] innerTablePointColumnWidths = {150F, 150F, 150F, 150F};
        Table nestedTable = new Table(innerTablePointColumnWidths);

        nestedTable.addCell("col11");
        nestedTable.addCell("col11_val");

        nestedTable.addCell("col12");
        nestedTable.addCell("col12_val");

        nestedTable.addCell("col22");
        nestedTable.addCell("col22_val");

        nestedTable.addCell("col23");
        nestedTable.addCell("col23_val");

        nestedTable.addCell("col31");
        nestedTable.addCell("col31_val");

        nestedTable.addCell("col32");
        nestedTable.addCell("col32_val");

        outerTable.addCell("nestedParent");

        outerTable.setBorder(Border.NO_BORDER);
       /* Cell cell = new Cell();
        cell.add(nestedTable);*/
        // cell.setBorder(Border.NO_BORDER);
        //outerTable.addCell(cell);

        outerTable.addCell(nestedTable);



        document.add(outerTable);

        document.close();

itext相关的lib版本7.1.12

【问题讨论】:

    标签: java itext7


    【解决方案1】:

    我无法使用内表解决问题。因此,为了解决这个问题,我必须定义一个包含 5 列的表,然后在必要时使用 rowcol span 为该特定条目定义必要的单元格定义,例如

    Cell cell= new Cell(1,1);
    Cell cell=new Cell(1,4);
    

    对于一行内的五列:

    Cell cell= new Cell(4,1)
    

    这样就解决了!

    【讨论】:

      【解决方案2】:

      您需要从内部表格单元格中删除每个边框(即“col11”单元格应将其上下边框设置为 null 或 Border#NO_BORDER 并将内部表格单元格设置为 null)。

      此外,您应该将内表的填充设置为 0 以消除间隙。

      Cell cell = new Cell();
              cell.setPadding(0);
              cell.add(nestedTable);
              outerTable.addCell(cell);
      

      【讨论】:

      • 你能添加那个代码,扩展我在问题中给出的代码吗?
      • nestedTable.setPadding(-1);nestedTable.addCell("col11").setBorderLeft(Border.NO_BORDER);我这样改了,内表的右边框与外边对齐[用于填充],但其他的则保持原样
      • 我以另一种方便的方式解决了它[在我的回答中]。感谢您的努力
      猜你喜欢
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      • 2017-05-27
      • 2010-11-23
      • 1970-01-01
      • 2018-04-29
      相关资源
      最近更新 更多