From 2f2d879a9c8f0b8132f705047644f0ed933e9d79 Mon Sep 17 00:00:00 2001 From: Boyi Date: Tue, 16 Aug 2022 11:49:58 +0800 Subject: [PATCH] #809 #810 --- .../deepoove/poi/resolver/RunningRunBody.java | 20 ++++++++---- .../com/deepoove/poi/tl/issue/Issue810.java | 30 ++++++++++++++++++ poi-tl/src/test/resources/issue/810.docx | Bin 0 -> 15357 bytes 3 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 poi-tl/src/test/java/com/deepoove/poi/tl/issue/Issue810.java create mode 100644 poi-tl/src/test/resources/issue/810.docx diff --git a/poi-tl/src/main/java/com/deepoove/poi/resolver/RunningRunBody.java b/poi-tl/src/main/java/com/deepoove/poi/resolver/RunningRunBody.java index 4b55d6c4..b2c50b9c 100644 --- a/poi-tl/src/main/java/com/deepoove/poi/resolver/RunningRunBody.java +++ b/poi-tl/src/main/java/com/deepoove/poi/resolver/RunningRunBody.java @@ -93,8 +93,10 @@ public List refactorRun() { int startOffset = startEdge.getRunEdge(); int endOffset = endEdge.getRunEdge(); - String startText = runs.get(startRunPos).text(); - String endText = runs.get(endRunPos).text(); + XWPFRun startRun = runs.get(startRunPos); + XWPFRun endRun = runs.get(endRunPos); + String startText = startRun.text(); + String endText = endRun.text(); if (endOffset + 1 >= endText.length()) { // delete the redundant end Run directly @@ -109,8 +111,7 @@ public List refactorRun() { buildExtra(extra, extraRun); } else { // Set the extra content to the redundant end run - XWPFRun extraRun = runs.get(endRunPos); - buildExtra(extra, extraRun); + buildExtra(extra, endRun); } } @@ -119,14 +120,19 @@ public List refactorRun() { runBodyContext.removeRun(m); } - if (startOffset <= 0) { + int startChar = 0; + if (startText.length() > 0 && startText.charAt(0) == '\t' && startRun.getCTR().getTabArray().length > 0) { + startChar = 1; + } + + if (startOffset - startChar <= 0) { // set the start Run directly XWPFRun templateRun = runs.get(startRunPos); templateRun.setText(startEdge.getTag(), 0); templateRuns.add(runs.get(startRunPos)); } else { // split start run, set extra in a run - String extra = startText.substring(0, startOffset); + String extra = startText.substring(startChar, startOffset); XWPFRun extraRun = runs.get(startRunPos); buildExtra(extra, extraRun); @@ -190,7 +196,7 @@ private void buildRunEdge(Pattern pattern) { Matcher matcher = pattern.matcher(getText(runBodyContext)); while (matcher.find()) { pairs.add(ImmutablePair.of(new RunEdge(matcher.start(), matcher.group()), - new RunEdge(matcher.end(), matcher.group()))); + new RunEdge(matcher.end(), matcher.group()))); } if (pairs.isEmpty()) return; diff --git a/poi-tl/src/test/java/com/deepoove/poi/tl/issue/Issue810.java b/poi-tl/src/test/java/com/deepoove/poi/tl/issue/Issue810.java new file mode 100644 index 00000000..667001ca --- /dev/null +++ b/poi-tl/src/test/java/com/deepoove/poi/tl/issue/Issue810.java @@ -0,0 +1,30 @@ +package com.deepoove.poi.tl.issue; + +import java.io.IOException; +import java.util.*; + +import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.apache.poi.xwpf.usermodel.XWPFParagraph; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import com.deepoove.poi.XWPFTemplate; + +public class Issue810 { + + @Test + public void test810() throws IOException { + Map mainData = new HashMap<>(); + Map rowData = new HashMap<>(); + rowData.put("data1", "data1"); + rowData.put("data2", "data2"); + rowData.put("data3", "data3"); + mainData.put("rows", Collections.singletonList(rowData)); + XWPFTemplate render = XWPFTemplate.compile("src/test/resources/issue/810.docx").render(mainData); + XWPFDocument document = render.getXWPFDocument(); + XWPFParagraph paragraph = document.getParagraphArray(0); + Assertions.assertEquals(paragraph.getText(), "data1\tdata1\tdata1"); + + render.writeToFile("target/out_issue_810.docx"); + } +} diff --git a/poi-tl/src/test/resources/issue/810.docx b/poi-tl/src/test/resources/issue/810.docx new file mode 100644 index 0000000000000000000000000000000000000000..bc255a64afb5f5992975dea5e882bbcf4dc64de6 GIT binary patch literal 15357 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 literal 0 HcmV?d00001