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

Java Apache POI读取Word(.doc)文件并获得使用的命名样式

昌博易
2023-03-14

我正在添加我用来尝试这样做的代码。如果有人想尝试这样做,祝你好运。

private void processDoc(String path) throws Exception {
    System.out.println(path);
    POIFSFileSystem fis = new POIFSFileSystem(new FileInputStream(path));
    HWPFDocument wdDoc = new HWPFDocument(fis);

    // list all style names and indexes in stylesheet
    for (int j = 0; j < wdDoc.getStyleSheet().numStyles(); j++) {
        if (wdDoc.getStyleSheet().getStyleDescription(j) != null) {
            System.out.println(j + ": " + wdDoc.getStyleSheet().getStyleDescription(j).getName());
        } else {
            // getStyleDescription returned null
            System.out.println(j + ": " + null);
        }
    }

    // set range for entire document
    Range range = wdDoc.getRange();

    // loop through all paragraphs in range
    for (int i = 0; i < range.numParagraphs(); i++) {
        Paragraph p = range.getParagraph(i);

        // check if style index is greater than total number of styles
        if (wdDoc.getStyleSheet().numStyles() > p.getStyleIndex()) {
            System.out.println(wdDoc.getStyleSheet().numStyles() + " -> " + p.getStyleIndex());
            StyleDescription style = wdDoc.getStyleSheet().getStyleDescription(p.getStyleIndex());
            String styleName = style.getName();
            // write style name and associated text
            System.out.println(styleName + " -> " + p.text());
        } else {
            System.out.println("\n" + wdDoc.getStyleSheet().numStyles() + " ----> " + p.getStyleIndex());
        }
    }

共有1个答案

濮阳立果
2023-03-14

我建议您看看来自Apache Tika的sourcecode to WordExtractor,因为它是使用Apache POI从Word文档获取文本和样式的一个很好的示例

根据你在问题中做了什么和没说什么,我怀疑你在寻找类似的东西:

    Range r = document.getRange();
    for(int i=0; i<r.numParagraphs(); i++) {
       Paragraph p = r.getParagraph(i);
       String text = p.getText();
       if( ! text.contains("What I'm Looking For")) {
          // Try the next paragraph
          continue;
       }

       if (document.getStyleSheet().numStyles()>p.getStyleIndex()) {
          StyleDescription style =
               document.getStyleSheet().getStyleDescription(p.getStyleIndex());
          String styleName = style.getName();
          System.out.println(styleName + " -> " + text);
       }
       else {
          // Text has an unknown or invalid style
       }
    }

对于任何更高级的东西,请查看WordExtractor sourcecode,看看您还可以用这种东西做什么!

 类似资料:
  • 从这里开始: Java Apache POI读取Word(.doc)文件并使用命名样式 当时(2012年10月),有一种解决方案可以找到段落样式,但不能找到字符样式。 然而...例如,如果你使用LibreOffice Writer打开一个Word文档,它确实会将样式和突出显示从. doc翻译成. odt...所以某个地方的某人似乎已经破解了这个... 我不知道ApachePOI团队和LibreOf

  • 我正在编写一个java代码,它利用Apache-poi读取ms-office.doc文件,利用itext jar API创建并写入pdf文件。我已经阅读了.doc文件中打印的文本和表格。现在我正在寻找一个读取文档中写入的图像的解决方案。我已经编写了如下代码来读取文档文件中的图像。为什么这段代码不起作用。 存在的问题是:1。条件if(Picture.HasPicture(run))不满足,但文档具有

  • 问题内容: 请问如何通过cucumber读取excel、word、pdf文件? 问题答案: 反对法的f

  • 问题内容: 使用Apache POI时,我(以编程方式)从MS Word文件获取的字符串与使用MS Word打开文件时看到的文本不同。 使用以下代码时: 输出是一行,其中包含许多“无效”字符(是,“框”)和许多不需要的字符串,例如“ ”,“ ”(“#”为数字),“ ”等。 以下代码“修复”了单行问题,但保留了所有无效字符和不需要的文本: 我不知道我是否使用错误的方法来提取文本,但这就是我在查看PO

  • 您不需要理解内容,只需查看我的占位符和。有10页与这些占位符,现在我应该取代他们与其他内容。黑色和黄色的盒子是公司的照片,我不会分享。 现在,我开始阅读整个docx4j文档,并在一段时间后生成以下代码: 一些解释: 是上图中文件的路径 是应该替换的值 是应该替换的值 但是当我运行这个方法时,什么也没有发生,我的控制台只是打印一些信息。如果它们很重要,我会编辑帖子,但我不这么认为。 那么我的错在哪里

  • 我使用Apache POI从MS word文件(.doc)生成Html。我想添加来自的图像。文档转换为html,但我无法做到这一点。我找到了解决方案。docx和给定方法如下。docx。 没有太多的留档或教程可用。Javadoc也不包含太多有用的信息。根据上面的代码,我尝试添加图像,但不起作用。:/