生成word文件,有序列表如何配置序号样式和序号自增

我的代码:

                Document document = new Document();
		Section section = new Section(document);
		Body body = new Body(document);
		document.removeAllChildren();
		section.appendChild(body);
		document.appendChild(section);

		//第一层
		Paragraph paragraph = new Paragraph(document);
		paragraph.appendChild(new Run(document, "000"));
		ListFormat listFormat = paragraph.getListFormat();
		listFormat.applyNumberDefault();

		//第二层
		Paragraph paragraph1 = new Paragraph(document);
		paragraph1.appendChild(new Run(document, "111"));
		ListFormat listFormat1 = paragraph1.getListFormat();
		listFormat1.applyNumberDefault();
		listFormat1.listIndent();

		Paragraph paragraph2 = new Paragraph(document);
		paragraph2.appendChild(new Run(document, "222"));
		ListFormat listFormat2 = paragraph2.getListFormat();
		listFormat2.applyNumberDefault();
		listFormat2.listIndent();

		body.appendChild(paragraph);
		body.appendChild(paragraph1);
		body.appendChild(paragraph2);
		document.save("./file/1.docx");

我生成的文件:
1.docx (8.0 KB)

我生成了一个docx文件,里面有一个有序列表,并且是两级,我想手动设置序号的样式(比如1,或者a,或者一),另外我发现同一级下,没有自增序号

@humanhuman, 请查看以下代码:

Document document = new Document();
DocumentBuilder builder = new DocumentBuilder(document);

builder.getListFormat().applyNumberDefault();
builder.getListFormat().getListLevel().setNumberStyle(NumberStyle.SIMP_CHIN_NUM_1);
builder.writeln("000");

builder.getListFormat().listIndent();
builder.getListFormat().getListLevel().setNumberStyle(NumberStyle.LOWERCASE_LETTER);
builder.writeln("111");
builder.writeln("222");

builder.getListFormat().listOutdent();
builder.writeln("333");

builder.getListFormat().removeNumbers();
builder.writeln("regular text1");
builder.writeln("regular text2");

builder.getListFormat().applyNumberDefault();
builder.getListFormat().getListLevel().setNumberStyle(NumberStyle.ARABIC);
builder.writeln("666");
builder.writeln("777");

builder.getListFormat().removeNumbers();
builder.writeln("regular text3");

document.save("lists.docx");

有关详细信息,请参阅我们的文档:

我必须使用DocumentBuilder对象吗,我发现示例代码里builder.getListFormat()获取的是当前paragraph的ListFormat,通过debug发现在每次builder.writeln之后,这个builder.getListFormat()都会改变。
但是我不想使用DocumentBuilder,我的三个paragraph都是new的,三个ListFormat也是对应段落的,但是我这种代码却无法生效,从代码里看,感觉三个ListFormat都是独立的,没有产生相互的联系。不知道DocumentBuilder是做了什么处理,让ListFormat生效了。

	Document document = new Document();
	Section section = new Section(document);
	Body body = new Body(document);
	document.removeAllChildren();
	section.appendChild(body);
	document.appendChild(section);

	//第一层
	Paragraph paragraph = new Paragraph(document);
	ListFormat listFormat = paragraph.getListFormat();
	listFormat.applyNumberDefault();
	listFormat.getListLevel().setNumberStyle(NumberStyle.ARABIC);
	paragraph.appendChild(new Run(document, "000"));

	//第二层
	Paragraph paragraph1 = new Paragraph(document);
	ListFormat listFormat1 = paragraph1.getListFormat();
	listFormat1.applyNumberDefault();
	listFormat1.getListLevel().setNumberStyle(NumberStyle.ARABIC);
	listFormat1.listIndent();
	paragraph1.appendChild(new Run(document, "111"));

	Paragraph paragraph2 = new Paragraph(document);
	ListFormat listFormat2 = paragraph2.getListFormat();
	listFormat2.applyNumberDefault();
	listFormat2.getListLevel().setNumberStyle(NumberStyle.ARABIC);
	listFormat2.listIndent();
	paragraph2.appendChild(new Run(document, "222"));

	body.appendChild(paragraph);
	body.appendChild(paragraph1);
	body.appendChild(paragraph2);
	document.save("./file/1.docx");

@humanhuman, 使用 DocumentBuilder 创建文档是首选方式。但是,您可以使用您选择的方式。 在这种情况下,您需要定义一个新列表并添加到文档的列表集合中。 然后对于每个列表级别,您可以指定数字样式。

Document document = new Document();
Section section = new Section(document);
Body body = new Body(document);
document.removeAllChildren();
section.appendChild(body);
document.appendChild(section);

List list = document.getLists().add(ListTemplate.OUTLINE_NUMBERS);
//第一层
list.getListLevels().get(0).setNumberStyle(NumberStyle.ARABIC);
//第二层
list.getListLevels().get(1).setNumberStyle(NumberStyle.LOWERCASE_LETTER);
//第三层
list.getListLevels().get(2).setNumberStyle(NumberStyle.LOWERCASE_ROMAN);

//第一层
Paragraph paragraph = new Paragraph(document);
paragraph.appendChild(new Run(document, "000"));
paragraph.getListFormat().setList(list);

//第二层
Paragraph paragraph1 = new Paragraph(document);
paragraph1.appendChild(new Run(document, "111"));
paragraph1.getListFormat().setList(list);
paragraph1.getListFormat().listIndent();

Paragraph paragraph2 = new Paragraph(document);
paragraph2.appendChild(new Run(document, "222"));
paragraph2.getListFormat().setList(list);
paragraph2.getListFormat().listIndent();

//第三层
Paragraph paragraph3 = new Paragraph(document);
paragraph3.appendChild(new Run(document, "333"));
paragraph3.getListFormat().setList(list);
paragraph3.getListFormat().listIndent();
paragraph3.getListFormat().listIndent();

//第一层
Paragraph paragraph4 = new Paragraph(document);
paragraph4.appendChild(new Run(document, "444"));
paragraph4.getListFormat().setList(list);

body.appendChild(paragraph);
body.appendChild(paragraph1);
body.appendChild(paragraph2);
body.appendChild(paragraph3);
body.appendChild(paragraph4);
document.save("list.docx");

有关详细信息,请参阅我们的文档:

好的,但是如果我想同样的操作生成无序列表,却没有成功,我在numberStyle这个类中没有看到无序列表的样式,ListTemplate中有关于BULLET的相关变量,但是我使用这样操作也没有生效,com.aspose.words.List list = document.getLists().add(ListTemplate.BULLET_SQUARE);
我认为setNumberStyle只是对于有序列表有效,但是我也没有找到其他的关于BULLET的方法

比如我想使用黑色方块作为样式,我这样写,没有效果
com.aspose.words.List list = document.getLists().add(ListTemplate.BULLET_SQUARE);
list.getListLevels().get(0).setNumberStyle(ListTemplate.BULLET_SQUARE);
list.getListLevels().get(1).setNumberStyle(ListTemplate.BULLET_SQUARE);
list.getListLevels().get(2).setNumberStyle(ListTemplate.BULLET_SQUARE);

image.png (956 Bytes)

我需要这三种无序列表样式

@humanhuman, 在这种情况下,您需要使用 BULLET_DEFAULT 列表模板:

Document document = new Document();
Section section = new Section(document);
Body body = new Body(document);
document.removeAllChildren();
section.appendChild(body);
document.appendChild(section);

// ListTemplate.BULLET_DEFAULT:
// 默认的项目符号列表有 9 个级别
// 第一层的子弹是圆盘
// 第二层的子弹是圆
// 第三层的子弹是正方形
// 然后对剩余级别重复格式化。
List list = document.getLists().add(ListTemplate.BULLET_DEFAULT);

//第一层
Paragraph paragraph = new Paragraph(document);
paragraph.appendChild(new Run(document, "000"));
paragraph.getListFormat().setList(list);

//第二层
Paragraph paragraph1 = new Paragraph(document);
paragraph1.appendChild(new Run(document, "111"));
paragraph1.getListFormat().setList(list);
paragraph1.getListFormat().listIndent();

Paragraph paragraph2 = new Paragraph(document);
paragraph2.appendChild(new Run(document, "222"));
paragraph2.getListFormat().setList(list);
paragraph2.getListFormat().listIndent();

//第三层
Paragraph paragraph3 = new Paragraph(document);
paragraph3.appendChild(new Run(document, "333"));
paragraph3.getListFormat().setList(list);
paragraph3.getListFormat().listIndent();
paragraph3.getListFormat().listIndent();

//第一层
Paragraph paragraph4 = new Paragraph(document);
paragraph4.appendChild(new Run(document, "444"));
paragraph4.getListFormat().setList(list);

body.appendChild(paragraph);
body.appendChild(paragraph1);
body.appendChild(paragraph2);
body.appendChild(paragraph3);
body.appendChild(paragraph4);
document.save("list.docx");

不,我好像没有表达清楚我的意思,我是想要我的无序列表的每一级的样式能够手动控制,比如全部修改成黑色的原点
image.png (1.3 KB)

@humanhuman, 您可以通过 NumberFormat 属性指定自定义项目符号字符。 您还应该为列表级别指定正确的字体,如下面的代码示例所示。

Document document = new Document();
Section section = new Section(document);
Body body = new Body(document);
document.removeAllChildren();
section.appendChild(body);
document.appendChild(section);

// 使用在第一个列表级别中具有磁盘字符的列表模板。
List list = document.getLists().add(ListTemplate.BULLET_DISK);

// 获取第一个列表级别中使用的磁盘字符 (0xF0B7)。
String numberFormat = list.getListLevels().get(0).getNumberFormat();
// 获取用于第一个列表级别的字体 (Symbol)。 
String levelFont = list.getListLevels().get(0).getFont().getName();

// 将第一级列表的字符和字体设置为二级和三级。
list.getListLevels().get(1).setNumberFormat(numberFormat);
list.getListLevels().get(1).getFont().setName(levelFont);

list.getListLevels().get(2).setNumberFormat(numberFormat);
list.getListLevels().get(2).getFont().setName(levelFont);

//第一层
Paragraph paragraph = new Paragraph(document);
paragraph.appendChild(new Run(document, "111"));
paragraph.getListFormat().setList(list);

//第二层
Paragraph paragraph1 = new Paragraph(document);
paragraph1.appendChild(new Run(document, "222"));
paragraph1.getListFormat().setList(list);
paragraph1.getListFormat().listIndent();

Paragraph paragraph2 = new Paragraph(document);
paragraph2.appendChild(new Run(document, "333"));
paragraph2.getListFormat().setList(list);
paragraph2.getListFormat().listIndent();

//第三层
Paragraph paragraph3 = new Paragraph(document);
paragraph3.appendChild(new Run(document, "444"));
paragraph3.getListFormat().setList(list);
paragraph3.getListFormat().listIndent();
paragraph3.getListFormat().listIndent();

//第三层
Paragraph paragraph4 = new Paragraph(document);
paragraph4.appendChild(new Run(document, "555"));
paragraph4.getListFormat().setList(list);
paragraph4.getListFormat().listIndent();
paragraph4.getListFormat().listIndent();

body.appendChild(paragraph);
body.appendChild(paragraph1);
body.appendChild(paragraph2);
body.appendChild(paragraph3);
body.appendChild(paragraph4);
document.save("list.docx");