git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1128324 13f79535-47bb-0310-9956-ffa450edef68tags/REL_3_8_BETA3
@@ -22,6 +22,7 @@ import java.util.List; | |||
import org.apache.poi.POIXMLDocument; | |||
import org.apache.poi.util.Internal; | |||
import org.apache.poi.xslf.usermodel.XMLSlideShow; | |||
import org.apache.poi.xslf.usermodel.XSLFRelation; | |||
import org.apache.poi.openxml4j.exceptions.InvalidFormatException; | |||
import org.apache.poi.openxml4j.exceptions.OpenXML4JException; | |||
@@ -46,8 +47,9 @@ import org.openxmlformats.schemas.presentationml.x2006.main.SldDocument; | |||
import org.openxmlformats.schemas.presentationml.x2006.main.SldMasterDocument; | |||
/** | |||
* Experimental class to do low level processing | |||
* of pptx files. | |||
* Experimental class to do low level processing of pptx files. | |||
* | |||
* Most users should use the higher level {@link XMLSlideShow} instead. | |||
* | |||
* If you are using these low level classes, then you | |||
* will almost certainly need to refer to the OOXML | |||
@@ -113,6 +115,7 @@ public class XSLFSlideShow extends POIXMLDocument { | |||
} | |||
return getPresentation().getSldIdLst(); | |||
} | |||
/** | |||
* Returns the references from the presentation to its | |||
* slide masters. |
@@ -18,6 +18,8 @@ package org.apache.poi.xslf.usermodel; | |||
import java.io.IOException; | |||
import org.apache.poi.openxml4j.exceptions.OpenXML4JException; | |||
import org.apache.poi.openxml4j.opc.OPCPackage; | |||
import org.apache.poi.sl.usermodel.MasterSheet; | |||
import org.apache.poi.sl.usermodel.Resources; | |||
import org.apache.poi.sl.usermodel.Slide; | |||
@@ -27,6 +29,7 @@ import org.apache.xmlbeans.XmlException; | |||
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlide; | |||
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideIdList; | |||
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideIdListEntry; | |||
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideMasterIdList; | |||
/** | |||
* High level representation of a ooxml slideshow. | |||
@@ -42,6 +45,7 @@ public class XMLSlideShow implements SlideShow { | |||
this.slideShow = xml; | |||
// Build the main masters list - TODO | |||
CTSlideMasterIdList masterIds = slideShow.getSlideMasterReferences(); | |||
// Build the slides list | |||
CTSlideIdList slideIds = slideShow.getSlideReferences(); | |||
@@ -55,6 +59,10 @@ public class XMLSlideShow implements SlideShow { | |||
// Build the notes list - TODO | |||
} | |||
public XMLSlideShow(OPCPackage pkg) throws XmlException, IOException, OpenXML4JException { | |||
this(new XSLFSlideShow(pkg)); | |||
} | |||
public XSLFSlideShow _getXSLFSlideShow() { | |||
return slideShow; | |||
} |
@@ -0,0 +1,58 @@ | |||
/* ==================================================================== | |||
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; | |||
import junit.framework.TestCase; | |||
import org.apache.poi.openxml4j.opc.PackagePart; | |||
import org.apache.poi.xslf.usermodel.XMLSlideShow; | |||
import org.apache.poi.xslf.usermodel.XSLFSlide; | |||
public class TestXSLFBugs extends TestCase { | |||
public void test51187() throws Exception { | |||
XMLSlideShow ss = XSLFTestDataSamples.openSampleDocument("51187.pptx"); | |||
assertEquals(1, ss.getSlides().length); | |||
XSLFSlide slide = ss.getSlides()[0]; | |||
// Check the relations on it | |||
// Note - rId3 is a self reference | |||
PackagePart slidePart = ss._getXSLFSlideShow().getSlidePart( | |||
ss._getXSLFSlideShow().getSlideReferences().getSldIdArray(0) | |||
); | |||
assertEquals("/ppt/slides/slide1.xml", slidePart.getPartName().toString()); | |||
assertEquals("/ppt/slideLayouts/slideLayout12.xml", slidePart.getRelationship("rId1").getTargetURI().toString()); | |||
assertEquals("/ppt/notesSlides/notesSlide1.xml", slidePart.getRelationship("rId2").getTargetURI().toString()); | |||
assertEquals("/ppt/slides/slide1.xml", slidePart.getRelationship("rId3").getTargetURI().toString()); | |||
assertEquals("/ppt/media/image1.png", slidePart.getRelationship("rId4").getTargetURI().toString()); | |||
// Save and re-load | |||
ss = XSLFTestDataSamples.writeOutAndReadBack(ss); | |||
assertEquals(1, ss.getSlides().length); | |||
slidePart = ss._getXSLFSlideShow().getSlidePart( | |||
ss._getXSLFSlideShow().getSlideReferences().getSldIdArray(0) | |||
); | |||
assertEquals("/ppt/slides/slide1.xml", slidePart.getPartName().toString()); | |||
assertEquals("/ppt/slideLayouts/slideLayout12.xml", slidePart.getRelationship("rId1").getTargetURI().toString()); | |||
assertEquals("/ppt/notesSlides/notesSlide1.xml", slidePart.getRelationship("rId2").getTargetURI().toString()); | |||
// TODO Fix this | |||
// assertEquals("/ppt/slides/slide1.xml", slidePart.getRelationship("rId3").getTargetURI().toString()); | |||
assertEquals("/ppt/media/image1.png", slidePart.getRelationship("rId4").getTargetURI().toString()); | |||
} | |||
} |
@@ -0,0 +1,51 @@ | |||
/* ==================================================================== | |||
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; | |||
import java.io.ByteArrayInputStream; | |||
import java.io.ByteArrayOutputStream; | |||
import java.io.InputStream; | |||
import org.apache.poi.POIDataSamples; | |||
import org.apache.poi.openxml4j.opc.OPCPackage; | |||
import org.apache.poi.xslf.usermodel.XMLSlideShow; | |||
/** | |||
* @author Yegor Kozlov | |||
*/ | |||
public class XSLFTestDataSamples { | |||
public static XMLSlideShow openSampleDocument(String sampleName) { | |||
InputStream is = POIDataSamples.getSlideShowInstance().openResourceAsStream(sampleName); | |||
try { | |||
return new XMLSlideShow(OPCPackage.open(is)); | |||
} catch (Exception e) { | |||
throw new RuntimeException(e); | |||
} | |||
} | |||
public static XMLSlideShow writeOutAndReadBack(XMLSlideShow doc) { | |||
try { | |||
ByteArrayOutputStream baos = new ByteArrayOutputStream(4096); | |||
doc._getXSLFSlideShow().write(baos); | |||
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); | |||
return new XMLSlideShow(OPCPackage.open(bais)); | |||
} catch (Exception e) { | |||
throw new RuntimeException(e); | |||
} | |||
} | |||
} |