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