mirror of
https://github.com/apache/poi.git
synced 2026-02-27 20:40:08 +08:00
[bug-65473] when copy slide, new slide uses old textrun object reference. Thanks to FlyingPigQAQ. This closes #371
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1903558 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
114f8b8fde
commit
f1692cc041
@ -799,20 +799,11 @@ public class XSLFTextParagraph implements TextParagraph<XSLFShape,XSLFTextParagr
|
|||||||
thisP.removeFld(i-1);
|
thisP.removeFld(i-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
try (XmlCursor thisC = thisP.newCursor()) {
|
|
||||||
thisC.toEndToken();
|
|
||||||
try (XmlCursor otherC = otherP.newCursor()) {
|
|
||||||
otherC.copyXmlContents(thisC);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (XSLFTextRun tr : other.getTextRuns()) {
|
for (XSLFTextRun tr : other.getTextRuns()) {
|
||||||
XmlObject xo = tr.getXmlObject();
|
XmlObject xo = tr.getXmlObject().copy();
|
||||||
XSLFTextRun run = (xo instanceof CTTextLineBreak)
|
XSLFTextRun run = addNewTextRun();
|
||||||
? newTextRun((CTTextLineBreak)xo)
|
run.getXmlObject().set(xo);
|
||||||
: newTextRun(xo);
|
|
||||||
run.copy(tr);
|
run.copy(tr);
|
||||||
_runs.add(run);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// set properties again, in case we are based on a different
|
// set properties again, in case we are based on a different
|
||||||
|
|||||||
@ -26,13 +26,9 @@ import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
|
|||||||
import org.apache.poi.openxml4j.opc.OPCPackage;
|
import org.apache.poi.openxml4j.opc.OPCPackage;
|
||||||
import org.apache.poi.openxml4j.opc.PackagePart;
|
import org.apache.poi.openxml4j.opc.PackagePart;
|
||||||
import org.apache.poi.sl.usermodel.ShapeType;
|
import org.apache.poi.sl.usermodel.ShapeType;
|
||||||
import org.apache.poi.xslf.usermodel.XMLSlideShow;
|
import org.apache.poi.xslf.usermodel.*;
|
||||||
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.xmlbeans.XmlException;
|
import org.apache.xmlbeans.XmlException;
|
||||||
|
import org.apache.xmlbeans.XmlObject;
|
||||||
import org.junit.jupiter.api.AfterEach;
|
import org.junit.jupiter.api.AfterEach;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
@ -156,4 +152,19 @@ class TestXSLFSlideShow {
|
|||||||
|
|
||||||
ppt2.close();
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
test-data/slideshow/templatePPTWithOnlyOneText.pptx
Normal file
BIN
test-data/slideshow/templatePPTWithOnlyOneText.pptx
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user