/** * 替换段落里面的变量 * * @param para * 要替换的段落 * @param params * 参数 */ private static void replaceInPara(XWPFParagraph para, Map<String, Object> params) { List<XWPFRun> runs; Matcher matcher; if (matcher(para.getParagraphText()).find()) { runs = para.getRuns(); for (int i = 0; i < runs.size(); i++) { XWPFRun run = runs.get(i); String runText = run.toString(); matcher = matcher(runText); if (matcher.find()) { while ((matcher = matcher(runText)).find()) { runText = matcher.replaceFirst(String.valueOf(params.get(matcher.group(1)))); } // 直接调用XWPFRun的setText()方法设置文本时,在底层会重新创建一个XWPFRun,把文本附加在当前文本后面, // 所以我们不能直接设值,需要先删除当前run,然后再自己手动插入一个新的run。 para.removeRun(i); para.insertNewRun(i).setText(runText); } } } }
XWPFRun extraRun = paragraph.insertNewRun(endRunPos + 1); StyleUtils.styleRun(extraRun, runs.get(endRunPos)); extraRun.setText(extra, 0); extraRun.setText(extra, 0); XWPFRun templateRun = paragraph.insertNewRun(startRunPos + 1); StyleUtils.styleRun(templateRun, extraRun); templateRun.setText(startEdge.getTag(), 0);
if (runChars[charNumber] == 'a') { //if the charcter is an 'a' then r.setText(sb.toString(), 0); //set all characters, which are current buffered, as the text of the actual run r = p.insertNewRun(++runNumber); //insert new run for the '@' as the replacement for the 'a' r.setText("@", 0); r.setColor("DC143C"); r = p.insertNewRun(++runNumber); //insert new run for the next characters sb = new StringBuffer(); //empty buffer } else {
run.addCarriageReturn(); } else { paragraph.insertNewRun(runNum + 1); XWPFRun newRun = paragraph.getRuns().get(runNum + 1); CTRPr rPr = newRun.getCTR().isSetRPr() ? newRun.getCTR().getRPr() : newRun.getCTR().addNewRPr();
xwpfParagraph.insertNewRun( i ); XWPFRun newRun = paragraph.getRuns().get( i ); CTRPr rPr = newRun.getCTR().isSetRPr() ? newRun.getCTR().getRPr() : newRun.getCTR().addNewRPr();