使用iTextPDF拆分嵌套表或内表的行

时间:2018-02-03 11:34:05

标签: java android pdf itext pdf-generation

如何拆分内部表的行。根据图像的问题描述。

  1. 在这里,我有一个名为 PARENT_TABLE 的表,其中包含两个名为 HEADER_TABLE CONTENT_TABLE
  2. CONTENT_TABLE 的单元格包含 INNER_TABLE 。 INNER_TABLE包含动态行/内容,其高度将根据内容进行更改。
  3. 所以,如果我使用一个页面制作这个表,它就能完美运行。但是,如果我需要在不同的页面中拆分表格,它会显示像image_2这样的错误。请帮帮我。 结果:即使页面分成两页或更多页,该表应该与image_1类似。

    请查看提到的图片以便更清楚。

    IMAGE_1 enter image description here

    尝试在空对象引用上读取字段'float com.itextpdf.text.pdf.ColumnText.maxY'

    IMAGE_2 enter image description here

1 个答案:

答案 0 :(得分:0)

我刚刚找到了解决方案。只有在尝试将PDFPTable拆分为两个页面时才会出现此问题。我曾经使用过 tableCell.setRowspan(2),所以在尝试拆分上面的表时会出现问题。

解决它:我刚用一个空单元代替使用 tableCell.setRowspan(2)

private PdfPTable contentWithDateTitleAndDescription(String stringData1, String stringData2, String stringData3, String stringData4) throws IOException, BadElementException {

        float relativeWidth[] = {2, 7};
        PdfPTable table = new PdfPTable(relativeWidth);
        table.setWidthPercentage(100);

        PdfPCell cellA = new PdfPCell();
        cellA.setBorder(Rectangle.NO_BORDER);
        // dateCell.setRowspan(2);
        cellA.setPaddingLeft(15);
        cellA.setVerticalAlignment(Element.ALIGN_CENTER);
        cellA.setPaddingTop(7);
        Paragraph dateParagraph = new Paragraph(stringData1);
        cellA.addElement(dateParagraph);

        PdfPCell emptyCellB = new PdfPCell();
        emptyCellB.setBorder(Rectangle.NO_BORDER);


        PdfPCell cellC = new PdfPCell();
        cellC.setBorder(Rectangle.NO_BORDER);
        cellC.setVerticalAlignment(Element.ALIGN_LEFT);
        Paragraph titleParagraph = new Paragraph(stringData2 + " / " + stringData3);
        cellC.addElement(titleParagraph);


        PdfPCell cellD = new PdfPCell();
        cellD.setBorder(Rectangle.NO_BORDER);
        cellD.setVerticalAlignment(Element.ALIGN_LEFT);
        Paragraph descriptionParagraph = new Paragraph(stringData4);
        cellD.addElement(descriptionParagraph);
        cellD.setPaddingBottom(15);

        table.addCell(cellA);
        table.addCell(cellC);
        table.addCell(emptyCellB);
        table.addCell(cellD);
        return table;

    }