diff options
-rw-r--r-- | poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java | 15 | ||||
-rw-r--r-- | poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFSlideShow.java | 23 | ||||
-rw-r--r-- | test-data/slideshow/templatePPTWithOnlyOneText.pptx | bin | 0 -> 33671 bytes |
3 files changed, 20 insertions, 18 deletions
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java index c43e0e973a..0eaf4ea775 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java @@ -799,20 +799,11 @@ public class XSLFTextParagraph implements TextParagraph<XSLFShape,XSLFTextParagr thisP.removeFld(i-1); } - try (XmlCursor thisC = thisP.newCursor()) { - thisC.toEndToken(); - try (XmlCursor otherC = otherP.newCursor()) { - otherC.copyXmlContents(thisC); - } - } - for (XSLFTextRun tr : other.getTextRuns()) { - XmlObject xo = tr.getXmlObject(); - XSLFTextRun run = (xo instanceof CTTextLineBreak) - ? newTextRun((CTTextLineBreak)xo) - : newTextRun(xo); + XmlObject xo = tr.getXmlObject().copy(); + XSLFTextRun run = addNewTextRun(); + run.getXmlObject().set(xo); run.copy(tr); - _runs.add(run); } // set properties again, in case we are based on a different diff --git a/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFSlideShow.java b/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFSlideShow.java index c606c4a95a..e66a2bec8d 100644 --- a/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFSlideShow.java +++ b/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFSlideShow.java @@ -26,13 +26,9 @@ import org.apache.poi.openxml4j.exceptions.OpenXML4JException; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.openxml4j.opc.PackagePart; import org.apache.poi.sl.usermodel.ShapeType; -import org.apache.poi.xslf.usermodel.XMLSlideShow; -import org.apache.poi.xslf.usermodel.XSLFAutoShape; -import org.apache.poi.xslf.usermodel.XSLFBackground; -import org.apache.poi.xslf.usermodel.XSLFRelation; -import org.apache.poi.xslf.usermodel.XSLFSlide; -import org.apache.poi.xslf.usermodel.XSLFSlideShow; +import org.apache.poi.xslf.usermodel.*; import org.apache.xmlbeans.XmlException; +import org.apache.xmlbeans.XmlObject; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -156,4 +152,19 @@ class TestXSLFSlideShow { ppt2.close(); } + + @Test + void testSlideImportContent() throws IOException{ + try (XMLSlideShow ppt = new XMLSlideShow(slTests.openResourceAsStream("templatePPTWithOnlyOneText.pptx"))) { + XSLFSlide templateSlide = ppt.getSlides().get(0); + XSLFTextShape templateTextShape = (XSLFTextShape) templateSlide.getShapes().get(0); + XmlObject templateTextRunXmlObject = templateTextShape.getTextParagraphs().get(0).getTextRuns().get(0).getXmlObject(); + + XSLFSlide copySlide = ppt.createSlide(); + copySlide.importContent(templateSlide); + XSLFTextShape copyTextShape = (XSLFTextShape) copySlide.getShapes().get(0); + XmlObject copyTextRunXmlObject = copyTextShape.getTextParagraphs().get(0).getTextRuns().get(0).getXmlObject(); + assertNotEquals(templateTextRunXmlObject, copyTextRunXmlObject); + } + } } diff --git a/test-data/slideshow/templatePPTWithOnlyOneText.pptx b/test-data/slideshow/templatePPTWithOnlyOneText.pptx Binary files differnew file mode 100644 index 0000000000..7a0e1e70fd --- /dev/null +++ b/test-data/slideshow/templatePPTWithOnlyOneText.pptx |