Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private static Map<Integer, XWPFRun> getPosToRuns(XWPFParagraph paragraph) {
- int pos = 0;
- Map<Integer, XWPFRun> map = new HashMap<>(10);
- for (XWPFRun run : paragraph.getRuns()) {
- String runText = run.getText(run.getTextPosition());
- for (int i = 0; i < runText.length(); i++) {
- map.put(pos + i, run);
- }
- pos += runText.length();
- }
- return (map);
- }
- public static <V> void replace(XWPFDocument document, Map<String, V> map) {
- List<XWPFParagraph> paragraphs = document.getParagraphs();
- for (XWPFParagraph xwpfParagraph : paragraphs) {
- replace(xwpfParagraph, map);
- }
- }
- private static <V> void replace(XWPFParagraph paragraph, Map<String, V> map) {
- for (Map.Entry<String, V> entry : map.entrySet()) {
- int pos = paragraph.getText().indexOf(entry.getKey());
- if (pos >= 0) {
- Map<Integer, XWPFRun> posToRuns = getPosToRuns(paragraph);
- XWPFRun run = posToRuns.get(pos);
- XWPFRun lastRun = posToRuns.get(pos + entry.getKey().length() - 1);
- int runNum = paragraph.getRuns().indexOf(run);
- int lastRunNum = paragraph.getRuns().indexOf(lastRun);
- String texts[] = entry.getValue().toString().split("n");
- run.setText(texts[0], 0);
- XWPFRun newRun = run;
- for (int i = 1; i < texts.length; i++) {
- newRun.addCarriageReturn();
- newRun = paragraph.insertNewRun(runNum + i);
- newRun.setText(texts[i]);
- newRun.setBold(run.isBold());
- newRun.setCapitalized(run.isCapitalized());
- // newRun.setCharacterSpacing(run.getCharacterSpacing());
- newRun.setColor(run.getColor());
- newRun.setDoubleStrikethrough(run.isDoubleStrikeThrough());
- newRun.setEmbossed(run.isEmbossed());
- newRun.setFontFamily(run.getFontFamily());
- newRun.setFontSize(run.getFontSize());
- newRun.setImprinted(run.isImprinted());
- newRun.setItalic(run.isItalic());
- newRun.setKerning(run.getKerning());
- newRun.setShadow(run.isShadowed());
- newRun.setSmallCaps(run.isSmallCaps());
- newRun.setStrikeThrough(run.isStrikeThrough());
- newRun.setSubscript(run.getSubscript());
- newRun.setUnderline(run.getUnderline());
- }
- for (int i = lastRunNum + texts.length - 1; i > runNum + texts.length - 1; i--) {
- paragraph.removeRun(i);
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment