导出Word几种方法
最近项目里要求从后台获取试题然后生成一张试卷导出Word。开始是利用xml 由Freemark模版生成,但是由于数据库里存了来自富文本框带Html格式的数据,此部分样式无法生成。只好先生成html,再导出Word。以下是我用到几种导出Word的方法。
1.利用Freemark模版生成
如果不是从数据库取出的数据本身带Html格式的话,这种方法是比较推荐的,适用生成格式比较复杂的情况。先在Word里画好你的模版,然后另存为xml格式,再将里面的内容用Freemark标签代替。
PaperToWordVo vo=new PaperToWordVo();
vo=paperResservice.getPaperInfo((String)session.getAttribute("dataowner"),paperId,vo);
response.setHeader("Content-Disposition","attachment;filename="+new String((vo.getPaperTitle()+".doc").getBytes("UTF-8"),"ISO8859-1"));
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
WordUtil handler = new WordUtil();
Writer out;
out = response.getWriter();
handler.write("/com/stsoft/learning/model", "test.xml", vo, out);
//其中test.xml 就是word生成预先修改好的模版
WordUtil.java
import java.io.IOException;
import java.io.Writer;
import java.util.Map; import freemarker.template.Configuration;
import freemarker.template.Template; public class WordUtil { private Configuration configuration = null; public WordUtil() { try { configuration = new Configuration(); configuration.setDefaultEncoding("UTF-8"); } catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace(); } } private Template getTemplate(String templatePath, String templateName) throws IOException { configuration.setClassForTemplateLoading(this.getClass(), templatePath); Template t = configuration.getTemplate(templateName); t.setEncoding("UTF-8"); return t; } public void write(String templatePath, String templateName, PaperToWordVo dataMap, Writer out) { try { Template t = getTemplate(templatePath, templateName); t.process(dataMap, out); out.close(); } catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace(); } }
}
2.利用Apache POI
POI在生成excel时优势更突出,POI生成word 由你自己在后台写出格式,当然也可以利用模版。
下面是一个很简单的例子,具体可以看官网
//新建一个文档
XWPFDocument doc = new XWPFDocument();
//创建一个段落XWPFParagraph para = doc.createParagraph();//一个XWPFRun代表具有相同属性的一个区域。 XWPFRun run = para.createRun(); run.setBold(true); //加粗 run.setText(vo.getPaperTitle()); run.addBreak(); run = para.createRun(); //run.setColor("FF0000"); List<QusetionTypeVo> tl=vo.getTypeList(); for(QusetionTypeVo ty:tl){ run.setText("第"+ty.getQtypeNO()+"部分 "+ty.getQtypeTitle()); List<QuestionVo>ql=ty.getQuestionList(); for(QuestionVo que:ql){ run.setText("第"+que.getQuestionNo()+"题、 "+que.getQuestionTitle()); run.addBreak(); } run.addBreak(); }
3.先生成html再导出word (适合取出的数据含html格式)
//将你要展示的内容转换成 html 再将其转 Word 其中也利用到POI
String content = "<html> <head> </head><div style=\"text-align: center\">" + "<span style=\"font-size: 28px\">" +vo.getPaperTitle()+"</span> <br> <span style=\"font-size: 13px\">考试时间:"+vo.getTimeLimit()+" 总分:"+ vo.getScoreTotal()+" 通过分:"+vo.getScorePass()+"</span> </div><br><br>"+typeDiv.toString()+"</html>";
byte b[] = content.getBytes();
ByteArrayInputStream bais = new ByteArrayInputStream(b);
POIFSFileSystem poifs = new POIFSFileSystem();
DirectoryEntry directory = poifs.getRoot();
DocumentEntry documentEntry = directory.createDocument("WordDocument", bais);
OutputStream ostream = response.getOutputStream();
poifs.writeFilesystem(ostream);
bais.close();
ostream.close()
导出Word几种方法相关推荐
- 数据库数据用Excel导出的3种方法
数据库数据用Excel导出的3种方法 分类: .Net 2008-06-30 11:07 173人阅读 评论(2) 收藏 举报 将数据库数据用Excel导出主要有3种方法:用Excel.Applica ...
- php生成word的三种方式,php生成word两种方法
php生成word两种方法 php教程生成word两种方法 1.正常的touch创建word 2.fopen 打开word 3.fwrite 写入word 并保存 这样会出现一个问题 如果写入的东西里 ...
- mysql e 导出数据库_mysql导出数据库几种方法
方法一 cmd 到mysql bin目录下用 如下命令 mysqldump --opt -h192.168.0.156 -uusername -ppassword --skip-lock-tables ...
- mysql导出数据到s3_mysql导出数据库几种方法
方法一 cmd 到mysql bin目录下用 如下命令 mysqldump --opt -h192.168.0.156 -uusername -ppassword --skip-lock-tables ...
- 达梦数据库表导出的两种方法
第一种:达梦管理工具上导出 然后用sql查询出来所有的数据 select * from PA_SLOPE_BAK 然后右键选择结果集窗口第一行数据 -- 导出所有 然后选择你需要的类型 第二种达 ...
- 润乾报表,显示图片并导出的两种方法
方法1: 1.选择数据类型,如图所示: 2.选择html,@path是前端js带过来的参数(绝对路径,如:http://cs.testtest.com:8888),wom_image_path为图片的 ...
- 导出Excel三种方法
用excel2007直接画出表格,然后拖拽到项目对应的目录下,之后直接引用这个路径,或者用框架封装的配置文件去调用这个文件. 方法一. Excel 2007版本的(后缀.xlsx) 用 XSSFWo ...
- 纯前端导出word、pdf、excel、txt、svg文档方法与技巧(附带问题总结)
文章目录 导出pdf **实现思路:** **问题总结:** **具体代码** **封装好的导出函数,记得引入js插件** 封装方法一: 封装方法二: 封装方法三: 纯前端导出word文档方法与技巧 ...
- easypoi导出word表格_java如何导出word和wps文档
使用场景:打开一个表单页面,导出word或wps文件,代码框架基于springboot+jpa 一.准备word模板 二.pom.xml文件中引入依赖 <dependency><gr ...
最新文章
- 利用边缘检测计算物体面积(内含源码)
- 基于SSM实现学籍管理系统
- mysql企业版多少钱_企业资质代办多少钱
- GAN生成对抗网络-GAN原理与基本实现-去噪与卷积自编码器01
- java实现遍历文件夹下的文件及文件夹
- css居中的几种方法_CSS布局中的水平居中的方法
- xhell 镜像_2020官网下载Xshell 6.0.189.0中文版
- C/C++作用域运算符::
- ASPCMS调用分类名称及链接
- MATLAB不能打字,电脑不能打字怎么办?电脑打字打不出来解决方法汇总
- Linux中断子系统(一)中断控制器GIC架构
- 温哥华岛大学计算机科学,温哥华岛大学有几个校区?
- NumPy 快速入门系列:应用统计学基础概念、相关统计指标与NumPy的实现
- DVD项目: 用面向对象的思想做DVD租赁系统
- (01)ORB-SLAM2源码无死角解析-(64) BA优化(g2o)→闭环线程:Optimizer::OptimizeSim3→Sim3变换优化
- Unity使用Vuforia实现AR脱卡功能
- 计算机应用基础出版年度,2021年度计算机应用基础开专选修期末改.doc
- 【框架】idea找不到xxx依赖项怎么办
- ios 使用webview 查找_ios: WebView内高亮搜索
- BeautifulSoup爬取笔趣阁小说并下载到本地
热门文章
- 360加固android app反编译,apk360加固脱壳
- 普法知识(36):软件著作权人
- html百度地图取电,盯盯拍支持高德地图AR导航,升级智慧出行新体验
- 真牛皮!手把手教你写Android项目文档,内含福利
- Android 网络编程(二) HTTP协议解析
- 【Simulink教程案例6】基于Simulink的自适应PID控制器设计与实现
- 计算机主机面板上的reset,一但中了IE窗口炸弹马上按下主机面板上的Reset键,重起计算机是对的吗...
- unity初学 Mstudio教程
- 画图时屏幕闪烁的原因和解决方法
- 计算机主机通常包不包括硬盘,计算机主机通常包括