为writeSelectedRows()方法定义行范围

时间:2014-05-19 06:20:58

标签: java pdf-generation itext pdfptable

我试图通过扩展PdfPageEventHelper类来为表添加标题。所以我试着用onEndPage()。我得到了正确的标题,但rowspan属性不适用于该表。

我正在尝试使用下面的代码,

 PdfPTable table1 = new PdfPTable(3);
        try{
            table1.setWidths(new int[]{15,20,20});
            table1.setLockedWidth(true);
            table1.setTotalWidth(700);

        Image image = Image.getInstance("images.png");
        PdfPCell cell = new PdfPCell(new Paragraph("{Month}", font3));
        PdfPCell cell2 = new PdfPCell(image, false);
        cell.setColspan(2);
        cell.setBorder(PdfPCell.NO_BORDER);
        cell.setHorizontalAlignment(Element.ALIGN_LEFT);
        cell2.setBorder(PdfPCell.NO_BORDER);
        cell2.setRowspan(2);
        PdfPCell cell3 = new PdfPCell(new Paragraph("Mr Fname Lname", font3));
        cell3.setColspan(2);
        cell3.setBorder(PdfPCell.NO_BORDER);
        cell3.setHorizontalAlignment(Element.ALIGN_LEFT);
        table1.addCell(cell);
        table1.addCell(cell2);
        table1.addCell(cell3);
        table1.writeSelectedRows(0, -1, 20 , 820, writer.getDirectContent());
        }

更新

当我运行您在示例中提供给我的相同代码时,它会打印如下所示的pdf,

enter image description here

1 个答案:

答案 0 :(得分:1)

你的代码中有很多尴尬的行。例如:您正在为表的默认单元格定义属性,但您没有在任何地方使用默认单元格:您只使用cellcell2cell3。这三个单元格是使用PdfPCell构造函数创建的,这意味着它们不会从默认单元格继承任何内容。

如果您的指控“它不起作用”是指默认单元格的属性,那么您的指控是错误的:您不会在任何地方使用默认单元格。

如果使用writeSelectedRows()方法添加表格,则无需锁定宽度。您将表格宽度定义为700,但是您确定700适合页面的宽度吗?

您的图片尺寸是多少?由于您没有缩放图像以适合单元格,因此可能会超出单元格的大小。

我已经简化了代码,删除了上面提到的所有无用的代码,最后我得到了RowspanAbsolutePosition示例。 resulting PDF file looks perfectly normal,从而证明您的问题“行跨度不适用于writeSelectedRows()方法”的标题不正确。

PS:定义两列并且同时为该列中的所有单元格提供两个colspan是没有意义的。使用正常细胞将其减少到一列是有意义的。