由于最近项目中遇到处理角标的问题,遂整理下,做个备忘,
上角标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");
}

更多推荐