Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java setTableEvent setter不再适用于带有itext7的表_Java_Itext7 - Fatal编程技术网

Java setTableEvent setter不再适用于带有itext7的表

Java setTableEvent setter不再适用于带有itext7的表,java,itext7,Java,Itext7,我正在使用itext7。 我有一个带有标题和几个普通行的表。我还放置了pageNumber>1的页眉。因此,当在下一页拆分表时,我有一个与页眉重叠的页眉 我的目标是将拆分表标题放在页面标题的正下方,这样就不会有更多的重叠 为此,我想放置一个table事件,并在拆分发生时尝试修改table margin top 对于itext5,可以使用PdfPTableEventForwarder为PdfPTable设置setter setTableEvent来创建事件 如何使用itext7实现这一目标 我的代

我正在使用itext7。 我有一个带有标题和几个普通行的表。我还放置了pageNumber>1的页眉。因此,当在下一页拆分表时,我有一个与页眉重叠的页眉

我的目标是将拆分表标题放在页面标题的正下方,这样就不会有更多的重叠

为此,我想放置一个table事件,并在拆分发生时尝试修改table margin top

对于itext5,可以使用PdfPTableEventForwarder为PdfPTable设置setter setTableEvent来创建事件

如何使用itext7实现这一目标

我的代码如下:

我为END_PAGE事件添加了以下处理程序

PdfDocument pdf = new PdfDocument(writer);

pdf.addEventHandler(PdfDocumentEvent.END_PAGE, new MyHeaderEventHandler());
MyHeaderEventHandler类的代码片段:

公共无效handleEvent(事件){

//这里有一些代码

if(pageNumber > 1)
{

  Table pageHeaderTable = new Table(new float[]{1.5f, 1.3f, 1.5f, 2.3f, 2.3f, 2.3f, 2f, 2.6f});

 pageHeaderTable.setMarginTop(12).setWidth(523).setMarginLeft(36);

 pageHeaderTable.setFixedLayout();

//some code to fill pageHeaderTable cells(1 row with 8 cells) with string values

 canvas.add(pageHeaderTable);

}

 canvas.close();
 pdfCanvas.release();

}
//my invoiceElementTable的代码片段

Table invoiceElementTable = new Table(new float[]{1.5f, 1.3f, 1.5f, 2.3f, 2.3f, 2.3f, 2f, 2.6f});
invoiceElementTable.setFixedLayout();
                                invoiceElementTable.setWidth(UnitValue.createPercentValue(100));
invoiceElementTable.addHeaderCell(new Cell(1,8).add(new Paragraph("invoiceElementTable Header")));

I have a list of objects to fill the cells:

eltList.stream().forEach(elt-> {
invoiceElementTable.addCell(new Cell().add(new Paragraph(elt.getItem0)));
invoiceElementTable.addCell(new Cell().add(new Paragraph(elt.getItem1)));
invoiceElementTable.addCell(new Cell().add(new Paragraph(elt.getItem2)));
invoiceElementTable.addCell(new Cell().add(new Paragraph(elt.getItem3)));
invoiceElementTable.addCell(new Cell().add(new Paragraph(elt.getItem4)));
invoiceElementTable.addCell(new Cell().add(new Paragraph(elt.getItem5)));
invoiceElementTable.addCell(new Cell().add(new Paragraph(elt.getItem6)));
invoiceElementTable.addCell(new Cell().add(new Paragraph(elt.getItem7)));
});
问题是,当invoiceElementTable拆分到下一页时,其标题行(“invoiceElementTable标题”)与pageHeaderTable的唯一行重叠


我想在拆分到下一页时修改invoiceElementTable的位置,以避免重叠

实现您自己的表格渲染器,并为表格的拆分部分指定布局区域

在下面的示例中,布局矩形减少了100(您需要根据页眉的高度更改此值):

要将其集成到代码中,只需在表上设置此渲染器的实例:

table.setNextRenderer(new CustomTableRenderer(table));

您好,请告诉我们您尝试了什么,以及重现问题的代码以及期望的结果。目前描述非常模糊。我已经用一些代码片段更新了我的帖子。我希望现在可以清楚地看到“我有与页眉重叠的表头。”-这通常是由于页面标题位置错误造成的。在我看来,您应该尝试通过正确定位页面标题而不是通过操纵页面内容位来解决此问题。
table.setNextRenderer(new CustomTableRenderer(table));