直入正题,需求为页面预览word文档,用的是poi3.8,以下代码支持表格、图片,不支持分页,只支持doc,不支持docx;

  1. /**
  2. *
  3. */
  4. import java.io.BufferedWriter;
  5. import java.io.File;
  6. import java.io.FileInputStream;
  7. import java.io.FileNotFoundException;
  8. import java.io.FileOutputStream;
  9. import java.io.IOException;
  10. import java.io.OutputStream;
  11. import java.io.OutputStreamWriter;
  12. import java.util.List;
  13. import javax.xml.parsers.DocumentBuilderFactory;
  14. import javax.xml.parsers.ParserConfigurationException;
  15. import javax.xml.transform.OutputKeys;
  16. import javax.xml.transform.Transformer;
  17. import javax.xml.transform.TransformerException;
  18. import javax.xml.transform.TransformerFactory;
  19. import javax.xml.transform.dom.DOMSource;
  20. import javax.xml.transform.stream.StreamResult;
  21. import org.apache.commons.io.output.ByteArrayOutputStream;
  22. import org.apache.poi.hwpf.HWPFDocument;
  23. import org.apache.poi.hwpf.converter.PicturesManager;
  24. import org.apache.poi.hwpf.converter.WordToHtmlConverter;
  25. import org.apache.poi.hwpf.model.PicturesTable;
  26. import org.apache.poi.hwpf.usermodel.CharacterRun;
  27. import org.apache.poi.hwpf.usermodel.Paragraph;
  28. import org.apache.poi.hwpf.usermodel.Picture;
  29. import org.apache.poi.hwpf.usermodel.PictureType;
  30. import org.apache.poi.hwpf.usermodel.Range;
  31. import org.apache.poi.hwpf.usermodel.Table;
  32. import org.apache.poi.hwpf.usermodel.TableCell;
  33. import org.apache.poi.hwpf.usermodel.TableIterator;
  34. import org.apache.poi.hwpf.usermodel.TableRow;
  35. import org.w3c.dom.Document;
  36. /**
  37. * @author: Chembo Huang
  38. * @since: May 3, 2012
  39. * @modified: May 3, 2012
  40. * @version:
  41. */
  42. public class Word2Html {
  43. public static void main(String argv[]) {
  44. try {
  45. convert2Html("D://1.doc","D://1.html");
  46. } catch (Exception e) {
  47. e.printStackTrace();
  48. }
  49. }
  50. public static void writeFile(String content, String path) {
  51. FileOutputStream fos = null;
  52. BufferedWriter bw = null;
  53. try {
  54. File file = new File(path);
  55. fos = new FileOutputStream(file);
  56. bw = new BufferedWriter(new OutputStreamWriter(fos,"GB2312"));
  57. bw.write(content);
  58. } catch (FileNotFoundException fnfe) {
  59. fnfe.printStackTrace();
  60. } catch (IOException ioe) {
  61. ioe.printStackTrace();
  62. } finally {
  63. try {
  64. if (bw != null)
  65. bw.close();
  66. if (fos != null)
  67. fos.close();
  68. } catch (IOException ie) {
  69. }
  70. }
  71. }
  72. public static void convert2Html(String fileName, String outPutFile)
  73. throws TransformerException, IOException,
  74. ParserConfigurationException {
  75. HWPFDocument wordDocument = new HWPFDocument(new FileInputStream(fileName));//WordToHtmlUtils.loadDoc(new FileInputStream(inputFile));
  76. WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(
  77. DocumentBuilderFactory.newInstance().newDocumentBuilder()
  78. .newDocument());
  79. wordToHtmlConverter.setPicturesManager( new PicturesManager()
  80. {
  81. public String savePicture( byte[] content,
  82. PictureType pictureType, String suggestedName,
  83. float widthInches, float heightInches )
  84. {
  85. return "test/"+suggestedName;
  86. }
  87. } );
  88. wordToHtmlConverter.processDocument(wordDocument);
  89. //save pictures
  90. List pics=wordDocument.getPicturesTable().getAllPictures();
  91. if(pics!=null){
  92. for(int i=0;i<pics.size();i++){
  93. Picture pic = (Picture)pics.get(i);
  94. System.out.println();
  95. try {
  96. pic.writeImageContent(new FileOutputStream("D:/test/"
  97. + pic.suggestFullFileName()));
  98. } catch (FileNotFoundException e) {
  99. e.printStackTrace();
  100. }
  101. }
  102. }
  103. Document htmlDocument = wordToHtmlConverter.getDocument();
  104. ByteArrayOutputStream out = new ByteArrayOutputStream();
  105. DOMSource domSource = new DOMSource(htmlDocument);
  106. StreamResult streamResult = new StreamResult(out);
  107. TransformerFactory tf = TransformerFactory.newInstance();
  108. Transformer serializer = tf.newTransformer();
  109. serializer.setOutputProperty(OutputKeys.ENCODING, "GB2312");
  110. serializer.setOutputProperty(OutputKeys.INDENT, "yes");
  111. serializer.setOutputProperty(OutputKeys.METHOD, "html");
  112. serializer.transform(domSource, streamResult);
  113. out.close();
  114. writeFile(new String(out.toByteArray()), outPutFile);
  115. }
  116. }

下载poi-bin-3.9-20121203.tar.gz并解压,提取查看Office文档所依赖的包。

poi完美word转html(表格、图片、样式)的更多相关文章

  1. 使用POI导出Word(含表格)的实现方式及操作Word的工具类

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  2. Java使用POI读取Word中的表格

    个人博客 地址:https://www.wenhaofan.com/a/20190627135921 代码 package live.autu.word; import java.io.FileInp ...

  3. Apache Poi 操作word,替换字符保留样式问题,runs段落混乱问题。

    关于这个问题也是刚好遇到,一通搜索也没有找到类似的或者是有效的方法.下面介绍一下. 首先apache poi的引入 <dependency> <groupId>org.apac ...

  4. [转]CSS如何设置html table表格边框样式

    原文地址:http://www.divcss5.com/wenji/w503.shtml 对table设置css样式边框,分为几种情况: 1.只对table设置边框 2.对td设置边框 3.对tabl ...

  5. POI 生成 word 文档 简单版(包括文字、表格、图片、字体样式设置等)

      POI 生成word 文档 一般有两种方法: ① word模板 生成word 文档 : ② 写代码直接生成 word 文档: 我这里演示的是第二种方法,即写代码生成 word文档,不多说废话,直接 ...

  6. Java利用poi生成word(包含插入图片,动态表格,行合并)

    转(小改): Java利用poi生成word(包含插入图片,动态表格,行合并) 2018年12月20日 09:06:51 wjw_11093010 阅读数:70 Java利用poi生成word(包含插 ...

  7. poi导出word表格详解 超详细了

    转:非常感谢原作者 poi导出word表格详解 2018年07月20日 10:41:33 Z丶royAl 阅读数:36138   一.效果如下 二.js代码 function export_word( ...

  8. C#通过模板导出Word(文字,表格,图片)

    C#通过模板导出Word(文字,表格,图片)   C#导出Word,Excel的方法有很多,这次因为公司的业务需求,需要导出内容丰富(文字,表格,图片)的报告,以前的方法不好使,所以寻找新的导出方法, ...

  9. word模板导出的几种方式:第二种:C#通过模板导出Word(文字,表格,图片) 占位符替换

    原文出处:https://www.cnblogs.com/ilefei/p/3508463.html 一:模板的创建   (注意文件后缀只能是.docx或.doct) 在需要位置 插入-文档部件-域, ...

随机推荐

  1. HDU2665 kth number 线段树做法

    题意:求区间第k小 思路: 线段树 每个节点上保存 当前区间已经排序好的序列 (归并一下就好了嘛 复杂度 O(l)的) 这样建树的时空复杂度都是 O(nlogn)的 对于 每次询问 二分一个答案 在树 ...

  2. AtCoder Beginner Contest 067 D - Fennec VS. Snuke

    D - Fennec VS. Snuke Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Statement F ...

  3. 如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化展示

    大前天我们通过Python网络爬虫对朋友圈的数据进行了抓取,感兴趣的朋友可以点击进行查看,如何利用Python网络爬虫抓取微信朋友圈的动态(上)和如何利用Python网络爬虫爬取微信朋友圈动态——附代 ...

  4. fgrep---指定的输入文件中的匹配模式的行

    fgrep命令是用来搜索 file 参数指定的输入文件(缺省为标准输入)中的匹配模式的行.fgrep 命令特别搜索 Pattern 参数,它们是固定的字符串.如果在 File 参数中指定一个以上的文件 ...

  5. 【Uva 1631】Locker

    [Link]: [Description] 有一个n(n≤1000)位密码锁,每位都是0-9,可以循环旋转.每次可以让1-3个相邻 数字同时往上或者往下转一格.例如,567890->567901 ...

  6. VC、IE、ASP环境下打印、预备的完美解决方式

    一种基于XML的报表开发工具,它支持从设计报表.调用API打印.预览,能支持分布式报表.方便报表的存储.转发. 在报表中能嵌入VBScript,能方便地訪问VB,VC的变量,能訪问COM组件.ADO等 ...

  7. dreamweaver 8的替换功能

    dreamweaver 8的替换功能 下面教你用dreamweaver 8的替换功能来删除这些冗余代码. 查找范围:文件夹(然后选取你需要替换的文件夹) 搜索:源代码查找:\btppabs=" ...

  8. Server.MapPath()的用法

    http://blog.csdn.net/qiuhaifeng_csu/article/details/19416407 Server.MapPath(string path)作用是返回与Web服务器 ...

  9. vue中 v-cloak 的用法

    原文来自:http://www.sunzhongwei.com/hide-vuejs-variable-with-v-cloak-when-page-loading

  10. Kinect 开发 —— 姿势识别

    姿势和手势通常会混淆,但是他们是两个不同的概念.当一个人摆一个姿势时,他会保持身体的位置和样子一段时间.但是手势包含有动作,例如用户通过手势在触摸屏上,放大图片等操作. 通常,游戏者很容易模仿指定姿势 ...