easypoi导出Word中,表格分页时上边框丢失

问题具体描述: 使用easypoi导出的Word中包含一个表格,表格行数较多,需要分页显示,在分页后第一行的上边框部分丢失,显示不美观,具体如下:

解决:

对表格中每行都添加一个上边框,具体如下:

java 复制代码
        XWPFDocument document = WordExportUtil.exportWord07(templateFile.getAbsolutePath(),map);
		//以下为添加单元格上线框操作,应该可以再优化,因为此处是对每个单元格添加
        List<XWPFTable> tables = document.getTables();
        for (XWPFTable table : tables) {
            int numberOfRows = table.getNumberOfRows();
            for (int i = 0; i < numberOfRows; i++) {
                XWPFTableRow row = table.getRow(i);
                List<XWPFTableCell> tableCells = row.getTableCells();
                CTTcPr tcPr ;
                CTTcBorders ctTcBorders;
                CTBorder ctBorder;
                for (XWPFTableCell tableCell : tableCells) {
                    tcPr = tableCell.getCTTc().getTcPr();
                    if(tcPr==null)tcPr=tableCell.getCTTc().addNewTcPr();
                    ctTcBorders = tcPr.addNewTcBorders();
                    ctBorder = ctTcBorders.addNewTop();
                    ctBorder.setVal(STBorder.SINGLE);
                }
            }
        }

知识点:

  1. 创建表格时,为每个单元格设置上边框。这样可以确保每个单元格都有上边框线。
java 复制代码
XWPFTable table = document.createTable(rows, cols);
for (int row = 0; row < rows; row++) {       
	for (int col = 0; col < cols; col++) {        
		XWPFTableCell cell = table.getRow(row).getCell(col);        
		CTTcPr cellProperties = cell.getCTTc().getTcPr();        
		if (cellProperties == null) {            
			cellProperties =cell.getCTTc().addNewTcPr(); 
		}        
		CTTcBorders borders = cellProperties.addNewTcBorders();        
		CTBorder topBorder = borders.addNewTop();   
		topBorder.setVal(STBorder.SINGLE);    
	}
}

上述代码使用XWPFTable创建表格,并为每个单元格设置上边框线。

  1. 当表格分页时,检查当前页的最后一行是否位于表格的最后一行。如果是,则在表格的下方添加一个空行,并为该行的每个单元格设置上边框
java 复制代码
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.addBreak(BreakType.PAGE);
if (isLastRowInTable(pageLastRow, table)) {    
	XWPFTableRow emptyRow = table.createRow();    
	for (int col = 0; col < cols; col++) {        
		XWPFTableCell cell = emptyRow.getCell(col);        
		CTTcPr cellProperties = cell.getCTTc().getTcPr();        
		if (cellProperties == null) {            
			cellProperties = cell.getCTTc().addNewTcPr();        
		}        
		CTTcBorders borders = cellProperties.addNewTcBorders();        
		CTBorder topBorder = borders.addNewTop();        
		topBorder.setVal(STBorder.SINGLE);    
	}
}

上述代码使用XWPFParagraphXWPFRun创建一个新段落,并在段落中添加分页符(addBreak(BreakType.PAGE))。然后,检查当前页的最后一行是否是表格的最后一行,如果是,则在表格下方添加一个空行,并为该行的每个单元格设置上边框线。通过这两个步骤,您可以确保在分页时不丢失上边框。请根据您的具体需求和代码结构进行相应的调整和集成。

相关推荐
正在走向自律13 分钟前
RSA加密从原理到实践:Java后端与Vue前端全栈案例解析
java·前端·vue.js·密钥管理·rsa加密·密钥对·aes+rsa
咯哦哦哦哦31 分钟前
关于QT 打印中文 乱码问题
java·数据库·qt
爱读源码的大都督39 分钟前
天下苦@NonNull久矣,JSpecify总算来了,Spring 7率先支持!
java·后端·架构
木头没有瓜1 小时前
Slf4j 接口文档左侧菜单有显示,但是点击后空白
java
野犬寒鸦1 小时前
从零起步学习Redis || 第十二章:Redis Cluster集群如何解决Redis单机模式的性能瓶颈及高可用分布式部署方案详解
java·数据库·redis·后端·缓存
cxyxiaokui0011 小时前
还在用 @Autowired 字段注入?你可能正在写出“脆弱”的 Java 代码
java·后端·spring
珹洺1 小时前
Java-Spring入门指南(二十二)SSM整合前置基础
java·开发语言·spring
天天摸鱼的java工程师1 小时前
Java IO 流 + MinIO:游戏玩家自定义头像上传(格式校验、压缩处理、存储管理)
java·后端
程序员小富2 小时前
改了 Nacos 一行配置,搞崩线上支付系统!
java·后端
ʚ希希ɞ ྀ2 小时前
用队列实现栈---超全详细解
java·开发语言·数据结构