Browse Source

[bug-65934] add removeTextParagraph

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1898668 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_5_2_2
PJ Fanning 2 years ago
parent
commit
8be47cb969

+ 31
- 1
poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java View File

@@ -22,6 +22,7 @@ package org.apache.poi.xslf.usermodel;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Optional;
@@ -203,9 +204,15 @@ public abstract class XSLFTextShape extends XSLFSimpleShape
return run;
}

/**
* Get the TextParagraphs for this text box. Removing an item from this list will not reliably remove
* the item from the underlying document. Use <code>removeTextParagraph</code> for that.
*
* @return the TextParagraphs for this text box
*/
@Override
public List<XSLFTextParagraph> getTextParagraphs() {
return _paragraphs;
return Collections.unmodifiableList(_paragraphs);
}

/**
@@ -229,6 +236,29 @@ public abstract class XSLFTextShape extends XSLFSimpleShape
return paragraph;
}

/**
* @param paragraph paragraph to remove
* @return whether the paragraph was removed
* @since POI 5.2.2
*/
public boolean removeTextParagraph(XSLFTextParagraph paragraph) {
CTTextParagraph ctTextParagraph = paragraph.getXmlObject();
CTTextBody txBody = getTextBody(false);
if (txBody != null) {
if (_paragraphs.remove(paragraph)) {
for (int i = 0; i < txBody.sizeOfPArray(); i++) {
if (txBody.getPArray(i).equals(ctTextParagraph)) {
txBody.removeP(i);
return true;
}
}
}
return false;
} else {
return false;
}
}

@Override
public void setVerticalAlignment(VerticalAlignment anchor) {
CTTextBodyProperties bodyPr = getTextBodyPr(true);

+ 26
- 5
poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFTextParagraph.java View File

@@ -146,12 +146,33 @@ class TestXSLFTextParagraph {
assertEquals(expectedWidth, dtp.getWrappingWidth(false, null), 0);

ppt.close();
}
}

@Test
void testRemoveTextParagraph() throws IOException {
try (XMLSlideShow ppt = new XMLSlideShow()) {
XSLFSlide slide = ppt.createSlide();
XSLFTextShape sh = slide.createAutoShape();
sh.setLineColor(Color.black);

XSLFTextParagraph p = sh.addNewTextParagraph();
p.addNewTextRun().setText(
"Paragraph formatting allows for more granular control " +
"of text within a shape. Properties here apply to all text " +
"residing within the corresponding paragraph.");

assertTrue(sh.removeTextParagraph(p));

assertTrue(sh.getTextParagraphs().isEmpty());

assertEquals(0, sh.getTextBody(true).sizeOfPArray());
}
}

/**
* test breaking test into lines.
* This test requires that the Arial font is available and will run only on windows
*/
/**
* test breaking test into lines.
* This test requires that the Arial font is available and will run only on windows
*/
@Test
void testBreakLines() throws IOException {
String os = System.getProperty("os.name");

Loading…
Cancel
Save