From 56722244b3517615145ca74586d215627fed6a88 Mon Sep 17 00:00:00 2001 From: lijiarao Date: Wed, 8 Nov 2023 16:57:18 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=96=87=E6=A1=A3=E6=8B=86=E5=88=86?= =?UTF-8?q?=E8=A1=A8=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../split/service/impl/FileSpiltService.java | 68 ++++--------- .../modules/split/util/ReadWordTable.java | 97 +++++++++++++++---- 2 files changed, 96 insertions(+), 69 deletions(-) diff --git a/laws-modules/src/main/java/com/jero/modules/split/service/impl/FileSpiltService.java b/laws-modules/src/main/java/com/jero/modules/split/service/impl/FileSpiltService.java index 2155a949..e11da775 100644 --- a/laws-modules/src/main/java/com/jero/modules/split/service/impl/FileSpiltService.java +++ b/laws-modules/src/main/java/com/jero/modules/split/service/impl/FileSpiltService.java @@ -37,6 +37,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.*; @@ -120,29 +121,22 @@ public class FileSpiltService { // nowStart.add(String.valueOf(sarFileSplitInfoEO.getStartNumber())); // } //获取文件地址 - String connectId = sarFileSplitInfoEO.getConnectId(); - String fileId = sarFileSplitInfoEO.getFileId(); -// if (StringUtils.isEmpty(connectId) || StringUtils.isEmpty(fileName)) { -// throw new JeroBootException("当前文件未找到,请重新选择!"); -// } - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); -// queryWrapper.eq(OSSFile::getConnectId, connectId); - queryWrapper.eq(OSSFile::getId, fileId); - queryWrapper.orderByDesc(OSSFile::getCreateTime); - List ossFileList = iossFileService.list(queryWrapper); - if (CollectionUtils.isEmpty(ossFileList)) { - throw new JeroBootException("当前文件未找到,请重新选择!"); - } - OSSFile ossFile = ossFileList.get(0); - - String readFilePath = ossFile.getUrl(); - if (StringUtils.isEmpty(readFilePath) || !MinioUtil.doesObjectExist(readFilePath)) { - throw new JeroBootException("当前文件未找到,请重新选择!"); - } - - try (InputStream is = MinioUtil.download(readFilePath);InputStream is1 = MinioUtil.download(readFilePath)) { -// readFilePath = "E:\\Data\\Downloads\\wordtest\\GB7258标准修订test - 表格测试 - 副本.docx"; -// try (InputStream is = new FileInputStream(readFilePath);InputStream is1 = new FileInputStream(readFilePath)) {//需要将文件路更改为word文档所在路径。 + //String fileId = sarFileSplitInfoEO.getFileId(); + //LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + //queryWrapper.eq(OSSFile::getId, fileId); + //queryWrapper.orderByDesc(OSSFile::getCreateTime); + //List ossFileList = iossFileService.list(queryWrapper); + //if (CollectionUtils.isEmpty(ossFileList)) { + // throw new JeroBootException("当前文件未找到,请重新选择!"); + //} + //OSSFile ossFile = ossFileList.get(0); + //String readFilePath = ossFile.getUrl(); + //if (StringUtils.isEmpty(readFilePath) || !MinioUtil.doesObjectExist(readFilePath)) { + // throw new JeroBootException("当前文件未找到,请重新选择!"); + //} + //try (InputStream is = MinioUtil.download(readFilePath);InputStream is1 = MinioUtil.download(readFilePath)) { + String readFilePath = "E:\\Data\\Downloads\\wordtest\\GB7258标准修订test - 表格测试 - 副本.docx"; + try (InputStream is = new FileInputStream(readFilePath); InputStream is1 = new FileInputStream(readFilePath)) {//需要将文件路更改为word文档所在路径。 ZipSecureFile.setMinInflateRatio(-1.0d); XWPFDocument doc = new XWPFDocument(is); @@ -882,34 +876,6 @@ public class FileSpiltService { ReadWordTable readWordTable = new ReadWordTable(); String tableStr = readWordTable.readTable(table); tabaleStringNew.append(tableStr); - /*List rows = table.getRows(); - List tableList = new ArrayList<>(); - int rowNum = 1; - for (XWPFTableRow row : rows) { - List cells = row.getTableCells(); - int colNum = 1; - for (XWPFTableCell cell : cells) { - CTTcPr tcpr = cell.getCTTc().getTcPr(); - CTVMerge vMerge = tcpr.getVMerge(); - CTDecimalNumber gridSpan = tcpr.getGridSpan(); - if (gridSpan != null) { - String aa = gridSpan.getVal().toString(); - } - // 简单获取内容(简单方式是不能获取字体对齐方式的) - SarFileSplitItemsTableEO sarFileSplitItemsTableEO = new SarFileSplitItemsTableEO(); - sarFileSplitItemsTableEO.setRowNum(rowNum); - sarFileSplitItemsTableEO.setColNum(colNum); - sarFileSplitItemsTableEO.setContent(cell.getText()); - tableList.add(sarFileSplitItemsTableEO); - // 一个单元格可以理解为一个word文档,单元格里也可以加段落与表格 - *//* List paragraphs = cell.getParagraphs(); - for (XWPFParagraph paragraph : paragraphs) { - getParagraphText(paragraph); - }*//* - colNum++; - } - rowNum++; - }*/ message.getItemsCondi().add(table.getText()); message.setItemContent(message.getItemContent() + tabaleStringNew); itemsValList.add(getSplitItemsValObject(message.getId(), SplitFilePragraTypeEnum.TABLE.getValue(), tabaleStringNew.toString(), message.getItemsCondi().size(), null)); diff --git a/laws-modules/src/main/java/com/jero/modules/split/util/ReadWordTable.java b/laws-modules/src/main/java/com/jero/modules/split/util/ReadWordTable.java index 7fbd68d0..e08d0f1b 100644 --- a/laws-modules/src/main/java/com/jero/modules/split/util/ReadWordTable.java +++ b/laws-modules/src/main/java/com/jero/modules/split/util/ReadWordTable.java @@ -1,10 +1,7 @@ package com.jero.modules.split.util; -import org.apache.poi.xwpf.usermodel.XWPFTable; -import org.apache.poi.xwpf.usermodel.XWPFTableCell; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDecimalNumber; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr; +import org.apache.poi.xwpf.usermodel.*; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; import java.io.IOException; import java.math.BigInteger; @@ -64,8 +61,13 @@ public class ReadWordTable { public int getRowspan(XWPFTable table, int row, int col) { XWPFTableCell cell = table.getRow(row).getCell(col); - // 正常独立单元格 - if (!isContinueRow(cell) && !isRestartRow(cell)) { + + //合并单元格的中间cell + boolean continueRow = isContinueRow(cell); + //合并单元格的开始cell + boolean restartRow = isRestartRow(cell); + // 上面两种都不是就是正常独立单元格 + if (!continueRow && !restartRow) { return 1; } // 当前单元格的宽度 @@ -138,7 +140,7 @@ public class ReadWordTable { if (tcPr.getVMerge() == null) { return false; } - if (tcPr.getVMerge().getVal() == null) { + if (tcPr.getVMerge().getVal().toString().equalsIgnoreCase("continue")) { return true; } return false; @@ -181,33 +183,92 @@ public class ReadWordTable { public String readTable(XWPFTable table) throws IOException { // 表格行数 int tableRowsSize = table.getRows().size(); - StringBuilder tableToHtmlStr = new StringBuilder(""); + StringBuilder tableToHtmlStr = new StringBuilder("
"); for (int i = 0; i < tableRowsSize; i++) { - tableToHtmlStr.append(""); + //最后一行的都增加下边框 + if (i == tableRowsSize-1){ + tableToHtmlStr.append(""); + }else { + tableToHtmlStr.append(""); + } + int tableCellsSize = table.getRow(i).getTableCells().size(); for (int j = 0; j < tableCellsSize; j++) { if (isOmitCell(i, j)) { continue; } XWPFTableCell tableCell = table.getRow(i).getCell(j); + // 获取单元格的属性 - CTTcPr tcPr = tableCell.getCTTc().getTcPr(); - int colspan = getColspan(tcPr); + CTTcPr cellProperties = tableCell.getCTTc().getTcPr(); + + int colspan = getColspan(cellProperties); if (colspan > 1) { // 合并的列 - tableToHtmlStr.append(""); + StringBuilder stringBuilder = new StringBuilder(); + List paragraphs = tableCell.getParagraphs(); + for (XWPFParagraph paragraph : paragraphs) { + for (XWPFRun xwrun : paragraph.getRuns()) { + VerticalAlign subscript = xwrun.getSubscript(); + String smalltext = xwrun.getText(0); + if (smalltext==null){ + continue; + } + switch (subscript) { + case BASELINE: + stringBuilder.append(smalltext); + break; + case SUBSCRIPT: + stringBuilder.append("").append(smalltext).append(""); + break; + case SUPERSCRIPT: + stringBuilder.append("").append(smalltext).append(""); + break; + default: + stringBuilder.append(smalltext); + } + } + stringBuilder.append("
"); + } + tableToHtmlStr.append(stringBuilder).append(""); } tableToHtmlStr.append("
");
1) { // 合并的行 - tableToHtmlStr.append(" rowspan='" + rowspan + "'>"); + // 合并的行 + if (rowspan > 1) { + tableToHtmlStr.append(" rowspan=\"" + rowspan + "\">"); } else { tableToHtmlStr.append(">"); } - String text = tableCell.getText(); - tableToHtmlStr.append(text + "