最近需求是写一个将docx和doc解析后转换为json格式输入到json临时文件中的功能,然后前端读取json文件去渲染做到和文档内容一致,在这里归纳下难点,以及国内网站基本没有相关demo的点。

先说下docx和doc的区别吧,区别实际上就是一个好用而另一个反人类,现在创建一个新的文档,office都不会给你选择,直接默认docx,除非你另存为doc或者直接修改后缀,这样的原因是doc这种二进制存储的玩意过于反人类:
docx文件修改后缀为zip后解压,你可以在这个文件夹里面看到所有文档内容信息,样式,图片之类的,doc的话相同操作你啥都看不到。这样就导致你使用poi解析docx和doc的难易程度完全差得十万八千里。

另外poi用来解析doc的hwpf包也写的很乱,对比poi用来解析docx的xwpf包来说,xwpf包看底层会有方法说明,而且命名方式可以让你就算没有方法说明,大致也很容易看得懂这个方法用来干什么的,但是hwpf包就不一样,一堆枚举,方法也很凌乱,阿帕奇官网对于方法的说明几乎没有,再加上国内使用poi的本来就少,大多直接用阿里的poi-tl之类的,而且用poi解析文档的更是少之又少,大多资料都是解析excel的,少之又少里面大多又是解析docx的,doc的又是又是少之又少。希望自己接下来的一些补充能够在国内论坛里贡献一点资料吧(虽然很冷门,但是希望以后有和我做一样事情的程序员能少走点弯路)

最后因为我应届入职不久,代码可能比较稚嫩,希望能给你带来帮助,轻喷。

docx,doc的解析难点

首先我觉得比较偏门资料比较少的有五个:

一个是解析公式,我所做的需求是将公式转换为latex字符串储存,就是比如将下图这种转换为一个字符串:
x=\frac{-b\pm \sqrt{{b}^{2}-4ac}}{2a}

二是遍历docx文档。单独解析不同的模块,如解析出文档里所有的图片,解析文档中所有表格,解析文档中的所有的文本,这很简单,docx这些方法csdn或者博客园都能找到。但是,这些解析出来的数据结构是没有定位的,你不知道图片与段落之间的关系,表格与段落之间的关系,题注与图片的位置关系。所以你必须要从头到尾去遍历,才能够知道这些之间的位置关系。

三是遍历doc文档,相信我,这个比docx的遍历冷门的多,自己不断尝试的方法摸索出来的,可能还没达到普遍性,但是基本能泛用。

四是将docx和doc文档中的复杂表格转换为html字符串,这个也很冷门,网上资料大多是整个文档全转为html,或者是读取简单地,方方正正,n*m的表格,没有单独处理复杂表格转换为html的的。
主要思路是解析后通过自己写的方法拼接为html,docx的表格转html字符串是在网上找的,poi解析docx用的xwpf包里面对于表格有专门的类读取它的信息,能够得到很完善的表格信息,所以拼接简单,poi解析doc所用的hwpf包解析doc中的表格,没有这些东西,所以很难读取解析复杂表格后拼接为html。这个后面会单独说。

五是编号列表,docx的编号列表网上能找到,但是也很冷门那种,太难找了,而doc的网上根本就没有,方法是靠自己看hwpf底层加上不断测试以及阅读office官网给的一些doc文档信息写出来的。

这里要说一下:docx文档和doc文档实际上是没有存储编号的文本的。

查了下相关资料,说列表段落的编号文本不是硬编码,所以你去文档底层里面是找不到具体的文本内容。xwpf读取docx中列表段落的编号的文本内容是在csdn上找到的,而doc是自己摸索加上office官方给的文档结合推导出来的方法,但是方式都是大同小异,都不是通过poi直接读出来的,而是通过poi获取相关信息,然后在方法里面匹配后进行拼接,从而获取对应的列表段落的编号文本内容,类似于下列图中所示的编号内容:如1. 1) a) 等。


这些都是比较冷门的读取,至少我在做的时候很多都找不到,stack over flow上去询问也很多都没解决,有的是靠自己测试得出的结果。

有时间会将代码上传github并且分享相关jar包,jar包的功能是给要解析的docx文件路径或doc文件路径,以及输出临时文件位置(本来是只要给文件路径,自动生成一个temp文件夹在jar包相同的目录下,然后在temp文件夹下生成相应的解析后的json临时文件,但是老大不让这么做),生成的json文件是顺序从头到尾的,前端解析后渲染就可以复原这个文档内容,文本样式什么都有。

POI解析docx与doc文档中的难点归纳相关推荐

  1. 【Python】导出docx格式Word文档中的文本、图片和附件等

    [Python]导出docx格式Word文档中的文本.图片和附件等 零.需求 为批量批改学生在机房提交的实验报告,我需要对所有的实验文档内容进行处理.需要批量提取Word文档中的图片和附件以便进一步检 ...

  2. Python批量提取docx格式Word文档中所有批注

    封面图片:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社 图书详情: 用书教师可以联系董老师获取教学大纲.课件.源码.教案.考试系统等配 ...

  3. 利用POI操作不同版本号word文档中的图片以及创建word文档

    我们都知道要想利用java对office操作最经常使用的技术就应该是POI了,在这里本人就不多说到底POI是什么和怎么用了. 先说本人遇到的问题,不同于利用POI去向word文档以及excel文档去写 ...

  4. 批量提取word doc文档中的表格

    doc文档无法通过docx包读取,需转换为docx. docx格式的文件本质上是一个ZIP文件. 如果将后缀改为zip就能看清内部结构. docx提取word中的表格非常方便. 这段代码还可以提取do ...

  5. Python批量提取docx格式Word文档中所有文本框内的文本

    功能描述: 批量提取指定Word文档(docx格式)中所有文本框中的文本. 测试文件: 参考代码: 执行结果:

  6. 快速得到Word2007的Docx或Docm文档中的图片

    Word2007 的文档格式与 Word97~2003 的二进制文档格式有根本的不同.Office 2007 的推出,全面启用了 OPENXML 概念.Word.Excel.PowerPoint 文档 ...

  7. 快速得到 Word2007 的 Docx 或 Docm 文档中的图片

    Word2007 的文档格式与 Word97~2003 的二进制文档格式有根本的不同.Office 2007 的推出,全面启用了 OPENXML 概念.Word.Excel.PowerPoint 文档 ...

  8. python docx处理word文档中表格合并问题

    问题描述 python中用docx库读取word文件,若word文件中包含合并的表格表格 则通过docx读取显示: file = docx.Document(path) for table in fi ...

  9. Word处理控件Aspose.Words功能演示:用Java从Word文档中提取文本

    Aspose.Words For .NET是一种高级Word文档处理API,用于执行各种文档管理和操作任务.API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsof ...

  10. Word处理控件Aspose.Words功能演示:在 C# 中从 Word 文档中提取文本

    从 Word 文档中提取文本通常在不同的场景中执行.例如,分析文本,提取文档的特定部分并将它们组合成单个文档,等等.在本文中,您将学习如何使用 C# 以编程方式从 Word 文档中提取文本.此外,我们 ...

最新文章

  1. SQL Server故障排除圣经
  2. 【机器学习】解决中小微企业的信贷决策问题(一)
  3. Web Service属性介绍
  4. asp前端日历_asp显示日历效果
  5. Android MediaPlayer
  6. 【效率】程序员救星,又一 VS Code 插件神器面世!
  7. 设置Netbeans 6.5为英文界面
  8. 《零基础》MySQL 超级入门教程
  9. Android如果对APK进行加密,提高反编译难度(思路)
  10. 阿里云如何二次驱动云计算
  11. json日期格式问题的办法
  12. David Pozar 微波工程读书笔记(一)
  13. 北京林业大学计算机辅助设计,计算机辅助风景园林规划设计策略研究
  14. SQLMap常用命令介绍
  15. Ubuntu 18.04 网口创建网络共享
  16. Matlab 多项式曲线拟合polyfit
  17. MySQL - 21查询分析器EXPLAIN
  18. 4.murmur连接超时
  19. live.cn邮箱注册帐号方法
  20. Redis分片算法☞MurmurHash

热门文章

  1. 【谷歌地图--PlacesSDK集成】
  2. 公众号七种有效的引流方式
  3. linux drupal 7安装教程,drupal7|drupal 7(建站开发工具)下载附安装教程 - 欧普软件下载...
  4. 常用各种网络模块总结
  5. java short 无符号_有符号/无符号的int,short和char
  6. Java Static关键字详解
  7. QQ游戏-大家来找茬 外挂
  8. Dynamsoft Barcode Reader Crack,强大而快速的条码解码
  9. excel-LOOKUP函数多条件查找
  10. 文件下载触发的DDE注入