无法使用Apache POI获取.docx文件的超链接标签

时间:2018-06-08 20:09:23

标签: java apache-poi openxml docx

我的目标是计算docs.google.com类型的超链接在MS Word文档(.docx)中的显示次数。

除了计算超链接外,我还试图计算"纯文本"其中包含" docs.google.com"在它。

例如,考虑一个包含以下文字的word文档:

https://docs.google.com/1234

https://docs.google.com/1235
Link to doc

根据我想要的逻辑,链接总数应为1 + 2 + 1 = 4。 第二个是2,因为显示值是google doc链接,目标URL是google doc链接。

我无法获取"纯文本"的显示值。我的Java代码中的链接类型:

int[] getNumGDocLinksFromWord(String filepath) {

    int [] numLinks = {0, 0};
    File file = new File(filepath);

    try (FileInputStream fis = new FileInputStream(file.getAbsolutePath())) {
      XWPFDocument document = new XWPFDocument(fis);
      List<XWPFParagraph> paragraphs = document.getParagraphs();
      for (XWPFParagraph para : paragraphs) {
        numLinks[0] += numOccurrences(para.getText(), GOOG_DOC_URL_HOST);
        for(XWPFRun run : para.getRuns()) {
          if(run instanceof XWPFHyperlinkRun) {
            XWPFHyperlink link = ((XWPFHyperlinkRun)run).getHyperlink(document);
            if(link != null && link.getURL().contains(GOOG_DOC_URL_HOST)) {
              numLinks[1]++;
            }
          }
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    return numLinks;
}


private int numOccurrences(String text, String sequence) {
    int n = 0, i = 0;
    while (i != -1) {
      i = text.indexOf(sequence, i + 1);
      if (i != -1) {
        n++;
      }
    }
    return n;
}

numLinks [0]捕获显示值的出现次数,numLinks 1捕获超链接的目标值出现次数。

有人可以告诉我如何准确计算这两种类型的值?

0 个答案:

没有答案