123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- /* ====================================================================
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- ==================================================================== */
- package org.apache.poi.xslf.usermodel;
-
- import static org.apache.poi.sl.TestCommonSL.sameColor;
- import static org.junit.Assert.assertArrayEquals;
- import static org.junit.Assert.assertEquals;
- import static org.junit.Assert.assertFalse;
- import static org.junit.Assert.assertNull;
- import static org.junit.Assert.assertTrue;
-
- import java.awt.Color;
- import java.io.IOException;
- import java.util.List;
-
- import org.apache.poi.xslf.XSLFTestDataSamples;
- import org.junit.Test;
-
- /**
- * @author Yegor Kozlov
- */
- public class TestXSLFSlide {
-
- @Test
- public void testReadShapes() throws IOException {
- XMLSlideShow ppt = XSLFTestDataSamples.openSampleDocument("shapes.pptx");
- List<XSLFSlide> slides = ppt.getSlides();
-
- XSLFSlide slide1 = slides.get(0);
- List<XSLFShape> shapes1 = slide1.getShapes();
- assertEquals(7, shapes1.size());
- assertEquals("TextBox 3", shapes1.get(0).getShapeName());
- assertTrue(shapes1.get(0) instanceof XSLFTextBox);
- XSLFAutoShape sh0 = (XSLFAutoShape)shapes1.get(0);
- assertEquals("Learning PPTX", sh0.getText());
-
-
- assertEquals("Straight Connector 5", shapes1.get(1).getShapeName());
- assertTrue(shapes1.get(1) instanceof XSLFConnectorShape);
-
- assertEquals("Freeform 6", shapes1.get(2).getShapeName());
- assertTrue(shapes1.get(2) instanceof XSLFFreeformShape);
- XSLFAutoShape sh2 = (XSLFAutoShape)shapes1.get(2);
- assertEquals("Cloud", sh2.getText());
-
- assertEquals("Picture 1", shapes1.get(3).getShapeName());
- assertTrue(shapes1.get(3) instanceof XSLFPictureShape);
-
- assertEquals("Table 2", shapes1.get(4).getShapeName());
- assertTrue(shapes1.get(4) instanceof XSLFGraphicFrame);
-
- assertEquals("Straight Arrow Connector 7", shapes1.get(5).getShapeName());
- assertTrue(shapes1.get(5) instanceof XSLFConnectorShape);
-
- assertEquals("Elbow Connector 9", shapes1.get(6).getShapeName());
- assertTrue(shapes1.get(6) instanceof XSLFConnectorShape);
-
- // titles on slide2
- XSLFSlide slide2 = slides.get(1);
- List<XSLFShape> shapes2 = slide2.getShapes();
- assertEquals(2, shapes2.size());
- assertTrue(shapes2.get(0) instanceof XSLFAutoShape);
- assertEquals("PPTX Title", ((XSLFAutoShape)shapes2.get(0)).getText());
- assertTrue(shapes2.get(1) instanceof XSLFAutoShape);
- assertEquals("Subtitle\nAnd second line", ((XSLFAutoShape)shapes2.get(1)).getText());
-
- // group shape on slide3
- XSLFSlide slide3 = slides.get(2);
- List<XSLFShape> shapes3 = slide3.getShapes();
- assertEquals(1, shapes3.size());
- assertTrue(shapes3.get(0) instanceof XSLFGroupShape);
- List<XSLFShape> groupShapes = ((XSLFGroupShape)shapes3.get(0)).getShapes();
- assertEquals(3, groupShapes.size());
- assertTrue(groupShapes.get(0) instanceof XSLFAutoShape);
- assertEquals("Rectangle 1", groupShapes.get(0).getShapeName());
-
- assertTrue(groupShapes.get(1) instanceof XSLFAutoShape);
- assertEquals("Oval 2", groupShapes.get(1).getShapeName());
-
- assertTrue(groupShapes.get(2) instanceof XSLFAutoShape);
- assertEquals("Right Arrow 3", groupShapes.get(2).getShapeName());
-
- XSLFSlide slide4 = slides.get(3);
- List<XSLFShape> shapes4 = slide4.getShapes();
- assertEquals(1, shapes4.size());
- assertTrue(shapes4.get(0) instanceof XSLFTable);
- XSLFTable tbl = (XSLFTable)shapes4.get(0);
- assertEquals(3, tbl.getNumberOfColumns());
- assertEquals(6, tbl.getNumberOfRows());
-
- ppt.close();
- }
-
- @Test
- public void testCreateSlide() throws IOException {
- XMLSlideShow ppt = new XMLSlideShow();
- assertEquals(0, ppt.getSlides().size());
-
- XSLFSlide slide = ppt.createSlide();
- assertFalse(slide.getFollowMasterGraphics());
- slide.setFollowMasterGraphics(false);
- assertFalse(slide.getFollowMasterGraphics());
- slide.setFollowMasterGraphics(true);
- assertTrue(slide.getFollowMasterGraphics());
-
- ppt.close();
- }
-
- @Test
- public void testImportContent() throws IOException {
- XMLSlideShow ppt = new XMLSlideShow();
-
- XMLSlideShow src = XSLFTestDataSamples.openSampleDocument("themes.pptx");
-
- // create a blank slide and import content from the 4th slide of themes.pptx
- XSLFSlide slide1 = ppt.createSlide().importContent(src.getSlides().get(3));
- List<XSLFShape> shapes1 = slide1.getShapes();
- assertEquals(2, shapes1.size());
-
- XSLFTextShape sh1 = (XSLFTextShape)shapes1.get(0);
- assertEquals("Austin Theme", sh1.getText());
- XSLFTextRun r1 = sh1.getTextParagraphs().get(0).getTextRuns().get(0);
- assertEquals("Century Gothic", r1.getFontFamily());
- assertEquals(40.0, r1.getFontSize(), 0);
- assertTrue(r1.isBold());
- assertTrue(r1.isItalic());
- assertTrue(sameColor(new Color(148, 198, 0), r1.getFontColor()));
- assertNull(sh1.getFillColor());
- assertNull(sh1.getLineColor());
-
- XSLFTextShape sh2 = (XSLFTextShape)shapes1.get(1);
- assertEquals(
- "Text in a autoshape is white\n" +
- "Fill: RGB(148, 198,0)", sh2.getText());
- XSLFTextRun r2 = sh2.getTextParagraphs().get(0).getTextRuns().get(0);
- assertEquals("Century Gothic", r2.getFontFamily());
- assertEquals(18.0, r2.getFontSize(), 0);
- assertFalse(r2.isBold());
- assertFalse(r2.isItalic());
- assertTrue(sameColor(Color.white, r2.getFontColor()));
- assertEquals(new Color(148, 198, 0), sh2.getFillColor());
- assertEquals(new Color(148, 198, 0), sh2.getLineColor()); // slightly different from PowerPoint!
-
- // the 5th slide has a picture and a texture fill
- XSLFSlide slide2 = ppt.createSlide().importContent(src.getSlides().get(4));
- List<XSLFShape> shapes2 = slide2.getShapes();
- assertEquals(2, shapes2.size());
-
- XSLFTextShape sh3 = (XSLFTextShape)shapes2.get(0);
- assertEquals("This slide overrides master background with a texture fill", sh3.getText());
- XSLFTextRun r3 = sh3.getTextParagraphs().get(0).getTextRuns().get(0);
- assertEquals("Century Gothic", r3.getFontFamily());
- //assertEquals(32.4.0, r3.getFontSize());
- assertTrue(r3.isBold());
- assertTrue(r3.isItalic());
- assertTrue(sameColor(new Color(148, 198, 0), r3.getFontColor()));
- assertNull(sh3.getFillColor());
- assertNull(sh3.getLineColor());
-
- XSLFPictureShape sh4 = (XSLFPictureShape)shapes2.get(1);
- XSLFPictureShape srcPic = (XSLFPictureShape)src.getSlides().get(4).getShapes().get(1);
- assertArrayEquals(sh4.getPictureData().getData(), srcPic.getPictureData().getData());
-
- ppt.close();
- }
-
- @Test
- public void testMergeSlides() throws IOException {
- XMLSlideShow ppt = new XMLSlideShow();
- String[] pptx = {"shapes.pptx", "themes.pptx", "layouts.pptx", "backgrounds.pptx"};
-
- for(String arg : pptx){
- XMLSlideShow src = XSLFTestDataSamples.openSampleDocument(arg);
-
- for(XSLFSlide srcSlide : src.getSlides()){
- ppt.createSlide().importContent(srcSlide);
- }
- }
- assertEquals(30, ppt.getSlides().size());
-
- ppt.close();
- }
- }
|