[英]In itext7, How can i draw border by ColumnRenderer?
我自己解決了這個問題。
這是我關於列文檔渲染器的代碼。
在此代碼的 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.