最近由于工作需要,调研了一下关于poi获取word字体信息方面的方法,在这里mark一下。

首先word格式分为doc和docx,分别利用HWPFDocument和XWPFDocument对文档进行解析,话不多说,直接贴代码:

  • 解析doc格式
 1 import java.io.FileInputStream;
 2 import java.io.IOException;
 3
 4 import org.apache.poi.hwpf.HWPFDocument;
 5 import org.apache.poi.hwpf.usermodel.CharacterRun;
 6 import org.apache.poi.hwpf.usermodel.Paragraph;
 7 import org.apache.poi.hwpf.usermodel.Range;
 8 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 9
10 public class fontTest {
11     public static void main(String[] args) throws IOException {
12         String filePath = "***.doc";
13         POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(filePath));
14         HWPFDocument document = new HWPFDocument(fs);
15         Range head = document.getHeaderStoryRange();
16         for(int i = 0;i<head.numCharacterRuns();i++){
17             System.out.println(head.getCharacterRun(i).text());
18         }
19         System.out.println("===============================================");
20         Range range = document.getRange();
21         for (int i = 0; i < range.numParagraphs(); i++) {
22             Paragraph para = range.getParagraph(i);// 获取第i段
23             int count = 0;
24             while (true) {
25                 CharacterRun run = para.getCharacterRun(count);// 此characterrun并非一个字符,而是一类字符,例如“数据挖掘”,前两个字为加粗,后两个字不加粗,那么“数据”                                        和“挖掘”会存在两个characterrun中
26                 System.out.println("color ------" + run.getColor());// 字体颜色
27                 System.out.println("font name---" + run.getFontName());// 字体类型
28                 System.out.println("font size---" + run.getFontSize());// 字体大小
29                 System.out.println("text -------" + run.text());// 文本信息
30                 System.out.println("bold -------" + run.isBold());// 是否加粗
31                 System.out.println("italic -----" + run.isItalic());// 是否斜体字
32                 System.out.println("algnment ---" + para.getJustification());//对齐方式,0为左对齐,1为居中,2为右对齐,3为左右对齐
33                 count++;
34                 System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
35                 if (run.getEndOffset() == para.getEndOffset()) {//到达段落末尾
36                     break;
37                 }
38             }
39             System.out.println("--------------分段--------------");
40         }
41     }
42 }

  • 解析docx格式
 1 package baidu;
 2
 3 import java.io.FileInputStream;
 4 import java.io.InputStream;
 5 import java.util.List;
 6
 7 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 8 import org.apache.poi.xwpf.usermodel.XWPFHeader;
 9 import org.apache.poi.xwpf.usermodel.XWPFParagraph;
10 import org.apache.poi.xwpf.usermodel.XWPFRun;
11
12 public class fontdocx {
13     public static void main(String[] args) throws Exception {
14         String filePath = "***.docx";
15         InputStream istream = new FileInputStream(filePath);
16         XWPFDocument docx = new XWPFDocument(istream);
17         // 获取页眉内容
18         List<XWPFHeader> list = docx.getHeaderList();
19         for (XWPFHeader head : list) {
20             List<XWPFParagraph> paralist = head.getParagraphs();
21             for (XWPFParagraph para : paralist) {
22                 System.out.println(para.getText());
23             }
24             // System.out.println(head.getText());
25         }
26         List<XWPFParagraph> paraGraph = docx.getParagraphs();
27         for (XWPFParagraph para : paraGraph) {
28             List<XWPFRun> run_array = para.getRuns();
29             for (int i = 0; i < run_array.size(); i++) {
30                 System.out.println("alignment --"
31                         + para.getAlignment().toString());// 对齐方式
32                 System.out
33                         .println("text -------" + run_array.get(i).getText(0));// 文本内容
34                 System.out.println("font name --"
35                         + run_array.get(i).getFontFamily());// 字体类型
36                 System.out
37                         .println("color ------" + run_array.get(i).getColor());// 字体颜色
38                 System.out.println("font size --"
39                         + run_array.get(i).getFontSize());// 字体大小
40             }
41         }
42     }
43 }

对于抽取内容的准确度,未经过格式转换文本的准确度还是可以接受的。

在这里介绍的抽取内容比较少,欢迎大家补充!

转载于:https://www.cnblogs.com/MaNog/p/3638106.html

POI获取WORD信息相关推荐

  1. POI 获取Word大纲级别,操作Word(2018-06-03更新)

    之前的代码有误,为了避免误人子弟,2018-06-03更新. Word中的大纲级别,可以通过getPPr().getOutlineLvl()直接提取,但需要注意,Word中段落级别,通过如下三种方式定 ...

  2. java poi获取word文档自动生成的序号

    POI不能获取word自动生成的序号,但是可以自己根据级别自己写出来. maven <dependency><groupId>org.apache.poi</groupI ...

  3. POI 获取Word大纲

    此文参考了前人文章,链接如下 https://blog.csdn.net/lk1233691/article/details/75268200 但前辈由于持续探索与更新,没有给出一份完整代码, 且其最 ...

  4. java读取word表格中的数据_JAVA获取word表格中数据的方案

    上一个项目的开发中需要实现从word中读取表格数据的功能,在JAVA社区搜索了很多资料,终于找到了两个相对最佳的方案,因为也得到了不少网友们的帮助,所以不敢独自享用,在此做一个分享. 两个方案分别是: ...

  5. Java POI 读取word文件

    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 1.读取word 2003及word 2007需要 ...

  6. 利用python获取word图表数据和修改图表信息

    利用python获取word图表数据和修改图表信息 起因咸鱼有个人问word怎么修改图表信息,想用docx库找不到关于图表的方法,这里用了Win32com. import time import wi ...

  7. C# 获取word批注信息

    今天在Silverlight 应用程序中实现了 获取word文档批注信息 的功能. 在wcf服务继承接口类中编写的函数如下 [c-sharp] view plaincopy /// <summa ...

  8. Java 使用 POI 为 word 添加页眉 获取页眉

    在百度上和goole都没找到我想要的东西,看了他的接口注释他的官方文档之后才得到了这个解决方案 // POI方案为word添加页眉public static void main(String[] ar ...

  9. [原创]java获取word里面的文本

    需求场景 开发的web办公系统如果需要处理大量的Word文档(比如有成千上万个文档),用户一定提出查找包含某些关键字的文档的需求,这就要求能够读取 word 中的文字内容,而忽略其中的文字样式.表格. ...

最新文章

  1. FFmpeg4.1 视频解码,保存原始YUV数据
  2. 20145236《信息安全系统设计基础》第0周学习总结
  3. 网页 JavaScript的DOM操作
  4. iPhone开发【一】从HelloWorld開始
  5. android webview js 失效,Android WebView注入JQuery、JS脚本及执行无效的问题解决
  6. Linux下安装jdk8步骤详述
  7. 新一代数据中心不可忽视DAC高速铜缆直连线应用
  8. 2020 年 7 个软件开发趋势
  9. Eclipse导出可执行JAR文件的方法
  10. redis 3.0 java 工具包_redis分布式锁工具包,提供纯Java方式调用
  11. ORACLE常用函数汇总【转】
  12. Ubuntu 中如何使用 PPA 安装应用程序
  13. (专题一)05 矩阵元素的引用方式
  14. An Objective-C Error
  15. 高校图书馆管理系统 php 漏洞,江苏汇文Libsys图书馆管理系统几处通用SQL注入漏洞...
  16. js上传文件到OSS
  17. 恢复数据的原理和方法
  18. 阿里大文娱管理层调整?回应:分工去年宣布 不是新闻
  19. 又一大动作,海致BDP似卷收购风波
  20. 用python写字动画_Duang!用Python来实现唱歌、跳舞、写字、画画?无所不能的pyt

热门文章

  1. Vue 2.0 入门系列(15)学习 Vue.js 需要掌握的 es6 (2)
  2. typescript主键自增长
  3. 利用 %20 替换 空格
  4. ASP.NET中禁止继承IIS中web.config根目录的配置
  5. java实现原数组根据下标分隔成两个子数组并且在原数组中交换两个子数组的位置...
  6. 用Maven管理JavaScript资源
  7. ImagesSprite V1.1.1 Beta发布
  8. 手动安装boost库
  9. linux上很方便的上传下载文件工具rz和sz
  10. pythonsqlite3模糊_Python编写通讯录通过数据库存储实现模糊查询功能