最近项目里要求从后台获取试题然后生成一张试卷导出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几种方法相关推荐

  1. 数据库数据用Excel导出的3种方法

    数据库数据用Excel导出的3种方法 分类: .Net 2008-06-30 11:07 173人阅读 评论(2) 收藏 举报 将数据库数据用Excel导出主要有3种方法:用Excel.Applica ...

  2. php生成word的三种方式,php生成word两种方法

    php生成word两种方法 php教程生成word两种方法 1.正常的touch创建word 2.fopen 打开word 3.fwrite 写入word 并保存 这样会出现一个问题 如果写入的东西里 ...

  3. mysql e 导出数据库_mysql导出数据库几种方法

    方法一 cmd 到mysql bin目录下用 如下命令 mysqldump --opt -h192.168.0.156 -uusername -ppassword --skip-lock-tables ...

  4. mysql导出数据到s3_mysql导出数据库几种方法

    方法一 cmd 到mysql bin目录下用 如下命令 mysqldump --opt -h192.168.0.156 -uusername -ppassword --skip-lock-tables ...

  5. 达梦数据库表导出的两种方法

    第一种:达梦管理工具上导出 然后用sql查询出来所有的数据 select * from PA_SLOPE_BAK  然后右键选择结果集窗口第一行数据  -- 导出所有 然后选择你需要的类型  第二种达 ...

  6. 润乾报表,显示图片并导出的两种方法

    方法1: 1.选择数据类型,如图所示: 2.选择html,@path是前端js带过来的参数(绝对路径,如:http://cs.testtest.com:8888),wom_image_path为图片的 ...

  7. 导出Excel三种方法

    用excel2007直接画出表格,然后拖拽到项目对应的目录下,之后直接引用这个路径,或者用框架封装的配置文件去调用这个文件. 方法一. Excel 2007版本的(后缀.xlsx)  用 XSSFWo ...

  8. 纯前端导出word、pdf、excel、txt、svg文档方法与技巧(附带问题总结)

    文章目录 导出pdf **实现思路:** **问题总结:** **具体代码** **封装好的导出函数,记得引入js插件** 封装方法一: 封装方法二: 封装方法三: 纯前端导出word文档方法与技巧 ...

  9. easypoi导出word表格_java如何导出word和wps文档

    使用场景:打开一个表单页面,导出word或wps文件,代码框架基于springboot+jpa 一.准备word模板 二.pom.xml文件中引入依赖 <dependency><gr ...

最新文章

  1. 利用边缘检测计算物体面积(内含源码)
  2. 基于SSM实现学籍管理系统
  3. mysql企业版多少钱_企业资质代办多少钱
  4. GAN生成对抗网络-GAN原理与基本实现-去噪与卷积自编码器01
  5. java实现遍历文件夹下的文件及文件夹
  6. css居中的几种方法_CSS布局中的水平居中的方法
  7. xhell 镜像_2020官网下载Xshell 6.0.189.0中文版
  8. C/C++作用域运算符::
  9. ASPCMS调用分类名称及链接
  10. MATLAB不能打字,电脑不能打字怎么办?电脑打字打不出来解决方法汇总
  11. Linux中断子系统(一)中断控制器GIC架构
  12. 温哥华岛大学计算机科学,温哥华岛大学有几个校区?
  13. NumPy 快速入门系列:应用统计学基础概念、相关统计指标与NumPy的实现
  14. DVD项目: 用面向对象的思想做DVD租赁系统
  15. (01)ORB-SLAM2源码无死角解析-(64) BA优化(g2o)→闭环线程:Optimizer::OptimizeSim3→Sim3变换优化
  16. Unity使用Vuforia实现AR脱卡功能
  17. 计算机应用基础出版年度,2021年度计算机应用基础开专选修期末改.doc
  18. 【框架】idea找不到xxx依赖项怎么办
  19. ios 使用webview 查找_ios: WebView内高亮搜索
  20. BeautifulSoup爬取笔趣阁小说并下载到本地

热门文章

  1. 360加固android app反编译,apk360加固脱壳
  2. 普法知识(36):软件著作权人
  3. html百度地图取电,盯盯拍支持高德地图AR导航,升级智慧出行新体验
  4. 真牛皮!手把手教你写Android项目文档,内含福利
  5. Android 网络编程(二) HTTP协议解析
  6. 【Simulink教程案例6】基于Simulink的自适应PID控制器设计与实现
  7. 计算机主机面板上的reset,一但中了IE窗口炸弹马上按下主机面板上的Reset键,重起计算机是对的吗...
  8. unity初学 Mstudio教程
  9. 画图时屏幕闪烁的原因和解决方法
  10. 计算机主机通常包不包括硬盘,计算机主机通常包括