浏览代码

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
tags/REL_3_8_BETA3
Nick Burch 13 年前
父节点
当前提交
26e1eb1d5d

+ 5
- 2
src/ooxml/java/org/apache/poi/xslf/XSLFSlideShow.java 查看文件



import org.apache.poi.POIXMLDocument; import org.apache.poi.POIXMLDocument;
import org.apache.poi.util.Internal; import org.apache.poi.util.Internal;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFRelation; import org.apache.poi.xslf.usermodel.XSLFRelation;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException; import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.openxmlformats.schemas.presentationml.x2006.main.SldMasterDocument; 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 * If you are using these low level classes, then you
* will almost certainly need to refer to the OOXML * will almost certainly need to refer to the OOXML
} }
return getPresentation().getSldIdLst(); return getPresentation().getSldIdLst();
} }
/** /**
* Returns the references from the presentation to its * Returns the references from the presentation to its
* slide masters. * slide masters.

+ 8
- 0
src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java 查看文件



import java.io.IOException; 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.MasterSheet;
import org.apache.poi.sl.usermodel.Resources; import org.apache.poi.sl.usermodel.Resources;
import org.apache.poi.sl.usermodel.Slide; import org.apache.poi.sl.usermodel.Slide;
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlide; import org.openxmlformats.schemas.presentationml.x2006.main.CTSlide;
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideIdList; import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideIdList;
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideIdListEntry; import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideIdListEntry;
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideMasterIdList;


/** /**
* High level representation of a ooxml slideshow. * High level representation of a ooxml slideshow.
this.slideShow = xml; this.slideShow = xml;
// Build the main masters list - TODO // Build the main masters list - TODO
CTSlideMasterIdList masterIds = slideShow.getSlideMasterReferences();
// Build the slides list // Build the slides list
CTSlideIdList slideIds = slideShow.getSlideReferences(); CTSlideIdList slideIds = slideShow.getSlideReferences();
// Build the notes list - TODO // Build the notes list - TODO
} }
public XMLSlideShow(OPCPackage pkg) throws XmlException, IOException, OpenXML4JException {
this(new XSLFSlideShow(pkg));
}
public XSLFSlideShow _getXSLFSlideShow() { public XSLFSlideShow _getXSLFSlideShow() {
return slideShow; return slideShow;
} }

+ 58
- 0
src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java 查看文件

/* ====================================================================
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());
}
}

+ 51
- 0
src/ooxml/testcases/org/apache/poi/xslf/XSLFTestDataSamples.java 查看文件

/* ====================================================================
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);
}
}
}

二进制
test-data/slideshow/51187.pptx 查看文件


正在加载...
取消
保存