Вопрос по java, ms-word, apache-poi – Java Apache POI читает файл Word (.doc) и использует именованные стили

1

Я пытаюсь прочитать документ Microsoft Word 2003 (.doc), используя poi-scratchpad-3.8 (HWPF). Мне нужно либо прочитать файл слово за словом, либо символ за символом. В любом случае это хорошо для того, что мне нужно. После прочтения символа или слова мне нужно получить имя стиля, которое применяется к слову / символу. Итак, вопрос в том, как мне получить имя стиля, используемого для слова или символа при чтении файла .doc?

РЕДАКТИРОВАТЬ

Я добавляю код, который использовал для этого. Если кто-то хочет попробовать это, удачи.

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());
        }
    }
Привет, ваш отредактированный код работает с моим документом. Но я хотел бы обнаружить выделенный текст. У вас есть идеи, как это сделать? Я много гуглил, но не могне могу найти никакой подсказки. Заранее спасибо ! Seynorth
@Seynorth только начинает изучать этот материал, так что это не поможет ... но есть метод CharacterRun, который называется "getHighlightedColor»... пробовал? mike rodent

Ваш Ответ

1   ответ
2

WordExtractor от Apache Tika, как это'Отличный пример получения текста и стиля из документа Word с использованием Apache POI

На основании того, что ты сделал и не сделалне могу сказать в вашем вопросе, я подозреваю васВы ищете что-то вроде этого:

    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="" 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
       }
    }
</r.numparagraphs();>

Для чего-то более продвинутого, взгляните на исходный код WordExtractor и посмотрите, что еще вы можете сделать с такими вещами!

У меня нетЯ еще не посмотрел исходный код WordExtractor, но я исправляю. Ashaelon
Да. Я только что загрузил его на прошлой или предыдущей неделе (можетне помню). poi-3.8-20120326.jar, poi-scratchpad-3.8-20120326.jar Ashaelon
Спасибо за попытку помочь, Гаграварр. Я не могне могу найти способ связатьCharacterRun к индексу стиля, так как нетgetStyleIndex метод дляCharacterRun, Кроме того, кажется, что-то не так сgetStyleIndex или какой-то основной методParagraph, Кажется, только правильно вернуть несколько стилей »индексы Это второй раз, когда я пытался найти применение HWPF, и это второй раз, когда я не смог получить каких-либо успешных результатов. Я думаю, что я просто собираюсь отказаться от использования Java для чтения документов Word (Aspose.Words слишком дорог для моего использования). Ashaelon
Спасибо за ответ. Пока я ждал ответа, я нашел пример, похожий на этот. Этот код дает стиль только для абзаца, а не для слова или символа. Там также, кажется, проблема (может быть, ошибка?). Если я создаю новый Word Doc с использованием Word 2007 и сохраняю его как Word 97-2003, поставьте "тестовое задание" в качестве единственного текста в документе и изменения стиля на Strong, код говорит мне, что стиль - Normal. Если я изменяю стиль на Quote, он возвращает Quote, но если я изменяю его обратно на Strong, он возвращает Quote. Это происходит для нескольких стилей, и я не уверен, почему. Ashaelon

Похожие вопросы