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

java生成word文档

1.pom依赖

    <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.18</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>

2.代码

package org.example.doc;import cn.hutool.core.io.FileUtil;
import cn.hutool.poi.word.TableUtil;
import cn.hutool.poi.word.Word07Writer;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;import java.awt.*;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;public class MyDoc {public static void main(String[] args) {doc();}static void doc(){Word07Writer writer = new Word07Writer();writer.addText(ParagraphAlignment.CENTER,new Font("宋体", Font.PLAIN, 16), "样式");writer.addText(ParagraphAlignment.CENTER,new Font("宋体", Font.BOLD, 16), "样式");writer.addText(ParagraphAlignment.CENTER,new Font("宋体", Font.ITALIC, 16), "样式");XWPFParagraph paragraph = writer.getDoc().createParagraph();XWPFRun run = paragraph.createRun();run.setText("样式");run.setUnderline(UnderlinePatterns.SINGLE);XWPFTable table = TableUtil.createTable(writer.getDoc(), getRows());mergeCells(table,table.getRows().size()-1,0,2);for (XWPFTableRow row : table.getRows()) {row.setHeight(500);row.setCantSplitRow(true);// 遍历行中的所有单元格for (XWPFTableCell cell : row.getTableCells()) {cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);//设置宽度cell.getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(100 * 25)); // 100磅转换为EMUsCTTc cttc = cell.getCTTc();CTP ctp = cttc.getPList().get(0);CTPPr ctppr = ctp.getPPr();if (ctppr == null) {ctppr = ctp.addNewPPr();}CTJc ctjc = ctppr.getJc();if (ctjc == null) {ctjc = ctppr.addNewJc();}ctjc.setVal(STJc.CENTER);}}writer.flush(FileUtil.file("./aa.docx"));writer.close();}static void mergeCells(XWPFTable table, int row, int fromCell, int toCell) {if(row<0){return;}for (int cellIndex = fromCell; cellIndex <= toCell; cellIndex++) {XWPFTableCell cell = table.getRow(row).getCell(cellIndex);if ( cellIndex == fromCell ) {// The first merged cell is set with RESTART merge valuecell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);} else {// Cells which join (merge) the first one, are set with CONTINUEcell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);}}}static List<Message> getRows(){List<Message> list=new ArrayList<>();for (int i = 0; i < 3; i++) {Message message=new Message();message.setName("name"+i);message.setAge("age"+i);message.setSex("sex"+i);list.add(message);}return  list;}
}

3.效果

4.说明

说明一:想要把文档中table的表头改成汉字,只需要在实体类上加上注解

@Alias(value = "名称")即可。

说明二:想要采用接口调用的形式,需要将代码中的

writer.flush刷新到HttpServletResponse即可。如下:docXXX方法,改造一下doc()方法即可

    public void listExport(HttpServletResponse response) {Word07Writer writer = docXXX();response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8");Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");String format = sdf.format(date);response.setHeader("Content-Disposition", "attachment;filename=" + format + ".docx");ServletOutputStream out = null;try {out = response.getOutputStream();writer.flush(out);} catch (IOException e) {throw new RuntimeException(e);} finally {writer.close();IoUtil.close(out);}}

http://www.lqws.cn/news/597007.html

相关文章:

  • 飞算JavaAI:重构软件开发范式的智能引擎
  • ABB驱动系列SCYC51213 63911607C驱动板
  • java微服务-linux单机CPU接近100%优化
  • Python应用指南:利用高德地图API获取公交+地铁可达圈(二)
  • 再见 RAG?Gemini 2.0 Flash 刚刚 “杀死” 了它!
  • 学习面向对象
  • 第TR3周:Pytorch复现Transformer
  • 快速手搓一个MCP服务指南(九): FastMCP 服务器组合技术:构建模块化AI应用的终极方案
  • 【仿muduo库实现并发服务器】Poller模块
  • 基于中国印尼会计准则差异,中国企业在印尼推广ERP(SAP、Oracle)系统需要注意的细节
  • Pycharm命令行能运行,但绿色三角报错?
  • mac重复文件清理,摄影师同款清理方案
  • nosql项目:基于 Redis 哨兵模式的鲜花预订配送系统
  • 设计模式之组合模式
  • 将实时流的 H.264(视频)与 G.711A(音频)封装成 MP4 文件
  • 关于量子计算的一份介绍
  • 12【进程间通信——管道】
  • Vue 响应式数据传递:ref、reactive 与 Provide/Inject 完全指南
  • 基于 Three.js 与 WebGL 的商场全景 VR 导航系统源码级解析
  • 遥感云大数据在灾害、水体与湿地领域案例及GPT应用
  • 第八章:LeRobot摄像头配置与应用指南
  • 使用GeoServer发布地图shapefi(.shp)数据
  • Spring Bean的生命周期与作用域详解
  • Vue-17-前端框架Vue之应用基础集中式状态管理pinia(二)
  • AI智能体在用户行为数据分析中有哪些应用?
  • Android 网络全栈攻略(四)—— TCPIP 协议族与 HTTPS 协议
  • Linux基本命令篇 —— grep命令
  • 基于ApachePOI实现百度POI分类快速导入PostgreSQL数据库实战
  • opencv使用 GStreamer 硬解码和 CUDA 加速的方案
  • 【cesium】基于vue-cesium开发地理空间分析应用