繁体   English   中英

在 itext7 中,如何通过 ColumnRenderer 绘制边框?

[英]In itext7, How can i draw border by ColumnRenderer?

我不知道如何,如果我想画这样的线。

在此处输入图像描述

哪位大神帮帮我~~

我自己解决了这个问题。

这是我关于列文档渲染器的代码。

在itext7中,各种栏目文件或切换栏目文件

在此代码的 updateCurrentArea 方法中,获取 currentPage 并将 canvas 添加到其中。

并且只是画线。

这是我的代码。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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