简体   繁体   中英

In itext7, How can i draw border by ColumnRenderer?

I don't know how, if I wanna draw line like this.

在此处输入图像描述

Somebody help me plz~~

I solved this problem by myself.

This is my code about columns document renderer.

In itext7, Various columns document or switched column document

In updateCurrentArea method of this code, get currentPage and Add canvas to that.

And just draw the line.

this is my code.

@Override
protected LayoutArea updateCurrentArea(LayoutResult overflowResult) {
    if (overflowResult != null
        && overflowResult.getAreaBreak() != null
        && overflowResult.getAreaBreak().getType()
        != AreaBreakType.NEXT_AREA) {
        nextAreaNumber = 0;
        nextHeadAreaNumber = 0;
        nextBodyAreaNumber = 0;
    }
    if (isBody) {
        if (
            (nextBodyAreaNumber > 0 && nextBodyAreaNumber % columns.length == 0)
        ) {
            super.updateCurrentArea(overflowResult);
        }
        if (nextBodyAreaNumber == 0 && null != currentArea && !currentArea.isEmptyArea()) {
            lastHeaderEmptyHeight = currentArea.getBBox().getHeight();
        }
        currentAreaNumber = nextAreaNumber + 1;
        nextAreaNumber++;
        currentBodyAreaNumber = nextBodyAreaNumber + 1;
        Rectangle newArea = columns[nextBodyAreaNumber++ % columns.length].clone();
        if (currentBodyAreaNumber < 3 && lastHeaderEmptyHeight > 30) {
            newArea.setHeight(lastHeaderEmptyHeight - LAYOUT_CONFIG.COLUMN_PADDING * 2);
        }
        PdfPage currentPage = document.getPdfDocument().getPage(currentPageNumber);
        if (currentBodyAreaNumber == 1) {
            PdfCanvas horizontalLineCanvas = new PdfCanvas(currentPage);
            float horizontalLineStartX = newArea.getX();
            float horizontalLineStartY = newArea.getY() + newArea.getHeight() + LAYOUT_CONFIG.COLUMN_PADDING;
            float horizontalLineEndX = newArea.getX() + LAYOUT_CONFIG.HEADER_COLUMN_WIDTH;
            float horizontalLineEndY = horizontalLineStartY;
            horizontalLineCanvas.setLineWidth(0.5F).setStrokeColor(ColorConstants.BLACK)
                    .moveTo(horizontalLineStartX, horizontalLineStartY)
                    .lineTo(horizontalLineEndX, horizontalLineEndY).stroke();
        }
        if (currentBodyAreaNumber % columns.length == 0) {
            PdfCanvas verticalLineCanvas = new PdfCanvas(currentPage);
            float verticalLineStartX = newArea.getX() - LAYOUT_CONFIG.COLUMN_PADDING;
            float verticalLineStartY = newArea.getY() + LAYOUT_CONFIG.COLUMN_PADDING;
            float verticalLineEndX = verticalLineStartX;
            float verticalLineEndY = verticalLineStartY + newArea.getHeight() - LAYOUT_CONFIG.COLUMN_PADDING * (currentBodyAreaNumber == 2 ? 1 : 2);
            verticalLineCanvas.setLineWidth(0.5F).setStrokeColor(ColorConstants.BLACK)
                    .moveTo(verticalLineStartX, verticalLineStartY)
                    .lineTo(verticalLineEndX, verticalLineEndY).stroke();
        }
        return (currentArea = new RootLayoutArea(currentPageNumber, newArea));
    } else {
        super.updateCurrentArea(overflowResult);
        currentAreaNumber = nextAreaNumber + 1;
        nextAreaNumber++;
        currentHeadAreaNumber = nextHeadAreaNumber + 1;
        nextHeadAreaNumber++;
        return (currentArea = new RootLayoutArea(currentPageNumber, headerColumn.clone()));
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM