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

JAVA按模版导出Word文档(无需转换word格式)

1. 设置word导出模版

注:Word文档中以 {{字段名}} 标记需替换的字段位置

姓名{{name}}
年龄{{age}}

2. java代码

Word文档导出工具类 WordTemplateUtil

importorg.apache.poi.xwpf.usermodel.*;importorg.springframework.core.io.ClassPathResource;importjavax.servlet.http.HttpServletResponse;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.URLEncoder;importjava.util.List;importjava.util.Map;publicclassWordTemplateUtil{publicstaticvoidexportWord(StringtemplatePath,Map<String,Object>map,HttpServletResponseresponse,StringfileName)throwsException{ClassPathResourceresource=newClassPathResource(templatePath);InputStreamin=resource.getInputStream();XWPFDocumentdoc=newXWPFDocument(in);// 替换段落replaceAllParagraphs(doc.getParagraphs(),map);// 替换表格for(XWPFTabletable:doc.getTables()){for(XWPFTableRowrow:table.getRows()){for(XWPFTableCellcell:row.getTableCells()){replaceAllParagraphs(cell.getParagraphs(),map);}}}response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");response.setCharacterEncoding("UTF-8");fileName=URLEncoder.encode(fileName,"UTF-8");response.setHeader("Content-Disposition","attachment;filename="+fileName);OutputStreamout=response.getOutputStream();doc.write(out);out.flush();out.close();doc.close();in.close();}/** * 替换段落变量,保留原字体格式 */privatestaticvoidreplaceAllParagraphs(List<XWPFParagraph>paragraphs,Map<String,Object>map){for(XWPFParagraphparagraph:paragraphs){StringBuilderfullText=newStringBuilder();for(XWPFRunrun:paragraph.getRuns()){Stringtext=run.getText(0);if(text!=null)fullText.append(text);}Stringcontent=fullText.toString();if(content.isEmpty())continue;// 替换 {{key}}for(Map.Entry<String,Object>entry:map.entrySet()){Stringkey="{{"+entry.getKey()+"}}";Objectvalue=entry.getValue()==null?"":entry.getValue();content=content.replace(key,value.toString());}// 保留第一个run的格式,清空其他List<XWPFRun>runs=paragraph.getRuns();if(runs.isEmpty())return;for(inti=runs.size()-1;i>0;i--){paragraph.removeRun(i);}// 重新赋值,格式不变XWPFRunfirstRun=runs.get(0);firstRun.setText(content,0);}}}

调用示例

@GetMapping("/export")publicvoidexport(HttpServletResponseresponse)throwsException{Map<String,Object>data=newHashMap<>();data.put("name","张三");data.put("age","35");StringfileName="模版导出.docx";// 模板在 resources/templates/WordTemplateUtil.exportWord("templates/wrzl.docx",data,response,fileName);}

2.前端js调用示例

下载

exportWord(){axios({url:"/your/export/word/api",method:"get",data:{},// 你的参数responseType:"blob"// 必须写!}).then(res=>{constblob=newBlob([res])consturl=URL.createObjectURL(blob)consta=document.createElement('a')a.href=url a.download='模版导出.docx'a.click()URL.revokeObjectURL(url)})}

预览

previewWord(){axios({url:"/your/export/word/api",method:"get",data:{},// 你的参数responseType:"blob"// 必须写!}).then(res=>{constblob=newBlob([res],{type:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"})consturl=URL.createObjectURL(blob)// 新窗口预览window.open(url)})}
http://www.jsqmd.com/news/468790/

相关文章:

  • 50个深蹲,就能练遍整个下半身!
  • 搜维尔科技:SenseGlove R1专为无缝控制人形机器人手而设计,融合了主动力反馈、毫米级手指追踪精度和振动触觉反馈
  • 2026年,济南联想信创服务器供应商究竟哪家强?最新评测为你揭晓答案!
  • the evilness of American English
  • 关于立交中辅助车道设置的探讨
  • PHP与C++:Web开发与系统编程的终极对决
  • python flask django露营研学基地服务管理系统
  • 自然语言处理实战与Ai辅助编程指南
  • # 发散创新:用CUDA+OpenMP实现异构计算在图像滤波中的高效加速 在现代高性能计
  • 营销智能体≠聊天机器人!搞清这三层,你的投入才不打水漂
  • linux 服务器设置 时 /etc/passwd设置为nologin时,登录SFTP会报 No supported authentication methods available
  • 简单绘制装修施工进度图在线画图工具操作便捷易上手
  • 源码交付赋能ISV:基于GB28181/RTSP的低代码AI视频平台二次开发实战
  • 深度解析安卓开发工程师职位:从技术栈到面试指南
  • PostgreSQL 入门学习教程,从入门到精通,PostgreSQL 16 数据备份与还原详解 —语法、案例与实战(16)
  • 深入Java中的YOLO实现:从Process调用到DJL NPU推理,工业级落地全流程
  • Ollama部署Qwen对接OpenClaw
  • 最近在折腾结构光三维重建,发现格雷码和相移这俩兄弟配合起来干活真挺有意思。今天咱们就手撕几段核心代码,看看怎么用Python把三维模型从二维图像里刨出来
  • 别再用人工/RFID盘点了!无人零售货架边缘计算实战:Java+YOLOv11s+WebSocket+RK3588,盘点准确率99.2%
  • 【重要概念】CRTP:奇异递归模板模式、零开销多态的编译期魔法
  • Android 应用架构演进与设计指南
  • k8s的service、ingress controller和ingress
  • Unity中使用矩阵实现物体跟随
  • 从Spring Boot到Quarkus:Java+YOLOv11边缘/云端部署双杀!启动快5倍、内存降60%、容器缩70%!
  • 气动力到载荷——BEM理论
  • 恒压供水(无负压供水)系统全图纸程序
  • 智慧调度:让光伏和储能系统共同编织绿色能源网
  • AI教材写作大揭秘:如何利用AI工具实现低查重优质产出!
  • 图片格式转换小技巧:BMP批量变PNG的5种方法分享
  • 软件开发之DevOps