@Override public XSLFTextBox createTextBox(){ XSLFTextBox sh = getDrawing().createTextBox(); getShapes().add(sh); sh.setParent(this); return sh; }
@Override protected final void commit() throws IOException { XmlOptions xmlOptions = new XmlOptions(DEFAULT_XML_OPTIONS); String docName = getRootElementName(); if(docName != null) { xmlOptions.setSaveSyntheticDocumentElement( new QName("http://schemas.openxmlformats.org/presentationml/2006/main", docName)); } PackagePart part = getPackagePart(); OutputStream out = part.getOutputStream(); getXmlObject().save(out, xmlOptions); out.close(); }
@Override public XSLFPictureShape createPicture(PictureData pictureData){ if (!(pictureData instanceof XSLFPictureData)) { throw new IllegalArgumentException("pictureData needs to be of type XSLFPictureData"); } RelationPart rp = addRelation(null, XSLFRelation.IMAGES, (XSLFPictureData)pictureData); XSLFPictureShape sh = getDrawing().createPicture(rp.getRelationship().getId()); new DrawPictureShape(sh).resize(); getShapes().add(sh); sh.setParent(this); return sh; }
/** * Removes all of the elements from this container (optional operation). * The container will be empty after this call returns. */ @Override public void clear() { List<XSLFShape> shapes = new ArrayList<>(getShapes()); for(XSLFShape shape : shapes){ removeShape(shape); } }
/** * Helper method for initializing drawing and shapes in one go. * If they are initialized separately, there's a risk that shapes * get added twice, e.g. a shape is added to the drawing, then * buildShapes is called and at last the shape is added to shape list */ private void initDrawingAndShapes() { CTGroupShape cgs = getSpTree(); if(_drawing == null) { _drawing = new XSLFDrawing(this, cgs); } if (_shapes == null) { _shapes = buildShapes(cgs, this); } }
private void wipeAndReinitialize(XSLFSheet src, int offset) { // explicitly initialize drawing and shapes from _spTree _shapes = null; _drawing = null; initDrawingAndShapes(); // placeholders will be implicitly initialized when requested _placeholders = null; // update each shape according to its own additional copy rules List<XSLFShape> tgtShapes = getShapes(); List<XSLFShape> srcShapes = src.getShapes(); for(int i = 0; i < srcShapes.size(); i++){ XSLFShape s1 = srcShapes.get(i); XSLFShape s2 = tgtShapes.get(offset + i); s2.copy(s1); } }
/** * Import a picture data from another document. * * @param blipId ID of the package relationship to retrieve. * @param parent parent document containing the data to import * @return ID of the created relationship */ String importBlip(String blipId, POIXMLDocumentPart parent) { final XSLFPictureData parData = parent.getRelationPartById(blipId).getDocumentPart(); final XSLFPictureData pictureData; if (getPackagePart().getPackage() == parent.getPackagePart().getPackage()) { // handle ref counter correct, if the parent document is the same as this pictureData = parData; } else { XMLSlideShow ppt = getSlideShow(); pictureData = ppt.addPicture(parData.getData(), parData.getType()); } RelationPart rp = addRelation(blipId, XSLFRelation.IMAGES, pictureData); return rp.getRelationship().getId(); }
@Override public String getAddress() { final String id = _link.getId(); if (id == null || id.isEmpty()) { return _link.getAction(); } final PackageRelationship rel = _sheet.getPackagePart().getRelationship(id); if (rel == null) { return null; } final URI targetURI = rel.getTargetURI(); return (targetURI == null) ? null : targetURI.toASCIIString(); }
public boolean removeShape(XSLFShape xShape) { XmlObject obj = xShape.getXmlObject(); CTGroupShape spTree = getSpTree(); deregisterShapeId(xShape.getShapeId()); if(obj instanceof CTShape){ spTree.getSpList().remove(obj); } else if (obj instanceof CTPicture) { XSLFPictureShape ps = (XSLFPictureShape)xShape; removePictureRelation(ps); spTree.getPicList().remove(obj); } else { throw new IllegalArgumentException("Unsupported shape: " + xShape); return getShapes().remove(xShape);
/** * Returns an iterator over the shapes in this sheet * * @return an iterator over the shapes in this sheet */ @Override public Iterator<XSLFShape> iterator(){ return getShapes().iterator(); }
for (XSLFSheet m = masterSheet; m != null; m = (XSLFSheet)m.getMasterSheet()) { masterSheet = m; XmlObject xo = masterSheet.getXmlObject(); XmlCursor cur = xo.newCursor(); try {
public XSLFPictureShape createPicture(int pictureIndex){ List<PackagePart> pics = getPackagePart().getPackage() .getPartsByName(Pattern.compile("/ppt/media/image" + (pictureIndex + 1) + ".*?")); if(pics.size() == 0) { throw new IllegalArgumentException("Picture with index=" + pictureIndex + " was not found"); } PackagePart pic = pics.get(0); PackageRelationship rel = getPackagePart().addRelationship( pic.getPartName(), TargetMode.INTERNAL, XSLFRelation.IMAGES.getRelation()); addRelation(rel.getId(), new XSLFPictureData(pic, rel)); XSLFPictureShape sh = getDrawing().createPicture(rel.getId()); sh.resize(); getShapeList().add(sh); return sh; }
/** * Append content to this sheet. * * @param src the source sheet * @return modified <code>this</code>. */ @SuppressWarnings("unused") public XSLFSheet appendContent(XSLFSheet src){ int numShapes = getShapes().size(); CTGroupShape spTree = getSpTree(); CTGroupShape srcTree = src.getSpTree(); for(XmlObject ch : srcTree.selectPath("*")){ if(ch instanceof CTShape){ // simple shape spTree.addNewSp().set(ch.copy()); } else if (ch instanceof CTGroupShape){ spTree.addNewGrpSp().set(ch.copy()); } else if (ch instanceof CTConnector){ spTree.addNewCxnSp().set(ch.copy()); } else if (ch instanceof CTPicture){ spTree.addNewPic().set(ch.copy()); } else if (ch instanceof CTGraphicalObjectFrame){ spTree.addNewGraphicFrame().set(ch.copy()); } } wipeAndReinitialize(src, numShapes); return this; }
public PaintStyle getFillPaint() { XSLFSheet sheet = getSheet(); XSLFTheme theme = sheet.getTheme(); final boolean hasPlaceholder = getPlaceholder() != null; XmlObject props = getCellProperties(false); XSLFFillProperties fp = XSLFPropertiesDelegate.getFillDelegate(props); if (fp != null) { PaintStyle paint = selectPaint(fp, null, sheet.getPackagePart(), theme, hasPlaceholder); if (paint != null) { return paint; XMLSlideShow slideShow = sheet.getSlideShow(); CTTableStyleCellStyle tcStyle = tps.getTcStyle(); if (tcStyle.isSetFill()) {
XSLFSimpleShape getPlaceholder(CTPlaceholder ph) { XSLFSimpleShape shape = null; if(ph.isSetIdx()) { shape = getPlaceholderById((int)ph.getIdx()); } if (shape == null && ph.isSetType()) { shape = getPlaceholderByType(ph.getType().intValue()); } return shape; }
@Override public void linkToSlide(Slide<XSLFShape,XSLFTextParagraph> slide) { if (_link.isSetId() && !_link.getId().isEmpty()) { _sheet.getPackagePart().removeRelationship(_link.getId()); } RelationPart rp = _sheet.addRelation(null, XSLFRelation.SLIDE, (XSLFSheet) slide); _link.setId(rp.getRelationship().getId()); _link.setAction("ppaction://hlinksldjump"); }
public XSLFAutoShape createAutoShape(){ List<XSLFShape> shapes = getShapeList(); XSLFAutoShape sh = getDrawing().createAutoShape(); shapes.add(sh); return sh; }
XSLFSheet masterSheet = getSheet().getMasterSheet(); CTPlaceholder ph = getCTPlaceholder(); masterShape = masterSheet.getPlaceholder(ph); if (masterShape != null) { ok = visitor.fetch(masterShape); XSLFSheet master = masterSheet.getMasterSheet(); if (master != null) { masterShape = master.getPlaceholderByType(textType); if (masterShape != null) { ok = visitor.fetch(masterShape);
@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); }
/** * Helper method for sheet and group shapes * * @param pictureShape the picture shapes whose relation is to be removed, * only if there are no more relations on its sheet to that picture */ void removePictureRelation(XSLFPictureShape pictureShape) { int numberOfRelations = 0; String targetBlipId = pictureShape.getBlipId(); for (XSLFShape shape : pictureShape.getSheet().getShapes()) { if (shape instanceof XSLFPictureShape) { XSLFPictureShape currentPictureShape = ((XSLFPictureShape) shape); String currentBlipId = currentPictureShape.getBlipId(); if (currentBlipId != null && currentBlipId.equals(targetBlipId)) { numberOfRelations++; } } } if (numberOfRelations <= 1) { removeRelation(pictureShape.getBlipId()); } }