IText:如何将包含文本的内部表添加到表中

时间:2015-02-09 19:53:02

标签: itext

我正在尝试将文本包围的表添加到iText 5.5.4中的外表中,但内部表消失了,我似乎无法解决问题。

这是我所期待的:

*********************
* 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();
    }
}

这是更大的报告的一部分,我在这个场景中使用表格来进行边框和填充。

1 个答案:

答案 0 :(得分:0)

在您应该使用复合模式的情况下,您正在使用文本模式(仅在您有文本时使用)(因为您要向细胞)。

请查看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对象由不同的元素组成(复合模式的含义):

Screen shot

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