ecilpse做网站,wordpress加密页面访问,赤峰网站建设,海底捞oa管理系统需求#xff1a;Java查询多条数据放入word模板 多个word文件处理成zip压缩包并在前端下载.zip文件
解决方法#xff1a;在模板的位置定义参数如 {{name}} {{age}}等等#xff0c;使用 poi 处理
伪代码#xff1a; PostMapping(/exportPracticeAppr)public S… 需求Java查询多条数据放入word模板 多个word文件处理成zip压缩包并在前端下载.zip文件
解决方法在模板的位置定义参数如 {{name}} {{age}}等等使用 poi 处理
伪代码 PostMapping(/exportPracticeAppr)public String exportPracticeAppr(HttpServletResponse response, RequestBody ExportToExcelParamDto paramDto) throws IOException {//查询数据 ExportToWordByPracticeApprDto为模板中的参数ListExportToWordByPracticeApprDto practiceApprExport baseService.practiceApprExport(paramDto);if (practiceApprExport ! null !practiceApprExport.isEmpty()) {// 创建一个zip文件并打开一个ZipOutputStream来写入文件FileOutputStream fos new FileOutputStream(paramDto.getActivityName() demo.zip);ZipOutputStream zos new ZipOutputStream(fos);try {//获取word模板文件InputStream resourceAsStream TrActivityGroupServiceImpl.class.getClassLoader().getResourceAsStream(word/导出模板.docx);XWPFDocument doc new XWPFDocument(Objects.requireNonNull(resourceAsStream));//循环处理文件for (ExportToWordByPracticeApprDto apprDto : practiceApprExport) {MapString, Object replaceMap BeanUtil.beanToMap(apprDto);MapString, Object resultMap new HashMap();replaceMap.forEach((placeholder, replacement) - resultMap.put({{ placeholder }}, replacement));replacePlaceholders(doc, resultMap);// 将Word文档保存为临时文件File tempFile File.createTempFile(demo, DOCX);FileOutputStream tempOut new FileOutputStream(tempFile);doc.write(tempOut);tempOut.close();// 将临时文件添加到zip文件中 表示压缩包中的文件名称 aa.docxZipEntry zipEntry new ZipEntry(aa.docx);zos.putNextEntry(zipEntry);FileInputStream fis new FileInputStream(tempFile);IOUtils.copy(fis, zos);fis.close();zos.closeEntry();tempFile.delete();}// 关闭zip文件输出流zos.close();doc.close();} catch (Exception e) {logger.error(文件导出错误{}, e.getMessage());}}// 返回zip文件内容byte[] zipBytes IOUtils.toByteArray(Files.newInputStream(Paths.get(demo.zip)));response.reset();response.setContentType(application/zip);response.setHeader(Content-disposition, attachment; filename URLEncoder.encode(demo.zip, UTF-8));response.setContentLength(zipBytes.length);OutputStream out response.getOutputStream();out.write(zipBytes);out.flush();out.close();return redirect:/;}private void replacePlaceholders(XWPFDocument document, MapString, Object placeholders) throws IOException, InvalidFormatException {//处理普通word文字 不包含表格for (XWPFParagraph paragraph : document.getParagraphs()) {ListXWPFRun runs paragraph.getRuns();for (XWPFRun run : runs) {String text run.getText(0);if (text ! null) {for (Map.EntryString, Object entry : placeholders.entrySet()) {if (text.contains(entry.getKey())) {text text.replace(entry.getKey(), entry.getValue() ! null ? (String) entry.getValue() : );run.setText(text, 0);}}}}}// 处理替换表格中的占位符for (XWPFTable table : document.getTables()) {for (XWPFTableRow row : table.getRows()) {for (XWPFTableCell cell : row.getTableCells()) {for (XWPFParagraph paragraph : cell.getParagraphs()) {ListXWPFRun runs paragraph.getRuns();for (XWPFRun run : runs) {String text run.getText(0);if (text ! null) {for (Map.EntryString, Object entry : placeholders.entrySet()) {if (text.contains(entry.getKey())) {//获取、处理图片略......int format XWPFDocument.PICTURE_TYPE_PNG;//图片地址BufferedImage image ImageIO.read(new URL(value));ByteArrayOutputStream outputStream new ByteArrayOutputStream();//suffix为图片的后缀 .pngImageIO.write(image, suffix, outputStream);byte[] imageBytes outputStream.toByteArray();//后两个参数是宽高run.addPicture(new ByteArrayInputStream(imageBytes), format, fileName, Units.toEMU(80), Units.toEMU(40));//替换文字 图片和文字如果都展示text text.replace(entry.getKey(), entry.getValue() ! null ? (String) entry.getValue() : );run.setText(text, 0);}}}}}}}}}
最后前端处理进行下载即可。