最近在做读npoi文档存入搜索引擎,实现快速查询word文档中内容并展示,效果希望带有目录导航。

  网上有很多例子都是读写操作,很肤浅没有具体读到想要的东西所以自己就写了个demo,也有微软提供的office,需要装一致的版本,而且必须装,直接忽略。

  尝试了两种方案:1、使用npoi

          2、使用Spire.Doc

  先介绍一下Spire.Doc,这个是收费版本的,网上也有很多破解版,也实现了基本要的要过,不过取目录有点问题,做各种处理,做的太繁琐就没继续,先上一个效果图:

                  

  看起来效果还不错,不过需要付费的,不付费有水印,被我用技术手段给去掉了,大概提示“Evaluation Warning: The document was created with Spire.Doc for .NET.”。目录没办法读出来。速度还挺快不能打满分。核心代码如下:

using Spire.Doc; 引用

Spire.Doc.Document document = new Spire.Doc.Document();
document.LoadFromFile(path);
document.SaveToFile("D:\\1法规\\02中华人民共和国会计法2017修订版.txt", FileFormat.Html);//FileFormat支持转换很多想了解的可以看看(word、html、txt、xml、pdf、jpg等格式很多)
string upStr = File.ReadAllText("D:\\1法规\\02中华人民共和国会计法2017修订版.txt", Encoding.UTF8);

  xml应该可以读到目录,最后没尝试,接下来用npoi读word内容加目录。

  这个是纯文字,没有任何样式读取

        

核心代码

XWPFDocument document = null;

using (FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
document = new XWPFDocument(file);
}

StringBuilder sbFileText = new StringBuilder();

foreach (XWPFParagraph paragraph in document.Paragraphs)
{
sbFileText.AppendLine(paragraph.ParagraphText);

}

  npoi转成html示例图

  看起来还不错,不花钱的东西有这样很知足了,功能还不是很全呀,目录还没出现,嗯继续搞

          

看npoi给的示例根本没有呀,咋办哦难搞

最后一个属性一个属性的看,找了一下有没有自己想要的,发现大陆

npoi提供  protected List<XWPFSDT> contentControls;

这个主要记录目录,非常完美了nice

这个调用是被受保护的,没办法直接调用做个反射读出来就可以啦

目录+纯内容+body H实现了,接下来怎么操作

直接存库,存搜索引擎------------前台的问题来了,目录怎么匹配具体到哪一行呀,我给的方案是点目录跳转直接全字搜索到匹配的跳过去高亮就行。目前还没有更好的方案,接下来可以参考word里面目录链接进行反编,word里面href大概是#_Toc54704623,就是对应到具体的行,目前没有破译出来,搞出来慢慢跟你们分享。

不知道怎么实现的可以留言发demo参考;

  

.net npoi读word内容+目录的更多相关文章

  1. 使用NPOI读取Word文档内容并进行修改

    前言 网上使用NPOI读取Word文件的例子现在也不少,本文就是参考网上大神们的例子进行修改以适应自己需求的. 参考博文 http://www.cnblogs.com/mahongbiao/p/376 ...

  2. OpenXml读取word内容(三)

    内容和表格内容一起读: word内容: 代码: public static void ReadWordByOpenXml(string path) { using (WordprocessingDoc ...

  3. NPOI处理Word文本中段落编号

    NPOI的XWPFParagraph对象中,是无法直接读取段落编号的,然而可以读取的是编号的样式名称(GetNumFmt),编号分组ID(GetNumID),编号样式(NumLevelText)等.具 ...

  4. 根据python上下文管理,写一个在读文件内容前后自动打开关闭文件的程序

    利用上下文管理实现读f文件前后自动打开关闭文件#在本目录创建f文件,内容写monkey代码如下 import contextlib #导入模块1 @contextlib.contextmanager# ...

  5. c#读取word内容,c#提取word内容

    Post by 54admin, 2009-5-8, Views:575 1: 对项目添加引用,Microsoft Word 11.0 Object Library 2: 在程序中添加 using W ...

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

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

  7. 利用NPOI导出Word文档帮助类

    /// <summary> /// NPOI操作Word /// </summary> public class NpoiWordHelper { /// <summar ...

  8. 使用FreePic2Pdf导出书签至Word建立层级目录——快速初始化Word笔记本目录

    使用FreePic2Pdf导出书签至Word建立层级目录 --快速初始化Word笔记本目录 文:安徽师范大学2014级计算机科学与技术 王昊 (Get Contact:441301158@qq.com ...

  9. java读取word内容

    暂时只写读取word内容的方法. 依赖的jar: poi-3.9-20121203.jarpoi-ooxml-3.9-20121203.jarxmlbeans-2.3.0.jar package co ...

随机推荐

  1. Tomcat 中 catalina.out、catalina.log、localhost.log 和 access_log 的区别

    打开 Tomcat 安装目录中的 log 文件夹,我们可以看到很多日志文件,这篇文章就来介绍下这些日记文件的具体区别. catalina.out 日志 catalina.out 日志文件是 Tomca ...

  2. java安全编码指南之:死锁dead lock

    目录 简介 不同的加锁顺序 使用private类变量 使用相同的Order 释放掉已占有的锁 简介 java中为了保证共享数据的安全性,我们引入了锁的机制.有了锁就有可能产生死锁. 死锁的原因就是多个 ...

  3. 决策树防止过拟合(预剪枝(Pre-Pruning))

    预剪枝(Pre-Pruning):预剪枝就是在构造决策树的过程中,先对每个结点在划分前进行估计,若果当前结点的划分不能带来决策树模型泛华性能的提升,则不对当前结点进行划分并且将当前结点标记为叶结点.

  4. 题解【[USACO18FEB]New Barns 】

    浅谈一下对于这题做完之后的感受(不看题解也是敲不出来啊qwq--) 题意翻译 Farmer John注意到他的奶牛们如果被关得太紧就容易吵架,所以他想开放一些新的牛棚来分散她们. 每当FJ建造一个新牛 ...

  5. RHSA-2018:3032-低危: binutils 安全和BUG修复更新

    [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...

  6. 如何获取value值,获取属性值,设置属性值,

    1.获取select下拉框的value值,   2.获取select  的tid值 3.设置属性值  4.判断哪个单选框选中了 prop好像是判断的意思吧,个人理解勿喷谢谢!!!!!!

  7. kubernetes-介绍与特性

    1. kubernetes概述 1) kubernetes是什么 2) kubernetes能做什么 3) kubernetes特性 4) kubernetes集群架构与组件 5) kubernete ...

  8. Angular8 ie兼容性解决

    启用腻子脚本 polyfills.ts /* IE9, IE10 and IE11 requires all of the following polyfills. */ import 'core-j ...

  9. 前端传递的json格式与SpringMVC接收实体类的对应关系

    这篇文章主要是帮助刚刚入行的猿猿尽快适应Restful风格的搬砖生活 @RequestBody注解 基本介绍:@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数 ...

  10. Elasticsearch(4):映射

      ES中的映射(mapping)是用于定义索引中文档以及文档中的字段如何被存储和索引(动词)的一种机制,例如,通过映射我们可以进行如下的这些定义: 索引文档中,哪些字符型字段应该被当做全文本类型: ...