mirror of https://github.com/apache/poi.git
code to handle smart art rotations
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1903096 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
56fe91998a
commit
82fa836d1f
|
@ -172,7 +172,6 @@ public class XSLFDiagram extends XSLFGraphicFrame {
|
|||
// We can't easily (is it even possible?) set a separate xfrm for the text on the openxml CTShape.
|
||||
// Instead, we create a separate textbox shape with the same xfrm.
|
||||
org.openxmlformats.schemas.drawingml.x2006.main.CTShapeProperties textShapeProps = textShapeCT.addNewSpPr();
|
||||
textShapeProps.setXfrm(msShapeCt.getTxXfrm());
|
||||
|
||||
textShapeCT.setTxBody(msShapeCt.getTxBody());
|
||||
textShapeCT.setStyle(msShapeCt.getStyle());
|
||||
|
@ -182,6 +181,16 @@ public class XSLFDiagram extends XSLFGraphicFrame {
|
|||
textShapeCT.setNvSpPr((CTShapeNonVisual) nonVisualCt.copy());
|
||||
textShapeCT.getNvSpPr().getCNvSpPr().setTxBox(true);
|
||||
|
||||
textShapeProps.setXfrm(msShapeCt.getTxXfrm());
|
||||
int shapeRotation = msShapeCt.getSpPr().getXfrm().getRot();
|
||||
int textRotation = msShapeCt.getTxXfrm().getRot();
|
||||
if (textRotation != 0) {
|
||||
// SmartArt diagrams (e.g. hexagon) have rotated shapes and the txXfrm can change the rotation for visual
|
||||
// reasons. We perform that same calculation here again and calculate a new rotation for the text box.
|
||||
int resolvedRotation = shapeRotation + textRotation;
|
||||
textShapeProps.getXfrm().setRot(resolvedRotation);
|
||||
}
|
||||
|
||||
return textShapeCT;
|
||||
}
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@ import static org.junit.jupiter.api.Assertions.*;
|
|||
public class TestXSLFDiagram {
|
||||
|
||||
private static final String SIMPLE_DIAGRAM = "smartart-simple.pptx";
|
||||
private static final String ROTATED_TEXT_DIAGRAM = "smartart-rotated-text.pptx";
|
||||
|
||||
private static List<XSLFDiagram> extractDiagrams(XMLSlideShow slideShow) {
|
||||
return slideShow.getSlides()
|
||||
|
@ -149,4 +150,30 @@ public class TestXSLFDiagram {
|
|||
assertEquals(ContentTypes.IMAGE_JPEG, texturePaint.getContentType());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTextRotationOnShape() throws IOException {
|
||||
try (XMLSlideShow inputPptx = XSLFTestDataSamples.openSampleDocument(ROTATED_TEXT_DIAGRAM)) {
|
||||
List<XSLFDiagram> diagrams = extractDiagrams(inputPptx);
|
||||
assertEquals(1, diagrams.size());
|
||||
|
||||
XSLFDiagram diagram = diagrams.get(0);
|
||||
XSLFGroupShape groupShape = diagram.getGroupShape();
|
||||
|
||||
List<XSLFShape> shapes = groupShape.getShapes();
|
||||
|
||||
// Text shapes have separate rotation calculation
|
||||
XSLFTextBox abcText = (XSLFTextBox) shapes.get(1);
|
||||
assertEquals(-41.3187, abcText.getRotation(), 1E-4);
|
||||
|
||||
XSLFTextBox defText = (XSLFTextBox) shapes.get(5);
|
||||
assertEquals(49.1812, defText.getRotation(), 1E-4);
|
||||
|
||||
XSLFTextBox ghiText = (XSLFTextBox) shapes.get(9);
|
||||
assertEquals(0.0, ghiText.getRotation(), 1E-4);
|
||||
|
||||
XSLFTextBox jklText = (XSLFTextBox) shapes.get(11);
|
||||
assertEquals(0.0, jklText.getRotation(), 1E-4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue