Java操作Word模板插入列表
通过poi操作word,插入各种编号的列表,包括数字,字母,罗马字符,自定义任意字符。下面的示例就用了音乐符♬。
1.制作模板,插入列表使用语法*,模板内容为{{*number123}}
2.使用Poi-tl,添加依赖
com.deepoove
poi-tl
1.0.0
poi-tl是一个java的模板引擎。
3.Java代码示例
package com.deepoove.poi.tl;
import static com.deepoove.poi.data.NumbericRenderData.FMT_BULLET;
import static com.deepoove.poi.data.NumbericRenderData.FMT_DECIMAL;
import static com.deepoove.poi.data.NumbericRenderData.FMT_DECIMAL_PARENTHESES;
import static com.deepoove.poi.data.NumbericRenderData.FMT_LOWER_LETTER;
import static com.deepoove.poi.data.NumbericRenderData.FMT_LOWER_ROMAN;
import static com.deepoove.poi.data.NumbericRenderData.FMT_UPPER_LETTER;
import static com.deepoove.poi.data.NumbericRenderData.FMT_UPPER_ROMAN;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.tuple.Pair;
import org.junit.Test;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STNumberFormat;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STNumberFormat.Enum;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.data.NumbericRenderData;
import com.deepoove.poi.data.TextRenderData;
/**
* 列表模板
* @author Sayi
* @version 0.0.5
*/
public class NumbericRenderTest {
@SuppressWarnings("serial")
@Test
public void testNumbericRender() throws Exception {
Map datas = new HashMap() {
{
//1. 2. 3.
put("number123", getData(FMT_DECIMAL));
put("number123_dulplicate", getData(FMT_DECIMAL));
//1) 2) 3)
put("number123_kuohao", getData(FMT_DECIMAL_PARENTHESES));
//无序
put("bullet", getData(FMT_BULLET));
//A B C
put("ABC", getData(FMT_UPPER_LETTER));
//a b c
put("abc", getData(FMT_LOWER_LETTER));
//ⅰ ⅱ ⅲ
put("iiiiii", getData(FMT_LOWER_ROMAN));
//Ⅰ Ⅱ Ⅲ
put("IIIII", getData(FMT_UPPER_ROMAN));
//自定义有序列表显示 (one) (two) (three)
put("custom_number", getData(Pair.of(STNumberFormat.CARDINAL_TEXT, "(%1)")));
//自定义无序列表显示:定义无序符号
put("custom_bullet", getData(Pair.of(STNumberFormat.BULLET, "♬")));
}
};
XWPFTemplate template = XWPFTemplate.compile("src/test/resources/numberic.docx")
.render(datas);
FileOutputStream out = new FileOutputStream("out_numberic.docx");
template.write(out);
out.flush();
out.close();
template.close();
}
@SuppressWarnings("serial")
private NumbericRenderData getData(Pair pair) {
return new NumbericRenderData(pair, new ArrayList() {
{
add(new TextRenderData("df2d4f", "Deeply in love with the things you love, just deepoove."));
add(new TextRenderData("Deeply in love with the things you love, just deepoove."));
add(new TextRenderData("5285c5", "Deeply in love with the things you love, just deepoove."));
}
});
}
}
输出word