Skip to content

Commit

Permalink
#809 #810
Browse files Browse the repository at this point in the history
  • Loading branch information
Boyi committed Aug 16, 2022
1 parent a695a60 commit 2f2d879
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 7 deletions.
20 changes: 13 additions & 7 deletions poi-tl/src/main/java/com/deepoove/poi/resolver/RunningRunBody.java
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,10 @@ public List<XWPFRun> 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
Expand All @@ -109,8 +111,7 @@ public List<XWPFRun> 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);
}
}

Expand All @@ -119,14 +120,19 @@ public List<XWPFRun> 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);

Expand Down Expand Up @@ -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;

Expand Down
30 changes: 30 additions & 0 deletions poi-tl/src/test/java/com/deepoove/poi/tl/issue/Issue810.java
Original file line number Diff line number Diff line change
@@ -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<String, Object> mainData = new HashMap<>();
Map<String, Object> 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");
}
}
Binary file added poi-tl/src/test/resources/issue/810.docx
Binary file not shown.

0 comments on commit 2f2d879

Please sign in to comment.