亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

setTableEvent 設置器不再可用于帶有 itext7 的表

setTableEvent 設置器不再可用于帶有 itext7 的表

叮當貓咪 2022-11-02 10:39:50
我正在使用itext7。我有一個帶有標題和幾個正常行的表。我還從 pageNumber > 1 放置了一個頁眉。因此,當在下一頁拆分表格時,我的表格標題與頁眉重疊。我的目標是將拆分表標題放在頁面標題下方,這樣就不會再有重疊了。為此,我想放置一個表格事件并嘗試在拆分發生時修改表格邊距頂部。使用 itext5,可以使用 PdfPTableEventForwarder 為 PdfPTable 設置設置器 setTableEvent 來創建事件。我怎樣才能用 itext7 達到這個目標?我的代碼是這樣的:我為 END_PAGE 事件添加了以下處理程序PdfDocument pdf = new PdfDocument(writer);pdf.addEventHandler(PdfDocumentEvent.END_PAGE, new MyHeaderEventHandler());MyHeaderEventHandler 類的片段代碼:公共無效句柄事件(事件事件){//這里有一些代碼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();}//我的 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 Header”)與 pageHeaderTable 的唯一行重疊。我想在invoiceElementTable拆分到下一頁時修改它的位置以避免重疊
查看完整描述

1 回答

?
慕少森

TA貢獻2019條經驗 獲得超9個贊

實現您自己的表格渲染器并為表格的拆分部分指定布局區域。


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


    class CustomTableRenderer extends TableRenderer {

    public CustomTableRenderer(Table modelElement) {

        super(modelElement);

    }


    @Override

    public IRenderer getNextRenderer() {

        return new CustomTableRenderer((Table)modelElement);

    }


    @Override

    public LayoutResult layout(LayoutContext layoutContext) {

        if (!isOriginalNonSplitRenderer) {

            LayoutArea area = layoutContext.getArea();

            area.setBBox(area.getBBox().decreaseHeight(100));

        }

        return super.layout(layoutContext);

    }

}

要將其集成到您的代碼中,只需在您的表上設置此渲染器的實例:


table.setNextRenderer(new CustomTableRenderer(table));


查看完整回答
反對 回復 2022-11-02
  • 1 回答
  • 0 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號