Advertisement
Guest User

Untitled

a guest
Oct 24th, 2016
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 KB | None | 0 0
  1. private static Map<Integer, XWPFRun> getPosToRuns(XWPFParagraph paragraph) {
  2. int pos = 0;
  3. Map<Integer, XWPFRun> map = new HashMap<>(10);
  4. for (XWPFRun run : paragraph.getRuns()) {
  5. String runText = run.getText(run.getTextPosition());
  6. for (int i = 0; i < runText.length(); i++) {
  7. map.put(pos + i, run);
  8. }
  9. pos += runText.length();
  10. }
  11. return (map);
  12. }
  13.  
  14. public static <V> void replace(XWPFDocument document, Map<String, V> map) {
  15. List<XWPFParagraph> paragraphs = document.getParagraphs();
  16. for (XWPFParagraph xwpfParagraph : paragraphs) {
  17. replace(xwpfParagraph, map);
  18. }
  19. }
  20.  
  21. private static <V> void replace(XWPFParagraph paragraph, Map<String, V> map) {
  22. for (Map.Entry<String, V> entry : map.entrySet()) {
  23. int pos = paragraph.getText().indexOf(entry.getKey());
  24. if (pos >= 0) {
  25. Map<Integer, XWPFRun> posToRuns = getPosToRuns(paragraph);
  26. XWPFRun run = posToRuns.get(pos);
  27. XWPFRun lastRun = posToRuns.get(pos + entry.getKey().length() - 1);
  28. int runNum = paragraph.getRuns().indexOf(run);
  29. int lastRunNum = paragraph.getRuns().indexOf(lastRun);
  30. String texts[] = entry.getValue().toString().split("n");
  31. run.setText(texts[0], 0);
  32. XWPFRun newRun = run;
  33. for (int i = 1; i < texts.length; i++) {
  34. newRun.addCarriageReturn();
  35. newRun = paragraph.insertNewRun(runNum + i);
  36. newRun.setText(texts[i]);
  37. newRun.setBold(run.isBold());
  38. newRun.setCapitalized(run.isCapitalized());
  39. // newRun.setCharacterSpacing(run.getCharacterSpacing());
  40. newRun.setColor(run.getColor());
  41. newRun.setDoubleStrikethrough(run.isDoubleStrikeThrough());
  42. newRun.setEmbossed(run.isEmbossed());
  43. newRun.setFontFamily(run.getFontFamily());
  44. newRun.setFontSize(run.getFontSize());
  45. newRun.setImprinted(run.isImprinted());
  46. newRun.setItalic(run.isItalic());
  47. newRun.setKerning(run.getKerning());
  48. newRun.setShadow(run.isShadowed());
  49. newRun.setSmallCaps(run.isSmallCaps());
  50. newRun.setStrikeThrough(run.isStrikeThrough());
  51. newRun.setSubscript(run.getSubscript());
  52. newRun.setUnderline(run.getUnderline());
  53. }
  54. for (int i = lastRunNum + texts.length - 1; i > runNum + texts.length - 1; i--) {
  55. paragraph.removeRun(i);
  56. }
  57. }
  58. }
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement