当前位置: 首页 > 知识库问答 >
问题:

使用apache-poi从doc和docx文件中提取标题和段落

司空宣
2023-03-14

我试图通过ApachePOI阅读Microsoft word文档,发现提供了两种方便的方法来扫描文档,如getText()、getParagraphList()等。。但我的用例略有不同,我们希望扫描任何文档的方式是,它应该按照文档中出现的相同顺序为我们提供事件/信息,如标题、段落、表格。它将帮助我准备一个文档结构,比如,

    <content>

    <section>

         <heading> ABC </heading>

         <paragraph>xyz </paragraph>

        <paragraph>scanning through APIs</paragraph>        

    <section>
    .
    .
    .

    </content>

其主要目的是保持标题和段落之间的关系,如原始文件所示。不确定,但像这样的东西对我有用吗,

    Iterator<IBodyElement> itr = doc.getBodyElementsIterator();

        while(itr.hasNext()) {

          IBodyElement ele = itr.next();

          System.out.println(ele.getElementType());

        }

我能够得到段落列表,但没有标题信息使用此代码。只需提及,我对所有标题都感兴趣,它们可以通过使用样式或大字体显式标记为标题。

共有1个答案

端木令雪
2023-03-14

标题不内联存储在主文档中,它们位于其他位置,这就是为什么不将它们作为主体元素。主体元素是类似于节、段落和表的东西,而不是标题,因此您必须自己获取它们。

如果您在Apache Tika中查看这段代码,您将看到一个如何执行的示例。假设您正在迭代body元素,并且想要段落的页眉/页脚,您将需要这样的代码(基于Tika代码):

for(IBodyElement element : bodyElement.getBodyElements()) {
    if(element instanceof XWPFParagraph) {
         XWPFParagraph paragraph = (XWPFParagraph)element;
         XWPFHeaderFooterPolicy headerFooterPolicy = null;

         if (paragraph.getCTP().getPPr() != null) {
            CTSectPr ctSectPr = paragraph.getCTP().getPPr().getSectPr();
            if(ctSectPr != null) {
               headerFooterPolicy = new XWPFHeaderFooterPolicy(document, ctSectPr);
               // Handle Header
            }
         }
         // Handle paragraph
         if (headerFooterPolicy != null) {
            // Handle footer
         }
    }
    if(element instanceof XWPFTable) {
         XWPFTable table = (XWPFTable)element;
         // Handle table
    }
    if (element instanceof XWPFSDT){
        XWPFSDT sdt = (XWPFSDT) element;
        // Handle SDT
    }
}
 类似资料:
  • 正如您在word文档中看到的,有许多带有要点的问题。现在,我正在尝试使用apache POI从文件中提取每个段落。这是我当前的代码 上述方法的问题在于它打印的是每一行而不是段落。此外,项目符号也从提取的字符串中删除。返回一个纯字符串。 谁能解释一下我做错了什么。也请建议如果你有一个更好的想法来解决它。

  • 示例单词内容为 Apache POI提供了API来给出段落和表的列表,但我无法阅读段落(测试用例)并立即查找该段落后面的表。 我尝试使用XWPFWordExtractor(读取所有文本)、bodyElementIterator(遍历所有主体元素),但大多数都给出了方法,该方法给出了段落列表和方法,该方法给出了文档中的所有表的列表。 我如何浏览所有段落,停在标题‘测试用例’之后的段落(第4段),然后

  • 问题内容: 我知道那里也有类似的问题,但是我找不到能回答我的祷告的东西。我需要的是一种从MS-Word文件访问某些数据并将其保存在XML文件中的方法。在python- docx 上阅读无济于事,因为它似乎只允许一个人写入Word文档,而不是阅读。要准确呈现我的任务(或我选择如何执行任务的方式):我想在文档中搜索关键字或短语(文档包含表格),并从关键字/短语所在的表格中提取文本数据找到了。有人有什么

  • 我正在使用poi从docx文件中提取内容,在处理一个文件时,所有图片都丢失了,我检查了这个文件的格式,发现结构异常: 段落元素位于run元素内。我称之为嵌入段落,但我找不到使用poi解析嵌入段落的方法。我如何处理这些数据?

  • 问题内容: 在某些情况下,我们可能需要从Word文档中获取文本以供将来在用户上传的文档中搜索字符串,例如在cv / resumes中进行搜索,并出现一个常见的问题,即如何获取文本,打开并阅读用户上载Word文档时,有一些有用的链接,但不能解决整个问题。我们需要在上载时获取文本并将文本保存在数据库中,以便在数据库中轻松搜索。 问题答案: class DocxConversion{ private $