Как определить, что экземпляр org.apache.poi.hwpf.model.ListData принадлежит нумерованному или маркированному списку? - PullRequest
0 голосов
/ 15 декабря 2009

Есть ли способ определить, принадлежит ли экземпляр org.apache.poi.hwpf.model.ListData к нумерованному списку или маркированному списку?

Я использую класс Apache Poi org.apache.poi.hwpf.HWPFDocument для чтения содержимого текстового документа для генерации HTML. Я могу определить элементы списка в документе, проверив, что параграф, с которым я работаю, является экземпляром org.apache.poi.hwpf.model.ListData. Я не могу найти способ определить, принадлежит ли ListData маркированному списку или нумерованному списку.

Ответы [ 3 ]

0 голосов
/ 05 марта 2010

Недавно я опубликовал другой способ определения типа списка. К сожалению, этот способ работал только для нескольких тестов.

Теперь я могу подтвердить легигорский способ определения типа списка.

0 голосов
/ 19 мая 2010
public class ListTest {

public static void main(String[] args) {

    String filename = "/some/path/to/ListTest.doc";

    try {

        POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(filename));
        HWPFDocument doc = new HWPFDocument(fs);
        //Get a table of all the lists in this document
        ListTables listtables = doc.getListTables();
        Paragraph para;

        Range range = doc.getRange();
        for(int x=0; x<range.numParagraphs(); x++) {
            para = range.getParagraph(x);

           //When non-zero, (1-based) index into the pllfo
           //identifying the list to which the paragraph belongs
           if( para.getIlfo()!=0 ) {
                //Get the list this paragraph belongs to
                ListData listdata = listtables.getListData(para.getIlfo());
                //Now get all the levels for this list
                ListLevel[] listlevel = listdata.getLevels();
                //Find the list level info for our paragraph
                ListLevel level = listlevel[para.getIlvl()];
                System.out.print("Text: \"" + para.text() + "\"");
                //list level for this paragraph
                System.out.print("\tListLevel: " + para.getIlvl());
                //Additional text associated with list symbols
                System.out.print("\tgetNumberText: \"" + level.getNumberText() + "\"" );
                //Format value for the style of list symbols
                System.out.println("\tgetNumberFormat: " + level.getNumberFormat() );
            } else {
                System.out.println();
            }
        }
    } catch(Exception e) {
        e.printStackTrace();
    }
 }
}

Значение NFC Схема нумерации

15 Однобайтовый символ

16 Кандзи, нумерация 3 (dbnum3).

17 Кандзи, нумерация 4 (dbnum4).

18 Нумерация окружностей (кружочница).

19 Двухбайтовая арабская нумерация

20 46 фонетических двухбайтовых символов катакана ( aiueo dbchar).

21 46 фонетических двухбайтовых символов катакана ( ироха дБчар).

22 арабский с начальным нулем (01, 02, 03, ..., 10, 11)

23 Пуля (вообще без номера)

24 Корейская нумерация 2 (ганада).

25 Корейская нумерация 1 (чосунг).

26 Китайская нумерация 1 (gb1).

27 Китайская нумерация 2 (gb2).

28 Китайская нумерация 3 (gb3).

29 Китайская нумерация 4 (gb4).

30 Китайская зодиакальная нумерация 1

31 китайская зодиакальная нумерация 2

32 Китайская зодиакальная нумерация 3

33 Тайваньская двухбайтовая нумерация 1

34 Тайваньская двухбайтовая нумерация 2

35 Тайваньская двухбайтовая нумерация 3

36 Тайваньская двухбайтовая нумерация 4

37 Китайская двухбайтовая нумерация 1

38 Китайская двухбайтовая нумерация 2

39 Китайская двухбайтовая нумерация 3

40 Китайская двухбайтовая нумерация 4

41 корейская двухбайтовая нумерация 1

42 двухбайтовая корейская нумерация 2

43 корейская двухбайтовая нумерация 3

44 корейская двухбайтовая нумерация 4

45 иврит нестандартный десятичный

46 Арабский Алиф Ба Тах

47 Еврейский библейский стандарт

48 Арабский стиль Абджад

49 гласных хинди

50 согласных хинди

51 хинди

52 Описательный хинди (кардиналы)

53 тайских письма

54 тайских номера

55 тайский описательный (кардиналы

56 Вьетнамский дескриптив (кардиналы)

57 Формат номера страницы - # -

58 строчные буквы русского алфавита

0 голосов
/ 16 декабря 2009

Я думаю, что нашел ответ на свой вопрос.

ListEntry aListEntry = (ListEntry) aParagraph;
ListData listData = listTables.getListData(aListEntry.getIlfo());
int numberFormat = listData.getLevel(listData.numLevels()).getNumberFormat();

Числовой формат возвращает 23 для маркеров и 0 для нумерованных списков. Смею сказать, что существует несколько форматных чисел, которые можно интерпретировать как маркеры или нумерованные списки, но по крайней мере теперь я могу их идентифицировать!

...