mirror of
https://github.com/apache/poi.git
synced 2026-02-27 20:40:08 +08:00
[bug-65934] add removeTextParagraph
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1898668 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
83a90487cb
commit
8be47cb969
@ -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);
|
||||
|
||||
@ -146,12 +146,33 @@ class TestXSLFTextParagraph {
|
||||
assertEquals(expectedWidth, dtp.getWrappingWidth(false, null), 0);
|
||||
|
||||
ppt.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* test breaking test into lines.
|
||||
* This test requires that the Arial font is available and will run only on windows
|
||||
*/
|
||||
@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
|
||||
void testBreakLines() throws IOException {
|
||||
String os = System.getProperty("os.name");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user