JavaWeb项目中输出*.doc文档
来源:互联网 发布:新南威尔士大学知乎 编辑:程序博客网 时间:2024/06/06 00:31
JavaWeb项目中输出文档
一、输出*.doc文档(使用freemarker模板生成)
1.先建立一个 .docx文档,动态内容用freemarker中的占位符 ${} 进行占位,然后将该文档另存为 .xml格式(若遇图片,可以先在 .doc文档中放入一张图片,另存为 .xml文件后,将 .xml文件中的图片码<图片存储格式为Base64的编码> 删除,换为freemarker的占位符),最后将 .xml改为 .ftl
例如
将如下word文档
另存为 .xml文件,再将格式改为 .ftl(注意看其中的占位符)(截取了部分)
w:val="52"/></w:rPr><w:t>${title}</w:t></w:r></w:p><w:tbl><w:tblPr><w:tblStyle w:val="a3"/><w:tblW w:w="0" w:type="auto"/><w:tblLook w:val="04A0" w:firstRow="1" w:lastRow="0" w:firstColumn="1" w:lastColumn="0" w:noHBand="0" w:noVBand="1"/></w:tblPr><w:tblGrid><w:gridCol w:w="2355"/><w:gridCol w:w="2681"/><w:gridCol w:w="3486"/></w:tblGrid><w:tr w:rsidR="009E0A0F" w:rsidTr="00164788"><w:trPr><w:trHeight w:val="1464"/></w:trPr><w:tc><w:tcPr><w:tcW w:w="2823" w:type="dxa"/></w:tcPr><w:p w:rsidR="009E0A0F" w:rsidRDefault="009E0A0F"><w:r><w:rPr><w:rFonts w:hint="eastAsia"/></w:rPr><w:t>name</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="3069" w:type="dxa"/></w:tcPr><w:p w:rsidR="009E0A0F" w:rsidRDefault="009E0A0F"><w:r><w:rPr><w:rFonts w:hint="eastAsia"/></w:rPr><w:t>${name}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="2296" w:type="dxa"/><w:vMerge w:val="restart"/></w:tcPr><w:p w:rsidR="009E0A0F" w:rsidRDefault="00AD5078"><w:r><w:rPr><w:noProof/></w:rPr><w:drawing><wp:inline distT="0" distB="0" distL="0" distR="0"><wp:extent cx="2076629" cy="1382573"/><wp:effectExtent l="0" t="0" r="0" b="8255"/><wp:docPr id="1" name="图片 1" descr="D:\BaiduNetdiskDownload\IU\20.jpg"/><wp:cNvGraphicFramePr><a:graphicFrameLocks noChangeAspect="1" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"/></wp:cNvGraphicFramePr><a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"><a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture"><pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture"><pic:nvPicPr><pic:cNvPr id="0" name="Picture 1" descr="D:\BaiduNetdiskDownload\IU\20.jpg"/><pic:cNvPicPr><a:picLocks noChangeAspect="1" noChangeArrowheads="1"/></pic:cNvPicPr></pic:nvPicPr><pic:blipFill><a:blip r:embed="rId5" cstate="print"><a:extLst><a:ext uri="{28A0092B-C50C-407E-A947-70E740481C1C}"><a14:useLocalDpi val="0" xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main"/></a:ext></a:extLst></a:blip><a:srcRect/><a:stretch><a:fillRect/></a:stretch></pic:blipFill><pic:spPr bwMode="auto"><a:xfrm><a:off x="0" y="0"/><a:ext cx="2076601" cy="1382555"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom><a:noFill/><a:ln><a:noFill/></a:ln></pic:spPr></pic:pic></a:graphicData></a:graphic></wp:inline></w:drawing></w:r></w:p></w:tc></w:tr><w:tr w:rsidR="009E0A0F" w:rsidTr="009E0A0F"><w:trPr><w:trHeight w:val="979"/></w:trPr><w:tc><w:tcPr><w:tcW w:w="2823" w:type="dxa"/></w:tcPr><w:p w:rsidR="009E0A0F" w:rsidRDefault="009E0A0F"><w:r><w:rPr><w:rFonts w:hint="eastAsia"/></w:rPr><w:t>age</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="3069" w:type="dxa"/></w:tcPr><w:p w:rsidR="009E0A0F" w:rsidRDefault="009E0A0F"><w:r><w:rPr><w:rFonts w:hint="eastAsia"/></w:rPr><w:t>${age}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="2296" w:type="dxa"/><w:vMerge/></w:tcPr><w:p w:rsidR="009E0A0F" w:rsidRDefault="009E0A0F"/></w:tc></w:tr></w:tbl><w:p w:rsidR="007B1502" w:rsidRDefault="007B1502"><w:bookmarkStart w:id="0" w:name="_GoBack"/><w:bookmarkEnd w:id="0"/></w:p><w:sectPr w:rsidR="007B1502"><w:pgSz w:w="11906" w:h="16838"/><w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="851" w:footer="992" w:gutter="0"/><w:cols w:space="425"/><w:docGrid w:type="lines" w:linePitch="312"/></w:sectPr></w:body></w:document></pkg:xmlData></pkg:part><pkg:part pkg:name="/word/media/image1.jpeg" pkg:contentType="image/jpeg" pkg:compression="store"><pkg:binaryData>${photo}</pkg:binaryData></pkg:part><pkg:part
2.将相应的 .ftl模板和图片放在项目的某个路径下,然后浏览器请求某个路径时,将动态数据和 .ftl 模板柔和一起,发给浏览器即可
控制器(或者是servlet小服务)
package com.lyx.springboot1114.controller;import freemarker.template.Configuration;import freemarker.template.Template;import freemarker.template.TemplateException;import freemarker.template.Version;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import javax.servlet.http.HttpServletResponse;import java.io.*;import java.net.URLEncoder;import java.util.Base64;import java.util.HashMap;import java.util.Map;/** * @author */@Controllerpublic class DocxController { @GetMapping("getDoc") public void getDocxTest(HttpServletResponse response) throws IOException, TemplateException { response.setCharacterEncoding("utf-8"); Version version = new Version("2.3.0"); Configuration cfg = new Configuration(version); //扫描路径 cfg.setDirectoryForTemplateLoading(new File("docx/")); //扫描的文件(模板) Template template = cfg.getTemplate("docTest.ftl","utf-8"); //即便模板上的占位符取不到值也不报错,做静默处理(不取值-空字符串) template.setClassicCompatible(true); //给输出的文件命名(中文注意转换为%编码) String fileName= URLEncoder.encode("个人简历.doc","utf-8"); //设置响应头 response.setHeader("Content-Disposition", "attach; filename=" + fileName); PrintWriter writer=response.getWriter(); //添加数据 InputStream in=new FileInputStream("docx/IU.jpg"); byte photoBuf[]=new byte[in.available()]; in.read(photoBuf); //读进来的图片转换Base64编码 String photoString= Base64.getEncoder().encodeToString(photoBuf); Map<String, Object> dataModel = new HashMap<>(); dataModel.put("name", "IU"); dataModel.put("title","个人简历"); dataModel.put("age",22); dataModel.put("photo",photoString); //将数据和模板糅合在一起输出 template.process(dataModel, writer); writer.close(); }}
阅读全文
0 0
- JavaWeb项目中输出*.doc文档
- JavaWeb项目中集成Swagger API文档
- 怎么将项目在Eclipse中生成doc文档
- javaweb项目设计文档
- IDEA java doc 接口文档输出
- eclipse自动生成项目doc文档
- myeclipse中关联spring doc帮助文档
- javaWeb项目中如何将console中的信息输出到文件中
- 文档中输出数据
- ant 为项目生成doc文档 并打包成zip
- Android studio如何将项目生成doc文档
- javaWeb项目中读取配置文件
- javaWeb项目中读取配置文件
- javaweb项目中中文乱码
- javaweb项目中中文乱码
- javaweb项目中中文乱码
- JavaWeb中项目路径问题
- javaweb项目中导入jquery
- 大数据早报:Logz.io获2300万美元C轮融资 SecureKey推出基于IBM区块链技术的数字身份系统(11.17)
- cocos3.10 lua 碰撞检测的使用
- Android学习笔记之Socket客户端与服务端通信( 一)
- 数据结构中你需要知道的关于树的一切
- 常见的几种安全加密算法
- JavaWeb项目中输出*.doc文档
- 学习书本
- 欢迎使用CSDN-markdown编辑器
- 小程序marker callout 遇到的坑
- 11个简单的Java性能调优技巧
- PHP使用curl multi要注意的问题:每次使用curl multi同时并发多少请求合适
- Postman 详解
- Filter(undone)
- Windows上的巧克力味Chocolatey详解