当前位置: 首页 > news >正文

怎么做网站推广毫州广州婚恋网站排名

怎么做网站推广毫州,广州婚恋网站排名,微信公众号托管代运营,建立网站最近接到一个新的需求&#xff0c;用户创建好模板文件保存到模板库&#xff0c;然后使用在线文档编辑器打开模板时&#xff0c;将系统数据填充到模板文件并生成新的word文件&#xff0c;然后在线编辑&#xff0c;研究使用Apache POI和POI-OOXML实现了这个功能。 Maven依赖 <…

 最近接到一个新的需求,用户创建好模板文件保存到模板库,然后使用在线文档编辑器打开模板时,将系统数据填充到模板文件并生成新的word文件,然后在线编辑,研究使用Apache POI和POI-OOXML实现了这个功能。

Maven依赖

        <!-- Apache POI 和 POI-OOXML --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></dependency>

自动填充的接口

import org.apache.poi.xwpf.usermodel.*;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@RestController
@RequestMapping("/fill")
public class WordFillController {@PostMapping("/wordFill")public ResponseEntity<?> wordFill() {String templatePath = "E:\\word\\template.docx";String outputPath = "E:\\word\\output.docx";// 待填充进模板的数据Map<String, String> data = new HashMap<>();data.put("name", "张三");data.put("sex", "男");data.put("age", "18");Map<String, String> data1 = new HashMap<>();data1.put("name", "张三1");data1.put("sex", "男1");data1.put("age", "20");Map<String, String> data2 = new HashMap<>();data2.put("name", "李四");data2.put("sex", "男");data2.put("age", "21");Map<String, String> data3 = new HashMap<>();data3.put("name", "王五");data3.put("sex", "女");data3.put("age", "45");List<Map<String, String>> dataList = Arrays.asList(data1, data2, data3);try (// 从模板文件创建word文档对象XWPFDocument doc = new XWPFDocument(Files.newInputStream(Paths.get(templatePath)));// 文件输出流FileOutputStream fos = new FileOutputStream(outputPath)) {replacePlaceholders(doc, data);// 替换占位符fillTable(doc, dataList);// 填充表格// 将文档写入输出流doc.write(fos);// 刷新输出流fos.flush();return ResponseEntity.ok().build();} catch (IOException e) {e.printStackTrace();return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());}}private void replacePlaceholders(XWPFDocument doc, Map<String, String> data) {// 遍历文档中的段落,替换占位符doc.getParagraphs().forEach(paragraph -> {// 遍历段落中的文本,替换占位符paragraph.getRuns().forEach(run -> {// 获取文本内容String text = run.getText(0);// 判断文本是否包含占位符,如果包含,则替换占位符if (text != null && text.contains("${")) {for (Map.Entry<String, String> entry : data.entrySet()) {text = text.replace("${" + entry.getKey() + "}", entry.getValue());}// 设置替换后的文本run.setText(text, 0);}});});}private void fillTable(XWPFDocument doc, List<Map<String, String>> dataList) {XWPFTable table = doc.getTables().get(0); // 获取第一个表格// 获取表格的模板行(假设表格的第一行是标题行,第二行为模板行)XWPFTableRow templateRow = table.getRow(1);// 添加新的行,并删除模板行for (Map<String, String> data : dataList) {XWPFTableRow newRow = table.createRow();// 手动创建每个单元格,并复制模板行的样式for (int i = 0; i < templateRow.getTableCells().size(); i++) {XWPFTableCell templateCell = templateRow.getCell(i);XWPFTableCell newCell = newRow.getCell(i);if (newCell == null) {newCell = newRow.createCell();}// 复制模板行单元格的样式,不复制内容copyCellStyleWithoutText(templateCell, newCell);// 填充数据switch (i) {case 0:newCell.setText(data.get("name"));break;case 1:newCell.setText(data.get("sex"));break;case 2:newCell.setText(data.get("age"));break;}}}// 删除模板行table.removeRow(1);}private void copyCellStyleWithoutText(XWPFTableCell sourceCell, XWPFTableCell targetCell) {// 复制单元格的样式,但不复制文本内容targetCell.getParagraphs().forEach(paragraph -> {XWPFParagraph sourceParagraph = sourceCell.getParagraphs().get(0);paragraph.setAlignment(sourceParagraph.getAlignment());paragraph.setVerticalAlignment(sourceParagraph.getVerticalAlignment());if (!sourceParagraph.getRuns().isEmpty()) {XWPFRun sourceRun = sourceParagraph.getRuns().get(0);XWPFRun targetRun = paragraph.createRun();targetRun.setBold(sourceRun.isBold());targetRun.setItalic(sourceRun.isItalic());targetRun.setFontFamily(sourceRun.getFontFamily());targetRun.setFontSize(sourceRun.getFontSize());}});// 复制单元格背景色等样式targetCell.setColor(sourceCell.getColor());targetCell.setVerticalAlignment(sourceCell.getVerticalAlignment());}
}

word模板

调用接口后生成的新文件

http://www.mmbaike.com/news/88661.html

相关文章:

  • idc网站模板源码下载武汉百度网站优化公司
  • wordpress 百度网盘插件东莞关键词排名优化
  • 唐河网站制作java培训学费多少钱
  • 互联网定制产品网站效果好的东莞品牌网站建设
  • 电脑租赁东莞seo网站排名优化公司
  • 怎么做网站上的模拟动画外贸推广是做什么的
  • 天津网站建设电话网络推广有哪些渠道
  • 去黄山旅游的攻略seo sem是什么
  • 舟山做网站百度免费资源网站
  • 网页设计的网站上海有哪些优化网站推广公司
  • 搭建wordpress博客终端深圳seo优化推广
  • 网站开发的上市公司有哪些内蒙古seo优化
  • 怎么知道网站的域名常见的网络营销工具有哪些
  • 济南 制作网站 公司吗百度收录接口
  • 网站开发怎么做账最新中央人事任免
  • 网站制作公司crm客户管理系统广州做seo公司
  • 佛山外贸网站建设机构被公司优化掉是什么意思
  • 汽车建设网站的能力网上哪里可以免费打广告
  • 东莞专业做淘宝网站建设互联网营销外包公司
  • 用php做网站的实训日志总结10种营销方法
  • 一级a做爰片免费网站偷拍厕所整站优化 mail
  • 网站编辑软件有哪些中国企业100强
  • 福建建设厅官方网站怎么样免费做网站
  • 保定百度网站建设最火的网络销售平台
  • 中国wix网站制作公司软文世界官网
  • 做拍卖网站如何做电商 个人
  • 做本地网站怎么挣钱洛阳网站建设
  • 国外做gif的网站抖音seo推广
  • 包装材料营销型网站网站设计是做什么的
  • 深圳专业做网站哪家专业女教师遭网课入侵视频大全