如何确定org.apache.poi.hwpf.model.ListData的实例属于编号列表或项目符号列表?

时间:2009-12-15 16:00:13

标签: java apache-poi

有没有办法确定org.apache.poi.hwpf.model.ListData的实例是否属于编号列表或项目符号列表?

我正在使用Apache Poi的org.apache.poi.hwpf.HWPFDocument类来读取word文档的内容以生成HTML。我可以通过检查我正在使用的段落是org.apache.poi.hwpf.model.ListData的实例来识别文档中的列表项。我找不到确定ListData是否属于项目符号列表或编号列表的方法。

3 个答案:

答案 0 :(得分:0)

我想我找到了自己问题的答案。

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

数字格式为子弹点返回23,为编号列表返回0。我敢说有多个格式编号可以解释为子弹点或编号列表,但至少我现在可以识别它们了!

答案 1 :(得分:0)

我最近发布了另一种确定列表类型的方法。不幸的是,这种方式仅适用于一些测试。

我现在可以确认leighgorys的方式来确定列表类型。

答案 2 :(得分:0)

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 value编号方案

15个单字节字符

16汉字编号3(dbnum3)。

17汉字编号4(dbnum4)。

18圈编号(circlenum)。

19个双字节阿拉伯语编号

20 46个拼音双字节片假名字符( aiueo dbchar)。

21 46个拼音双字节片假名字符( iroha dbchar)。

22阿拉伯语,前导零(01,02,03,...,10,11)

23子弹(根本没有号码)

24韩国编号2(ganada)。

25韩国编号1(chosung)。

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阿拉伯语Alif Ba Tah

47希伯来圣经标准

48阿拉伯语Abjad风格

49个印地语元音

50个印地语辅音

51印地语数字

52印地语描述性(红衣主教)

53个泰国信件

54泰国数字

55泰语描述(红衣主教

56名越南描述性(红衣主教)

57页码格式 - # -

58小写俄语字母