@Override public PictureType getType() { String ct = getContentType(); if (XSLFRelation.IMAGE_EMF.getContentType().equals(ct)) { return PictureType.EMF; } else if (XSLFRelation.IMAGE_WMF.getContentType().equals(ct)) { return PictureType.WMF; } else if (XSLFRelation.IMAGE_PICT.getContentType().equals(ct)) { return PictureType.PICT; } else if (XSLFRelation.IMAGE_JPEG.getContentType().equals(ct)) { return PictureType.JPEG; } else if (XSLFRelation.IMAGE_PNG.getContentType().equals(ct)) { return PictureType.PNG; } else if (XSLFRelation.IMAGE_DIB.getContentType().equals(ct)) { return PictureType.DIB; } else if (XSLFRelation.IMAGE_GIF.getContentType().equals(ct)) { return PictureType.GIF; } else if (XSLFRelation.IMAGE_EPS.getContentType().equals(ct)) { return PictureType.EPS; } else if (XSLFRelation.IMAGE_BMP.getContentType().equals(ct)) { return PictureType.BMP; } else if (XSLFRelation.IMAGE_WPG.getContentType().equals(ct)) { return PictureType.WPG; } else if (XSLFRelation.IMAGE_WDP.getContentType().equals(ct)) { return PictureType.WDP; } else if (XSLFRelation.IMAGE_TIFF.getContentType().equals(ct)) { return PictureType.TIFF; } else {
/** * Gets the PackagePart of the notes for the * given slide, or null if there isn't one. */ public PackagePart getNodesPart(CTSlideIdListEntry parentSlide) throws IOException, XmlException { PackageRelationshipCollection notes; PackagePart slidePart = getSlidePart(parentSlide); try { notes = slidePart.getRelationshipsByType(XSLFRelation.NOTES.getRelation()); } catch(InvalidFormatException e) { throw new IllegalStateException(e); } if(notes.size() == 0) { // No notes for this slide return null; } if(notes.size() > 1) { throw new IllegalStateException("Expecting 0 or 1 notes for a slide, but found " + notes.size()); } try { return slidePart.getRelatedPart(notes.getRelationship(0)); } catch(InvalidFormatException e) { throw new IllegalStateException(e); } } /**
/** * @since POI 3.14-Beta1 */ @Override protected POIXMLRelation getDescriptor(String relationshipType) { return XSLFRelation.getInstance(relationshipType); }
for (POIXMLDocumentPart p : getRelations()) { if (p instanceof XSLFTheme) { themeIndexList.add(XSLFRelation.THEME.getFileNameIndex(p));
private int findNextAvailableFileNameIndex(XSLFRelation relationType, int idx) { // Bug 55791: We also need to check that the resulting file name is not already taken // this can happen when removing/adding slides, notes or charts while (true) { String fileName = relationType.getFileName(idx); boolean found = false; for (POIXMLDocumentPart relation : getRelations()) { if (relation.getPackagePart() != null && fileName.equals(relation.getPackagePart().getPartName().getName())) { // name is taken => try next one found = true; break; } } if (!found && getPackage().getPartsByName(Pattern.compile(Pattern.quote(fileName))).size() > 0) { // name is taken => try next one found = true; } if (!found) { break; } idx++; } return idx; }
@Override public OutputStream updateObjectData(final Application application, final ObjectMetaData metaData) throws IOException { final ObjectMetaData md = (application != null) ? application.getMetaData() : metaData; if (md == null || md.getClassID() == null) { throw new IllegalArgumentException("either application and/or metaData needs to be set."); } final XSLFSheet sheet = getSheet(); final RelationPart rp; if (_oleObject.isSetId()) { // object data was already set rp = sheet.getRelationPartById(_oleObject.getId()); } else { // object data needs to be initialized try { final XSLFRelation descriptor = XSLFRelation.OLE_OBJECT; final OPCPackage pack = sheet.getPackagePart().getPackage(); int nextIdx = pack.getUnusedPartIndex(descriptor.getDefaultFileName()); rp = sheet.createRelationship(descriptor, XSLFFactory.getInstance(), nextIdx, false); _oleObject.setId(rp.getRelationship().getId()); } catch (InvalidFormatException e) { throw new IOException("Unable to add new ole embedding", e); } // setting spid only works with a vml drawing object // oleObj.setSpid("_x0000_s"+(1025+objectIdx)); } _oleObject.setProgId(md.getProgId()); _oleObject.setName(md.getObjectName()); return new XSLFObjectOutputStream(rp.getDocumentPart().getPackagePart(),md); }
/** * Create a blank notes slide. */ private XSLFNotes createNotesSlide(XSLFSlide slide) { if (_notesMaster == null) { createNotesMaster(); } int slideIndex = XSLFRelation.SLIDE.getFileNameIndex(slide); XSLFRelation relationType = XSLFRelation.NOTES; slideIndex = findNextAvailableFileNameIndex(relationType, slideIndex); // add notes slide to presentation XSLFNotes notesSlide = (XSLFNotes) createRelationship (relationType, XSLFFactory.getInstance(), slideIndex); // link slide and notes slide with each other slide.addRelation(null, relationType, notesSlide); notesSlide.addRelation(null, XSLFRelation.NOTES_MASTER, _notesMaster); notesSlide.addRelation(null, XSLFRelation.SLIDE, slide); notesSlide.importContent(_notesMaster); return notesSlide; }
private int findNextAvailableFileNameIndex(XSLFRelation relationType, int idx) { // Bug 55791: We also need to check that the resulting file name is not already taken // this can happen when removing/adding slides, notes or charts while (true) { String fileName = relationType.getFileName(idx); boolean found = false; for (POIXMLDocumentPart relation : getRelations()) { if (relation.getPackagePart() != null && fileName.equals(relation.getPackagePart().getPartName().getName())) { // name is taken => try next one found = true; break; } } if (!found && getPackage().getPartsByName(Pattern.compile(Pattern.quote(fileName))).size() > 0) { // name is taken => try next one found = true; } if (!found) { break; } idx++; } return idx; }
@Override public OutputStream updateObjectData(final Application application, final ObjectMetaData metaData) throws IOException { final ObjectMetaData md = (application != null) ? application.getMetaData() : metaData; if (md == null || md.getClassID() == null) { throw new IllegalArgumentException("either application and/or metaData needs to be set."); } final XSLFSheet sheet = getSheet(); final RelationPart rp; if (_oleObject.isSetId()) { // object data was already set rp = sheet.getRelationPartById(_oleObject.getId()); } else { // object data needs to be initialized try { final XSLFRelation descriptor = XSLFRelation.OLE_OBJECT; final OPCPackage pack = sheet.getPackagePart().getPackage(); int nextIdx = pack.getUnusedPartIndex(descriptor.getDefaultFileName()); rp = sheet.createRelationship(descriptor, XSLFFactory.getInstance(), nextIdx, false); _oleObject.setId(rp.getRelationship().getId()); } catch (InvalidFormatException e) { throw new IOException("Unable to add new ole embedding", e); } // setting spid only works with a vml drawing object // oleObj.setSpid("_x0000_s"+(1025+objectIdx)); } _oleObject.setProgId(md.getProgId()); _oleObject.setName(md.getObjectName()); return new XSLFObjectOutputStream(rp.getDocumentPart().getPackagePart(),md); }
private void linkToExternal(String url) { PackagePart thisPP = _sheet.getPackagePart(); if (_link.isSetId() && !_link.getId().isEmpty()) { thisPP.removeRelationship(_link.getId()); } PackageRelationship rel = thisPP.addExternalRelationship(url, XSLFRelation.HYPERLINK.getRelation()); _link.setId(rel.getId()); if (_link.isSetAction()) { _link.unsetAction(); } }
public XMLSlideShow(OPCPackage pkg) { super(pkg); try { if (getCorePart().getContentType().equals(XSLFRelation.THEME_MANAGER.getContentType())) { rebase(getPackage()); } //build a tree of POIXMLDocumentParts, this presentation being the root load(XSLFFactory.getInstance()); } catch (Exception e) { throw new POIXMLException(e); } }
/** * @since POI 3.14-Beta1 */ @Override protected POIXMLRelation getDescriptor(String relationshipType) { return XSLFRelation.getInstance(relationshipType); }
for (POIXMLDocumentPart p : getRelations()) { if (p instanceof XSLFTheme) { themeIndexList.add(XSLFRelation.THEME.getFileNameIndex(p));
/** * Returns all the comments for the given slide */ @Internal public CTCommentList getSlideComments(CTSlideIdListEntry slide) throws IOException, XmlException { PackageRelationshipCollection commentRels; PackagePart slidePart = getSlidePart(slide); try { commentRels = slidePart.getRelationshipsByType(XSLFRelation.COMMENTS.getRelation()); } catch(InvalidFormatException e) { throw new IllegalStateException(e); } if(commentRels.size() == 0) { // No comments for this slide return null; } if(commentRels.size() > 1) { throw new IllegalStateException("Expecting 0 or 1 comments for a slide, but found " + commentRels.size()); } try { PackagePart cPart = slidePart.getRelatedPart( commentRels.getRelationship(0) ); CmLstDocument commDoc = CmLstDocument.Factory.parse(cPart.getInputStream(), DEFAULT_XML_OPTIONS); return commDoc.getCmLst(); } catch(InvalidFormatException e) { throw new IllegalStateException(e); } }
public XSLFSlideShow(OPCPackage container) throws OpenXML4JException, IOException, XmlException { super(container); if(getCorePart().getContentType().equals(XSLFRelation.THEME_MANAGER.getContentType())) { rebase(getPackage()); } presentationDoc = PresentationDocument.Factory.parse(getCorePart().getInputStream(), DEFAULT_XML_OPTIONS); embedds = new LinkedList<>(); for (CTSlideIdListEntry ctSlide : getSlideReferences().getSldIdArray()) { PackagePart corePart = getCorePart(); PackagePart slidePart = corePart.getRelatedPart(corePart.getRelationship(ctSlide.getId2())); for(PackageRelationship rel : slidePart.getRelationshipsByType(OLE_OBJECT_REL_TYPE)) { if (TargetMode.EXTERNAL == rel.getTargetMode()) { continue; } // TODO: Add this reference to each slide as well embedds.add(slidePart.getRelatedPart(rel)); } for (PackageRelationship rel : slidePart.getRelationshipsByType(PACK_OBJECT_REL_TYPE)) { embedds.add(slidePart.getRelatedPart(rel)); } } } public XSLFSlideShow(String file) throws OpenXML4JException, IOException, XmlException {
@Override public POIXMLDocumentPart createDocumentPart(POIXMLDocumentPart parent, PackageRelationship rel, PackagePart part){ POIXMLRelation descriptor = XSLFRelation.getInstance(rel.getRelationshipType()); if(descriptor == null || descriptor.getRelationClass() == null){ logger.log(POILogger.DEBUG, "using default POIXMLDocumentPart for " + rel.getRelationshipType()); return new POIXMLDocumentPart(part, rel); } try { Class<? extends POIXMLDocumentPart> cls = descriptor.getRelationClass(); Constructor<? extends POIXMLDocumentPart> constructor = cls.getDeclaredConstructor(PackagePart.class, PackageRelationship.class); return constructor.newInstance(part, rel); } catch (Exception e){ throw new POIXMLException(e); } }
/** * Create a blank notes slide. */ private XSLFNotes createNotesSlide(XSLFSlide slide) { if (_notesMaster == null) { createNotesMaster(); } int slideIndex = XSLFRelation.SLIDE.getFileNameIndex(slide); XSLFRelation relationType = XSLFRelation.NOTES; slideIndex = findNextAvailableFileNameIndex(relationType, slideIndex); // add notes slide to presentation XSLFNotes notesSlide = (XSLFNotes) createRelationship (relationType, XSLFFactory.getInstance(), slideIndex); // link slide and notes slide with each other slide.addRelation(null, relationType, notesSlide); notesSlide.addRelation(null, XSLFRelation.NOTES_MASTER, _notesMaster); notesSlide.addRelation(null, XSLFRelation.SLIDE, slide); notesSlide.importContent(_notesMaster); return notesSlide; }
private void addSlideParts(PackagePart slidePart, List<PackagePart> parts) { for (String relation : new String[]{ XSLFRelation.VML_DRAWING.getRelation(), XSLFRelation.SLIDE_LAYOUT.getRelation(), XSLFRelation.NOTES_MASTER.getRelation(), XSLFRelation.NOTES.getRelation() }) { try { for (PackageRelationship packageRelationship : slidePart.getRelationshipsByType(relation)) { if (packageRelationship.getTargetMode() == TargetMode.INTERNAL) { PackagePartName relName = PackagingURIHelper.createPartName(packageRelationship.getTargetURI()); parts.add(packageRelationship.getPackage().getPart(relName)); } } } catch (InvalidFormatException e) { } } //and slide of course parts.add(slidePart); }
if ( rel.getContentType().equals( contentType ) ) { return new SlideShowExtractor<>(new XMLSlideShow(pkg)); if (XSLFRelation.THEME_MANAGER.getContentType().equals(contentType)) { return new SlideShowExtractor<>(new XMLSlideShow(pkg));
private void addSlideParts(PackagePart slidePart, List<PackagePart> parts) { XSLFRelation.VML_DRAWING.getRelation(), XSLFRelation.SLIDE_LAYOUT.getRelation(), XSLFRelation.NOTES_MASTER.getRelation(), XSLFRelation.NOTES.getRelation() }) { PackageRelationshipCollection prc = null;