IText:如何将被文本包围的内部 table 添加到 table

IText: How to add an inner table surrounded by text to a table

我试图在 iText 5.5.4 中向外部 table 添加一个被文本包围的 table,但是内部 table 消失了,我似乎无法修复问题。

这是我所期待的:

*********************
* Hello World       *
* +++++++++++++++++ * <--
* + Goodbye World + * <-- these 3 lines never show up in the PDF
* +++++++++++++++++ * <--
* Hello World       *
*********************

这是我的代码示例:

public class TableTest {
    public static void main(String[] args) throws FileNotFoundException,     DocumentException {
        final Document document = new Document(PageSize.LETTER, 21, 21, 30, 35);
        PdfWriter.getInstance(document, new FileOutputStream("testTable.pdf"));

        document.open();

        // table 2
        final PdfPTable table2 = new PdfPTable(1);
        table2.setSpacingBefore(0);
        table2.setHorizontalAlignment(Element.ALIGN_LEFT);
        table2.getDefaultCell().setBorderColor(BaseColor.RED);
        table2.getDefaultCell().setBorderWidth(1);

        table2.addCell("Goodbye World");

        // table 1
        final PdfPTable table1 = new PdfPTable(1);
        table1.setSpacingBefore(0);
        table1.setHorizontalAlignment(Element.ALIGN_LEFT);
        table1.setWidthPercentage(100);
        table1.getDefaultCell().setBorderColor(BaseColor.BLACK);
        table1.getDefaultCell().setBorderWidth(1);

        // contents
        Phrase phrase = new Phrase();

        phrase.add(new Chunk("Hello World"));
        phrase.add(table2); // <--- added but doesn't show up!
        phrase.add(new Chunk("Hello World"));

        table1.addCell(phrase);

        document.add(table1);

        document.close();
    }
}

这是一个更大的报告的一部分,我在这种情况下使用 tables 作为边框和填充。

您正在使用文本模式(当您只有文本时使用),而您应该使用复合模式(因为您要将 table 添加到单元格)。

请看一下NestedTableProblem例子:

// table 2
final PdfPTable table2 = new PdfPTable(1);
table2.setHorizontalAlignment(Element.ALIGN_LEFT);
table2.getDefaultCell().setBorderColor(BaseColor.RED);
table2.getDefaultCell().setBorderWidth(1);
table2.addCell("Goodbye World");
// table 1
final PdfPTable table1 = new PdfPTable(1);
table1.setHorizontalAlignment(Element.ALIGN_LEFT);
table1.setWidthPercentage(100);
// contents
PdfPCell cell = new PdfPCell();
cell.setBorderColor(BaseColor.BLACK);
cell.setBorderWidth(1);
cell.addElement(new Chunk("Hello World"));
cell.addElement(table2);
cell.addElement(new Chunk("Hello World"));
table1.addCell(cell);
document.add(table1);

在此代码片段中,cell 对象由不同的元素组成(这就是 复合模式 的意义所在):

在您的代码片段中,您将几个元素添加到 Phrase 并将此 Phrase 添加到 文本模式 中的 PdfPCell .由于一个元素不是普通文本而是table,因此无法呈现。