diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportexcel/controller/dto/CellStyleDto.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportexcel/controller/dto/CellStyleDto.java new file mode 100644 index 00000000..07cf70b2 --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportexcel/controller/dto/CellStyleDto.java @@ -0,0 +1,20 @@ +package com.anjiplus.template.gaea.business.modules.reportexcel.controller.dto; + +import lombok.Data; + +/** + * @author chenxg + * @date 2023/8/1 10:37 + */ +@Data +public class CellStyleDto { + /** + * 格式名称 + */ + private String fa; + + /** + * 格式类型 + */ + private String t; +} \ No newline at end of file diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportexcel/controller/dto/CommentDto.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportexcel/controller/dto/CommentDto.java new file mode 100644 index 00000000..acc26525 --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportexcel/controller/dto/CommentDto.java @@ -0,0 +1,42 @@ +package com.anjiplus.template.gaea.business.modules.reportexcel.controller.dto; + + +import lombok.Data; + +/** + * @author chenxg + * @date 2023/8/1 10:37 + */ +@Data +public class CommentDto { + /** + * 批注框左边距 + */ + private int left; + + /** + * 批注框上边距 + */ + private int top; + + /** + * 批注框宽度 + */ + private int width; + + /** + * 批注框高度 + */ + private int height; + + /** + * 批注内容 + */ + private String value; + + /** + * 批注框是否显示 + */ + private boolean isshow; +} + diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportexcel/controller/dto/ReportExcelDto.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportexcel/controller/dto/ReportExcelDto.java index df92b09f..739563f0 100644 --- a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportexcel/controller/dto/ReportExcelDto.java +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportexcel/controller/dto/ReportExcelDto.java @@ -5,6 +5,7 @@ import com.anji.plus.gaea.curd.dto.GaeaBaseDTO; import lombok.Data; import java.io.Serializable; +import java.util.List; /** @@ -58,4 +59,9 @@ public class ReportExcelDto extends GaeaBaseDTO implements Serializable { */ private String exportType; + /** + * 报表总体数据 + */ + private String rowDatas; + } diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportexcel/controller/dto/ReportExcelStyleDto.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportexcel/controller/dto/ReportExcelStyleDto.java new file mode 100644 index 00000000..dc8d41f9 --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportexcel/controller/dto/ReportExcelStyleDto.java @@ -0,0 +1,97 @@ + +package com.anjiplus.template.gaea.business.modules.reportexcel.controller.dto; + +import com.anji.plus.gaea.curd.dto.GaeaBaseDTO; +import lombok.Data; + +import java.io.Serializable; + + +/** + * @author chenxg + * @date 2023/8/1 10:37 + */ +@Data +public class ReportExcelStyleDto extends GaeaBaseDTO implements Serializable { + /** + * 单元格值格式 + */ + private CellStyleDto ct; + + /** + * 内容的原始值 + */ + private String v; + + /** + * 内容的显示值 + */ + private String m; + + /** + * 背景颜色 + */ + private String bg; + + /** + * 字体编号 + */ + private String ff; + + /** + * 字体颜色 + */ + private String fc; + + /** + * 是否加粗 + */ + private boolean bl; + + /** + * 是否斜体 + */ + private boolean it; + + /** + * 字体大小 + */ + private int fs; + + /** + * 是否删除线 + */ + private boolean cl; + + /** + * 水平对齐方式 + */ + private int ht; + + /** + * 垂直对齐方式 + */ + private int vt; + + /** + * 文字旋转角度 + */ + private int tr; + + /** + * 是否自动换行 + */ + private int tb; + + /** + * 批注信息 + */ + private CommentDto ps; + + /** + * 单元格公式 + */ + private String f; + + +} \ No newline at end of file diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportexcel/service/impl/ReportExcelServiceImpl.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportexcel/service/impl/ReportExcelServiceImpl.java index 470cb14e..4069daf2 100644 --- a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportexcel/service/impl/ReportExcelServiceImpl.java +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportexcel/service/impl/ReportExcelServiceImpl.java @@ -19,6 +19,7 @@ import com.anjiplus.template.gaea.business.modules.file.service.GaeaFileService; import com.anjiplus.template.gaea.business.modules.report.dao.ReportMapper; import com.anjiplus.template.gaea.business.modules.report.dao.entity.Report; import com.anjiplus.template.gaea.business.modules.reportexcel.controller.dto.ReportExcelDto; +import com.anjiplus.template.gaea.business.modules.reportexcel.controller.dto.ReportExcelStyleDto; import com.anjiplus.template.gaea.business.modules.reportexcel.dao.ReportExcelMapper; import com.anjiplus.template.gaea.business.modules.reportexcel.dao.entity.ReportExcel; import com.anjiplus.template.gaea.business.modules.reportexcel.service.ReportExcelService; @@ -26,17 +27,16 @@ import com.anjiplus.template.gaea.business.modules.reportexcel.util.CellType; import com.anjiplus.template.gaea.business.modules.reportexcel.util.XlsUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.itextpdf.text.*; +import com.itextpdf.text.Font; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.tool.xml.XMLWorkerHelper; import com.lowagie.text.DocumentException; +import io.swagger.models.auth.In; import org.apache.commons.lang3.StringUtils; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,6 +52,7 @@ import java.nio.file.Paths; import java.util.*; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * TODO @@ -146,17 +147,26 @@ public class ReportExcelServiceImpl implements ReportExcelService { @Override public Boolean exportExcel(ReportExcelDto reportExcelDto) { - String reportCode = reportExcelDto.getReportCode(); - String exportType = reportExcelDto.getExportType(); logger.error("导出..."); - exportExcelCore(reportCode,exportType,reportExcelDto); + exportExcelCore(reportExcelDto); return true; } /** * 抽取导出Excel核心逻辑 */ - public void exportExcelCore(String reportCode,String exportType,ReportExcelDto reportExcelDto) + public void exportExcelCore(ReportExcelDto reportExcelDto) { + String reportCode = reportExcelDto.getReportCode(); + String exportType = reportExcelDto.getExportType(); + List> reportExcelStyleList = new ArrayList<>(); + JSONObject rowData= JSON.parseObject(reportExcelDto.getRowDatas()); + // 将JSONObject对象转换为列表 + List dataNumList = rowData.keySet().stream().map(Integer::parseInt).sorted().collect(Collectors.toList()); + for (Integer i : dataNumList) { + JSONArray jsonArray = rowData.getJSONArray(i.toString()); + List reportExcelStyleDtos = jsonArray.toJavaList(ReportExcelStyleDto.class); + reportExcelStyleList.add(reportExcelStyleDtos); + } ReportExcelDto report = detailByReportCode(reportCode); reportExcelDto.setJsonStr(report.getJsonStr()); String jsonStr = analysisReportData(reportExcelDto); @@ -182,7 +192,7 @@ public class ReportExcelServiceImpl implements ReportExcelService { // 将Excel文件转换为PDF String pdfFileName = fileName + ".pdf"; String pdfFilePath = dir.getAbsolutePath() + File.separator + pdfFileName; - pdfFile = convertExcelToPdf(filePath, pdfFilePath); + pdfFile = convertExcelToPdf(filePath, pdfFilePath,reportExcelStyleList); gaeaFileService.upload(pdfFile); } @@ -203,7 +213,7 @@ public class ReportExcelServiceImpl implements ReportExcelService { } } // 将Excel文件转换为PDF - public File convertExcelToPdf(String excelFilePath, String pdfFilePath) { + public File convertExcelToPdf(String excelFilePath, String pdfFilePath, List> reportExcelStyleList) { try { // 读取Excel文件 Workbook workbook = new XSSFWorkbook(excelFilePath); @@ -226,8 +236,15 @@ public class ReportExcelServiceImpl implements ReportExcelService { Row headerRow = sheet.getRow(0); for (int i = 0; i < headerRow.getLastCellNum(); i++) { Cell headerCell = headerRow.getCell(i); + + // 获取单元格样式 PdfPCell tableCell = new PdfPCell(); tableCell.setPhrase(new Phrase(getStringValue(headerCell), font)); + ReportExcelStyleDto reportExcelStyleDto = reportExcelStyleList.get(0).get(i); + if(!Objects.isNull(reportExcelStyleDto)) + { + processCellStyle(reportExcelStyleDto,tableCell); + } table.addCell(tableCell); } @@ -245,6 +262,11 @@ public class ReportExcelServiceImpl implements ReportExcelService { } PdfPCell tableCell = new PdfPCell(); tableCell.setPhrase(new Phrase(getStringValue(cell), font)); + ReportExcelStyleDto reportExcelStyleDto = reportExcelStyleList.get(i).get(j); + if(!Objects.isNull(reportExcelStyleDto)) + { + processCellStyle(reportExcelStyleDto,tableCell); + } table.addCell(tableCell); } } @@ -267,6 +289,65 @@ public class ReportExcelServiceImpl implements ReportExcelService { return null; } + /** + * 处理导出pdf文件样式 + * @param tableCell + */ + public void processCellStyle(ReportExcelStyleDto reportExcelStyleDto,PdfPCell tableCell) + { + //处理单元格背景颜色 + String bg = reportExcelStyleDto.getBg(); + java.awt.Color color = null; + if(!Objects.isNull(bg)) + { + color = java.awt.Color.decode(bg); + tableCell.setBackgroundColor(new BaseColor(color.getRed(), color.getGreen(), color.getBlue())); + } + //处理字体 + String fc = reportExcelStyleDto.getFc(); + Integer fs = reportExcelStyleDto.getFs(); + String ff = reportExcelStyleDto.getFf(); + Boolean bl = reportExcelStyleDto.isBl(); + Boolean it = reportExcelStyleDto.isIt(); + Font font = new Font(); + // 设置字体颜色 + if(!Objects.isNull(fc)) + { + color = java.awt.Color.decode(fc); + font.setColor(new BaseColor(color.getRed(), color.getGreen(), color.getBlue())); + } + // 设置字体 + if(!Objects.isNull(ff) && !Objects.equals("0",ff)) + { + font.setFamily(ff.toString()); + } + // 设置字体大小 + if(!Objects.isNull(fs) && !Objects.equals(0,fs)) + { + font.setSize(fs); + } + // 设置字体加粗 + if(Objects.equals(Boolean.TRUE,bl)) + { + font.setStyle(Font.BOLD); + } + // 设置字体斜体 + if(Objects.equals(Boolean.TRUE,it)) + { + font.setStyle(Font.ITALIC); + } + // 设置字体加粗且斜体 + if(Objects.equals(Boolean.TRUE,bl) && Objects.equals(Boolean.TRUE,it)) + { + font.setStyle(Font.BOLDITALIC); + } + Phrase phrase = tableCell.getPhrase(); + tableCell.setPhrase(new Paragraph(phrase.getContent(), font)); + //处理字体 + tableCell.setBorderColor(BaseColor.BLACK); + + } + private String getStringValue(Cell cell) { if (cell == null) return ""; diff --git a/report-ui/src/views/excelreport/viewer/index.vue b/report-ui/src/views/excelreport/viewer/index.vue index c17cb4d8..ac5fa404 100644 --- a/report-ui/src/views/excelreport/viewer/index.vue +++ b/report-ui/src/views/excelreport/viewer/index.vue @@ -118,6 +118,7 @@ export default { if (val != "") { result["exportType"] = val; } + this.getCellStyleData(result); const { code, message } = await exportExcel(result); if (code != 200) return; this.$message.success(message); @@ -192,7 +193,22 @@ export default { $(function() { luckysheet.create(options); }); - } + }, + getCellStyleData(result) { + const sheetData = luckysheet.getluckysheetfile(); // 获取整个表格的数据 + const rowDatas = {}; + + for (let sheetIndex in sheetData) { + const sheet = sheetData[sheetIndex]; + if (sheet && sheet.data) { + for (let rowIndex in sheet.data) { + const row = sheet.data[rowIndex]; + rowDatas[rowIndex]=row; + } + } + } + result["rowDatas"] = JSON.stringify(rowDatas);; + }, } };