关于java POI 向word中添加上标文本那些事儿
·
由于最近项目中遇到处理角标的问题,遂整理下,做个备忘, 上角标SUPERSCRIPT 下角标SUBSCRIPT XWPFRun setSubscript(VerticalAlign.SUPERSCRIPT);
代码如下:
代码业务逻辑大概整理下:
1.识别文本中的角标文本;
2.根据角标分割文本
3.新建XWPFRun 向word中插入普通文本和角标文本
xwpfParagraph.setStyle("0");
xwpfParagraph.setFirstLineIndent(400);
// 使用正则表达式查找类似 [1] 的文本
Pattern pattern = Pattern.compile("\\[(\\d+)\\]");
Matcher matcher = pattern.matcher(str);
List<String> matches = new ArrayList<>();
while (matcher.find()) {
matches.add(matcher.group());
}
if (matches.size() > 0) {
String[] splitText = str.split("\\s*\\[\\d+\\]\\s*",matches.size()+1);
// 打印分割后的文本
for (int i=0;i<splitText.length;i++) {
String part = splitText[i];
XWPFRun runnew=xwpfParagraph.createRun();
runnew.setText(part);
if(i<matches.size()){
XWPFRun run_match=xwpfParagraph.createRun();
run_match.setText(matches.get(i));
setSuperscript(run_match, matches.get(i));
}
}
}else{
XWPFRun runnew=xwpfParagraph.createRun();
runnew.setText(str);
}
private void setSuperscript(XWPFRun run, String text) {
// 替换匹配的文本为上标格式
run.setFontSize(15);
run.setBold(false);
run.setSubscript(VerticalAlign.SUPERSCRIPT);
run.setText(text, 0);
run.setFontFamily("Times New Roman");
}
更多推荐



所有评论(0)