Как создать динамический заголовок столбца и динамические данные для экспорта в Excel / CSV / PDF с использованием MongoDB, Spring Boot и apache poi - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу сделать функцию экспорта с помощью Spring Boot, у меня есть данные на MongoDB NoSQL, а затем я хочу экспортировать мой документ на MongoDB динамически с помощью Apache POI (Если есть какая-либо лучшая зависимость, которую вы можете мне порекомендовать).

Я не хочу объявлять столбец заголовка, модель объекта и т. Д. Я хочу экспортировать данные динамически, как показано в моей базе данных документов, кто-нибудь может дать мне пример для этого?

1 Ответ

0 голосов
/ 13 августа 2019

Пожалуйста, попробуйте этот код, чтобы помочь вам.

-> добавить Gson Depandencies в porm.xml

Код контроллера

MasterController.java

@Autowired
MasterServiceImpl masterServiceImpl;

@GetMapping(value="/dynamicfile/{flag}/{fileType}/{fileName}")
public ResponseEntity<InputStreamResource> downloadsFiles(@PathVariable("flag") int flag,@PathVariable("fileType") String fileType,@PathVariable("fileName") String fileName) throws IOException{
    List<?> objects=new ArrayList<>();
    if(flag==1) {
        objects=masterServiceImpl.getData();
    }
    ByteArrayInputStream in = masterServiceImpl.downloadsFiles(objects,fileType);
    HttpHeaders headers = new HttpHeaders();
    if(fileType.equals("Excel")) {
        headers.add("Content-Disposition", "attachment; filename="+fileName+".xlsx");
    }else if(fileType.equals("Pdf")){
        headers.add("Content-Disposition", "attachment; filename="+fileName+".pdf");
    }else if(fileType.equals("Csv")) {
        headers.add("Content-Disposition", "attachment; filename="+fileName+".csv");
    }
    return ResponseEntity.ok().headers(headers).body(new InputStreamResource(in));
}

Сервисный код:

MasterServiceImpl.java

public static List<HashMap<Object, Object>> getListOfObjectToListOfHashMap(List<?> objects) {
        List<HashMap<Object,Object>> list=new ArrayList<>();
        for(int i=0;i<objects.size();i++) {
             HashMap<Object,Object> map=new HashMap<>();  
             String temp=new Gson().toJson(objects.get(i)).toString();
             String temo1= temp.substring(1, temp.length()-1);
             String[] temp2=temo1.split(",");
                for(int j=-1;j<temp2.length;j++) {
                    if(j==-1) {
                        map.put("SrNo",i+1);
                    }else {
                        String tempKey=temp2[j].toString().split(":")[0].toString();
                        String tempValue=temp2[j].toString().split(":")[1].toString();                      
                        char ch=tempValue.charAt(0);
                        if(ch=='"') {
                            map.put(tempKey.substring(1, tempKey.length()-1), tempValue.substring(1, tempValue.length()-1));
                        }else {
                            map.put(tempKey.substring(1, tempKey.length()-1), tempValue);
                        }
                    }
                }
                list.add(map);
        }
        return list;
    }

public static ByteArrayInputStream downloadsFiles(List<?> objects,String fileType) throws IOException {
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    List<HashMap<Object, Object>> list = getListOfObjectToListOfHashMap(objects);
    String[] COLUMNs = getColumnsNameFromListOfObject(objects);
    try{
        if(fileType.equals("Excel")) {
            generateExcel(list, COLUMNs,out);
        }else if(fileType.equals("Pdf")) {
            generatePdf(list, COLUMNs,out);
        }else if(fileType.equals("Csv")) {
            generatePdf(list, COLUMNs,out);
        }
      }catch(Exception ex) {
          System.out.println("Error occurred:"+ ex);
      }
    return new ByteArrayInputStream(out.toByteArray());
}

public static final String[] getColumnsNameFromListOfObject(List<?> objects) {
    String strObjects=new Gson().toJson(objects.get(0)).toString();
    String[] setHeader= strObjects.substring(1, strObjects.length()-1).split(",");
    String header="SrNo";
    for(int i=0;i<setHeader.length;i++) {
        String str=setHeader[i].toString().split(":")[0].toString();
        header=header+","+str.substring(1, str.length()-1);
    }
    return header.split(",");
}

public static final void generateExcel(List<HashMap<Object, Object>> list, String[] COLUMNs,ByteArrayOutputStream out) throws IOException {
    Workbook workbook = new XSSFWorkbook();
    Sheet sheet = workbook.createSheet("Excelshit");
    Font headerFont = workbook.createFont();
    headerFont.setBold(true);
    headerFont.setColor(IndexedColors.BLUE.getIndex());
    CellStyle headerCellStyle = workbook.createCellStyle();
    headerCellStyle.setFont(headerFont);
    Row headerRow = sheet.createRow(0);
    for (int col = 0; col < COLUMNs.length; col++) {
        Cell cell = headerRow.createCell(col);
        cell.setCellValue(COLUMNs[col]);
        cell.setCellStyle(headerCellStyle);
    }
    int rowIdx = 1;
    for(int k = 0; k < list.size(); k++){
        Row row =sheet.createRow(rowIdx++); 
           for (Map.Entry<Object, Object> entry : list.get(k).entrySet()){
            Object key = entry.getKey();
            Object value = entry.getValue();
            for (int col = 0; col < COLUMNs.length; col++) {
                if(key.toString().equals(COLUMNs[col].toString())) {
                    row.createCell(col).setCellValue(value.toString());  
                }
            }               
         }  
    }
    workbook.write(out);
    System.out.println(workbook);
}

private static final void generatePdf(List<HashMap<Object, Object>> list, String[] COLUMNs,ByteArrayOutputStream out) throws DocumentException {
    Document document = new Document();
    com.itextpdf.text.Font headerFont =FontFactory.getFont(FontFactory.HELVETICA_BOLD,8);
    com.itextpdf.text.Font dataFont =FontFactory.getFont(FontFactory.TIMES_ROMAN,8);
    PdfPCell hcell=null;
    PdfPTable table = new PdfPTable(COLUMNs.length);
    for (int col = 0; col < COLUMNs.length; col++) {
        hcell = new PdfPCell(new Phrase(COLUMNs[col], headerFont));
        hcell.setHorizontalAlignment(Element.ALIGN_CENTER);   
        table.addCell(hcell);
    }
    for(int index = 0; index < list.size(); index++){
        PdfPCell cell = null;
        for (Map.Entry<Object, Object> entry : list.get(index).entrySet()){
            Object key = entry.getKey();
            Object value = entry.getValue();
            for (int col = 0; col < COLUMNs.length; col++) {
                if(key.toString().equals(COLUMNs[col].toString())) {
                    cell = new PdfPCell(new Phrase(value.toString(),dataFont));
                    cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
                    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                }
            }   
            table.addCell(cell);
        }     
    }
    PdfWriter.getInstance(document, out);
    document.open();
    document.add(table);
    document.close();
}

public List<TblDepartment> getData() {
    List<TblDepartment> list = new ArrayList<>();
    departmentRepository.findAll().forEach(list::add);
    return list;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...