直接把Html文本写入到Word文件

  1. 获取查看页面的body内容和引用的css文件路径传入到后台。
  2. 把对应css文件的内容读取出来。
  3. 利用body内容和css文件的内容组成一个标准格式的Html文本。
  4. 根据组合后的Html文本生成对应的ByteArrayInputStream。
  5. 构建一个默认的POIFSFileSystem,并利用它和生成的ByteArrayInputStream创建一个WordDocument。
  6. 把构建的POIFSFileSystem写入到对应的输出流。

经过上面这几步之后我们就可以把Html格式的文本写入到Word文件中,同时使生成的Word文件呈现出对应的Web样式。需要注意的是原本Html文件中引用到的css文件的内容需要放到生成的Word文件中,生成后的Word文件才会呈现出对应的Web样式。下面是一个针对于该方式的一个简单例子:

  1. public void htmlToWord2() throws Exception {
  2. InputStream bodyIs = new FileInputStream("f:\\1.html");
  3. InputStream cssIs = new FileInputStream("f:\\1.css");
  4. String body = this.getContent(bodyIs);
  5. String css = this.getContent(cssIs);
  6. //拼一个标准的HTML格式文档
  7. String content = "<html><head><style>" + css + "</style></head><body>" + body + "</body></html>";
  8. InputStream is = new ByteArrayInputStream(content.getBytes("GBK"));
  9. OutputStream os = new FileOutputStream("f:\\1.doc");
  10. this.inputStreamToWord(is, os);
  11. }
  12.  
  13. /**
  14. * 把is写入到对应的word输出流os中
  15. * 不考虑异常的捕获,直接抛出
  16. * @param is
  17. * @param os
  18. * @throws IOException
  19. */
  20. private void inputStreamToWord(InputStream is, OutputStream os) throws IOException {
  21. POIFSFileSystem fs = new POIFSFileSystem();
  22. //对应于org.apache.poi.hdf.extractor.WordDocument
  23. fs.createDocument(is, "WordDocument");
  24. fs.writeFilesystem(os);
  25. os.close();
  26. is.close();
  27. }
  28.  
  29. /**
  30. * 把输入流里面的内容以UTF-8编码当文本取出。
  31. * 不考虑异常,直接抛出
  32. * @param ises
  33. * @return
  34. * @throws IOException
  35. */
  36. private String getContent(InputStream... ises) throws IOException {
  37. if (ises != null) {
  38. StringBuilder result = new StringBuilder();
  39. BufferedReader br;
  40. String line;
  41. for (InputStream is : ises) {
  42. br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
  43. while ((line=br.readLine()) != null) {
  44. result.append(line);
  45. }
  46. }
  47. return result.toString();
  48. }
  49. return null;
  50. }

1.css代码如下

  1. table {
  2. border: 1px solid blue;
  3. width: 800px;
  4. height: 500px;
  5. text-align: center;
  6. }
  7. td {
  8. width: 200px;
  9. border: 1px solid blue;
  10. }

1.html对应的内容如下:

  1. <table cellpadding="" style="border-collapse: collapse;">
  2. <tr>
  3. <td>中文</td>
  4. <td>中文</td>
  5. <td>中文</td>
  6. <td>中文</td>
  7. </tr>
  8. <tr>
  9. <td>中文</td>
  10. <td>中文</td>
  11. <td>中文</td>
  12. <td>中文</td>
  13. </tr>
  14. </table>

效果图

(注:本文是基于poi3.9所写)

POI把html写入word doc文件的更多相关文章

  1. 使用POI读写Word doc文件

    使用POI读写word doc文件 目录 1     读word doc文件 1.1     通过WordExtractor读文件 1.2     通过HWPFDocument读文件 2     写w ...

  2. android使用POI读写word doc文件

    目录 1     读word doc文件 1.1     通过WordExtractor读文件 1.2     通过HWPFDocument读文件 2     写word doc文件 Apache p ...

  3. POI写入word doc 03 模板的实例

    在使用POI写word doc文件的时候我们必须要先有一个doc文件才行,因为我们在写doc文件的时候是通过HWPFDocument来写的,而HWPFDocument是要依附于一个doc文件的.所以通 ...

  4. 使用POI转换word doc文件

    目录 1       转换为Html文件 2       转换为Xml文件 3       转换为Text文件 在POI中还存在有针对于word doc文件进行格式转换的功能.我们可以将word的内容 ...

  5. POI转换word doc文件为(html,xml,txt)

    在POI中还存在有针对于word doc文件进行格式转换的功能.我们可以将word的内容转换为对应的Html文件,也可以把它转换为底层用来描述doc文档的xml文件,还可以把它转换为底层用来描述doc ...

  6. VBA/VBScript提取Word(*.doc)文件中包含的图片(照片)

    VBA/VBScript提取Word(*.doc)文件中包含的图片(照片)   要处理的人事简历表是典型的Word文档,其中一人一份doc,里面包含有个人的照片,如果要把里面的照片复制出来就比较麻烦了 ...

  7. POI读word doc 03 文件的两种方法

    Apache poi的hwpf模块是专门用来对word doc文件进行读写操作的.在hwpf里面我们使用HWPFDocument来表示一个word doc文档.在HWPFDocument里面有这么几个 ...

  8. POI读写Word docx文件

    使用POI读写word docx文件 目录 1     读docx文件 1.1     通过XWPFWordExtractor读 1.2     通过XWPFDocument读 2     写docx ...

  9. Java将数据写入word文档(.doc)

    Java可用org.apache.poi包来操作word文档.org.apache.poi包可于官网上下载,解压后各jar作用如下图所示: 可根据需求导入对应的jar. 一.HWPFDocument类 ...

随机推荐

  1. Math对象产生随机数一个小应用

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. 小白使用Web Deploy在vs2015中发布到iis遇到的问题及操作流程

    整体流程详细参照:http://www.cnblogs.com/potential/p/3751426.html 问题1.未能连接到远程计算机,请确保在远程计算机上安装了 Web Deploy 并启动 ...

  3. CodeForces 41A+43A【课上无聊刷水题系列】

    41Acode 好像只要前一个字符串存在下一个字符串的头单词就YES: #include <bits/stdc++.h> using namespace std; typedef __in ...

  4. 使用AnimatorOverrideController动态更换animationclip注意事项

    http://www.ceeger.com/forum/read.php?tid=19138 public AnimationClip clip; Animator anim; void Awake( ...

  5. ADT版本查看,This Android SDK requires Andr...ate ADT to the latest问题

    ADT版本查看 Help->About ADT This Android SDK requires Andr...ate ADT to the latest问题 这样的问题很好解决,一个升级AD ...

  6. NOIP 2006 T2 金明的预算方案

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱就行”. ...

  7. 关于在linux系统环境下解压rar压缩文件

    如果在zip压缩文件,可以使有unzip来进行解压.可以直接使用yum进行下载. 但如果是rar类型压缩文件,使用yum就可能无法直接安装. 要到网址:https://www.rarlab.com/d ...

  8. ACM2017Tsukuba:H - Homework

    第一问求最多,不需要区分数学作业和信息作业,直接模拟就行了 第二问考虑每天只能产生1的贡献,每天拆成两个点,限制每天只能有1的贡献,剩下的源点连数学作业,信息作业连汇点,再将数学作业和信息作业连能连的 ...

  9. 在接口的实现类里使用@Override注解报错

    问题分析 @Override注解用来检测子类对父类或接口的方法的重写是否正确,但有一次我在Eclipse里对接口的实现类里使用@Override注解却报错,不过在父类的子类里使用该注解却是正常的. 百 ...

  10. SpringBoot | Thymeleaf | 局部更新

    建立一个实体类: public class Fruit { int id; String name; public Fruit() { } public Fruit(int id, String na ...