Невозможно получить ярлык гиперссылки для файла .docx с помощью Apache POI - PullRequest
0 голосов
/ 08 июня 2018

Моя цель - подсчитать, сколько раз гиперссылка типа docs.google.com появляется в документе MS Word (.docx).

В дополнение к подсчету гиперссылки я также пытаюсьсчитать "простой текст", который содержит "docs.google.com" в нем.

Например, рассмотрим документ Word, который имеет следующий текст:

https://docs.google.com/1234

https://docs.google.com/1235
Ссылка на документ

Согласно моей желаемой логике, общее количество ссылок должно быть 1 + 2 + 1 = 4. Второе - 2, потому что отображаемое значение - документ Google.ссылка, а также целевой URL-адрес - это ссылка на документ Google.

У меня возникают проблемы с отображением значений для ссылок типа "обычный текст" в моем коде 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 фиксирует вхождения целевых значений гиперссылки.

Может кто-нибудь подсказать, как можно точно рассчитать эти два типа значений?

...