Few XSLF tweaks, and add a unit test that shows that bug #51187 exists (problem with self references)

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1128324 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2011-05-27 14:35:44 +00:00
parent e21094eaaa
commit 26e1eb1d5d
5 changed files with 122 additions and 2 deletions

View File

@ -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.

View File

@ -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;
}

View File

@ -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());
}
}

View File

@ -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);
}
}
}

Binary file not shown.