public static final String EXTENDED_PROPERTIES_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties";
+ // OLE embeddings relation name
public static final String OLE_OBJECT_REL_TYPE="http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject";
+ // Embedded OPC documents relation name
+ public static final String PACK_OBJECT_REL_TYPE="http://schemas.openxmlformats.org/officeDocument/2006/relationships/package";
+
/** The OPC Package */
private Package pkg;
/**
* The embedded OLE2 files in the OPC package
*/
- private List<PackagePart> embedds;
+ protected List<PackagePart> embedds = new LinkedList<PackagePart>();
protected POIXMLDocument() {}
// Get core part
this.corePart = this.pkg.getPart(coreDocRelationship);
-
- // Get any embedded OLE2 documents
- this.embedds = new LinkedList<PackagePart>();
- for(PackageRelationship rel : corePart.getRelationshipsByType(OLE_OBJECT_REL_TYPE)) {
- embedds.add(getTargetPart(rel));
- }
+
} catch (OpenXML4JException e) {
throw new IOException(e.toString());
}
}
+
protected POIXMLDocument(String path) throws IOException {
this(openPackage(path));
}
import org.openxml4j.exceptions.OpenXML4JException;
import org.openxml4j.opc.Package;
import org.openxml4j.opc.PackagePart;
+import org.openxml4j.opc.PackageRelationship;
import org.openxml4j.opc.PackageRelationshipCollection;
import org.openxmlformats.schemas.presentationml.x2006.main.CTNotesSlide;
import org.openxmlformats.schemas.presentationml.x2006.main.CTPresentation;
presentationDoc =
PresentationDocument.Factory.parse(getCorePart().getInputStream());
+
+ for (CTSlideIdListEntry ctSlide : getSlideReferences().getSldIdArray()) {
+ PackagePart slidePart =
+ getTargetPart(getCorePart().getRelationship(ctSlide.getId2()));
+
+ for(PackageRelationship rel : slidePart.getRelationshipsByType(OLE_OBJECT_REL_TYPE))
+ embedds.add(getTargetPart(rel)); // TODO: Add this reference to each slide as well
+
+ for(PackageRelationship rel : slidePart.getRelationshipsByType(PACK_OBJECT_REL_TYPE))
+ embedds.add(getTargetPart(rel));
+ }
}
public XSLFSlideShow(String file) throws OpenXML4JException, IOException, XmlException {
this(openPackage(file));
null,
null
);
-
+ public static final XSSFRelation OLEEMBEDDINGS = new XSSFRelation(
+ null,
+ OLE_OBJECT_REL_TYPE,
+ null,
+ null
+ );
+
+ public static final XSSFRelation PACKEMBEDDINGS = new XSSFRelation(
+ null,
+ PACK_OBJECT_REL_TYPE,
+ null,
+ null
+ );
+
+
public static class XSSFRelation {
private String TYPE;
private String REL;
PackageRelationshipCollection hyperlinkRels =
part.getRelationshipsByType(SHEET_HYPERLINKS.REL);
sheet.initHyperlinks(hyperlinkRels);
+
+ // Get the embeddings for the workbook
+ for(PackageRelationship rel : part.getRelationshipsByType(OLEEMBEDDINGS.REL))
+ embedds.add(getTargetPart(rel)); // TODO: Add this reference to each sheet as well
+
+ for(PackageRelationship rel : part.getRelationshipsByType(PACKEMBEDDINGS.REL))
+ embedds.add(getTargetPart(rel));
}
} catch (XmlException e) {
throw new IOException(e.toString());
tables.add(new XWPFTable(table));
}
}
+
+ this.embedds = new LinkedList<PackagePart>();
+ for(PackageRelationship rel : getCorePart().getRelationshipsByType(OLE_OBJECT_REL_TYPE)) {
+ embedds.add(getTargetPart(rel));
+ }
+
+ for(PackageRelationship rel : getCorePart().getRelationshipsByType(PACK_OBJECT_REL_TYPE)) {
+ embedds.add(getTargetPart(rel));
+ }
}
/**
assertTrue(f.exists());
POIXMLDocument doc = new XSSFWorkbook(Package.open(f.toString()));
- test(doc, 0);
+ test(doc, 4);
}
public void testWord() throws Exception {
assertTrue(f.exists());
POIXMLDocument doc = new XWPFDocument(Package.open(f.toString()));
- test(doc, 4);
+ test(doc, 5);
}
public void testPowerPoint() throws Exception {
assertTrue(f.exists());
POIXMLDocument doc = new XSLFSlideShow(Package.open(f.toString()));
- test(doc, 0);
+ test(doc, 4);
}
private void test(POIXMLDocument doc, int expectedCount) throws Exception {