@Override void copy(XSLFShape sh){ super.copy(sh); CTGraphicalObjectData data = ((CTGraphicalObjectFrame)getXmlObject()).getGraphic().getGraphicData(); String uri = data.getUri(); if(uri.equals("http://schemas.openxmlformats.org/drawingml/2006/diagram")){ copyDiagram(data, (XSLFGraphicFrame)sh); } if(uri.equals("http://schemas.openxmlformats.org/drawingml/2006/chart")){ copyChart(data, (XSLFGraphicFrame)sh); } else { // TODO support other types of objects } }
static XSLFGraphicFrame create(CTGraphicalObjectFrame shape, XSLFSheet sheet){ final String uri = getUri(shape); switch (uri == null ? "" : uri) { case XSLFTable.TABLE_URI: return new XSLFTable(shape, sheet); case XSLFObjectShape.OLE_URI: return new XSLFObjectShape(shape, sheet); default: return new XSLFGraphicFrame(shape, sheet); } }
shapes.add(new XSLFPictureShape((CTPicture)ch, sheet)); } else if (ch instanceof CTGraphicalObjectFrame){ XSLFGraphicFrame shape = XSLFGraphicFrame.create((CTGraphicalObjectFrame)ch, sheet); shapes.add(shape); } else if (ch instanceof XmlAnyTypeImpl) {
@Override public XSLFPictureShape getFallbackPicture() { String xquery = "declare namespace p='http://schemas.openxmlformats.org/presentationml/2006/main'; " + "declare namespace mc='http://schemas.openxmlformats.org/markup-compatibility/2006' " + ".//mc:Fallback/*/p:pic" ; XmlObject xo = selectProperty(XmlObject.class, xquery); if (xo == null) { return null; } CTGroupShape gs; try { gs = CTGroupShape.Factory.parse(xo.newDomNode()); } catch (XmlException e) { LOG.log(POILogger.WARN, "Can't parse fallback picture stream of graphical frame", e); return null; } if (gs.sizeOfPicArray() == 0) { return null; } return new XSLFPictureShape(gs.getPicArray(0), getSheet()); } }
@Override public void setAnchor(Rectangle2D anchor){ CTTransform2D xfrm = ((CTGraphicalObjectFrame)getXmlObject()).getXfrm(); CTPoint2D off = xfrm.isSetOff() ? xfrm.getOff() : xfrm.addNewOff(); long x = Units.toEMU(anchor.getX()); long y = Units.toEMU(anchor.getY()); off.setX(x); off.setY(y); CTPositiveSize2D ext = xfrm.isSetExt() ? xfrm.getExt() : xfrm .addNewExt(); long cx = Units.toEMU(anchor.getWidth()); long cy = Units.toEMU(anchor.getHeight()); ext.setCx(cx); ext.setCy(cy); }
static XSLFGraphicFrame create(CTGraphicalObjectFrame shape, XSLFSheet sheet){ String uri = shape.getGraphic().getGraphicData().getUri(); if(XSLFTable.TABLE_URI.equals(uri)){ return new XSLFTable(shape, sheet); } else { return new XSLFGraphicFrame(shape, sheet); } }
private void copyDiagram(CTGraphicalObjectData objData, XSLFGraphicFrame srcShape){ String xpath = "declare namespace dgm='http://schemas.openxmlformats.org/drawingml/2006/diagram' $this//dgm:relIds"; XmlObject[] obj = objData.selectPath(xpath); if(obj != null && obj.length == 1){ XmlCursor c = obj[0].newCursor(); XSLFSheet sheet = srcShape.getSheet(); try { String dm = c.getAttributeText(new QName("http://schemas.openxmlformats.org/officeDocument/2006/relationships", "dm")); PackageRelationship dmRel = sheet.getPackagePart().getRelationship(dm); PackagePart dmPart = sheet.getPackagePart().getRelatedPart(dmRel); getSheet().importPart(dmRel, dmPart); String lo = c.getAttributeText(new QName("http://schemas.openxmlformats.org/officeDocument/2006/relationships", "lo")); PackageRelationship loRel = sheet.getPackagePart().getRelationship(lo); PackagePart loPart = sheet.getPackagePart().getRelatedPart(loRel); getSheet().importPart(loRel, loPart); String qs = c.getAttributeText(new QName("http://schemas.openxmlformats.org/officeDocument/2006/relationships", "qs")); PackageRelationship qsRel = sheet.getPackagePart().getRelationship(qs); PackagePart qsPart = sheet.getPackagePart().getRelatedPart(qsRel); getSheet().importPart(qsRel, qsPart); String cs = c.getAttributeText(new QName("http://schemas.openxmlformats.org/officeDocument/2006/relationships", "cs")); PackageRelationship csRel = sheet.getPackagePart().getRelationship(cs); PackagePart csPart = sheet.getPackagePart().getRelatedPart(csRel); getSheet().importPart(csRel, csPart); } catch (InvalidFormatException e){ throw new POIXMLException(e); } c.dispose(); } }
@Override public Rectangle2D getAnchor(){ CTTransform2D xfrm = ((CTGraphicalObjectFrame)getXmlObject()).getXfrm(); CTPoint2D off = xfrm.getOff(); double x = Units.toPoints(off.getX()); double y = Units.toPoints(off.getY()); CTPositiveSize2D ext = xfrm.getExt(); double cx = Units.toPoints(ext.getCx()); double cy = Units.toPoints(ext.getCy()); return new Rectangle2D.Double(x, y, cx, cy); }
@Override public XSLFPictureShape getFallbackPicture() { String xquery = "declare namespace p='http://schemas.openxmlformats.org/presentationml/2006/main'; " + "declare namespace mc='http://schemas.openxmlformats.org/markup-compatibility/2006' " + ".//mc:Fallback/*/p:pic" ; XmlObject xo = selectProperty(XmlObject.class, xquery); if (xo == null) { return null; } CTGroupShape gs; try { gs = CTGroupShape.Factory.parse(xo.newDomNode()); } catch (XmlException e) { LOG.log(POILogger.WARN, "Can't parse fallback picture stream of graphical frame", e); return null; } if (gs.sizeOfPicArray() == 0) { return null; } return new XSLFPictureShape(gs.getPicArray(0), getSheet()); } }
private void copyChart(CTGraphicalObjectData objData, XSLFGraphicFrame srcShape) { XSLFSlide slide = (XSLFSlide) getSheet(); XSLFSheet src = srcShape.getSheet(); String xpath = "declare namespace c='http://schemas.openxmlformats.org/drawingml/2006/chart' c:chart"; XmlObject[] obj = objData.selectPath(xpath); if (obj != null && obj.length == 1) { XmlCursor c = obj[0].newCursor(); try { // duplicate chart with embedded workbook QName idQualifiedName = new QName("http://schemas.openxmlformats.org/officeDocument/2006/relationships", "id"); String id = c.getAttributeText(idQualifiedName); XSLFChart srcChart = (XSLFChart) src.getRelationById(id); XSLFChart chartCopy = slide.getSlideShow().createChart(slide); chartCopy.importContent(srcChart); chartCopy.setWorkbook(srcChart.getWorkbook()); c.setAttributeText(idQualifiedName, slide.getRelationId(chartCopy)); } catch (InvalidFormatException e) { throw new POIXMLException(e); } catch (IOException e) { throw new POIXMLException(e); } c.dispose(); } }
@Override void copy(XSLFShape sh){ super.copy(sh); CTGraphicalObjectData data = ((CTGraphicalObjectFrame)getXmlObject()).getGraphic().getGraphicData(); String uri = data.getUri(); if(uri.equals("http://schemas.openxmlformats.org/drawingml/2006/diagram")){ copyDiagram(data, (XSLFGraphicFrame)sh); } if(uri.equals("http://schemas.openxmlformats.org/drawingml/2006/chart")){ copyChart(data, (XSLFGraphicFrame)sh); } else { // TODO support other types of objects } }
} else if (sh instanceof XSLFGraphicFrame) { XSLFGraphicFrame frame = (XSLFGraphicFrame) sh; XmlObject[] sp = frame.getXmlObject().selectPath( "declare namespace p='http://schemas.openxmlformats.org/presentationml/2006/main' .//*/p:oleObj"); if (sp != null) {
static XSLFGraphicFrame create(CTGraphicalObjectFrame shape, XSLFSheet sheet){ final String uri = getUri(shape); switch (uri == null ? "" : uri) { case XSLFTable.TABLE_URI: return new XSLFTable(shape, sheet); case XSLFObjectShape.OLE_URI: return new XSLFObjectShape(shape, sheet); default: return new XSLFGraphicFrame(shape, sheet); } }
protected List<XSLFShape> buildShapes(CTGroupShape spTree){ List<XSLFShape> shapes = new ArrayList<XSLFShape>(); for(XmlObject ch : spTree.selectPath("*")){ if(ch instanceof CTShape){ // simple shape XSLFAutoShape shape = XSLFAutoShape.create((CTShape)ch, this); shapes.add(shape); } else if (ch instanceof CTGroupShape){ shapes.add(new XSLFGroupShape((CTGroupShape)ch, this)); } else if (ch instanceof CTConnector){ shapes.add(new XSLFConnectorShape((CTConnector)ch, this)); } else if (ch instanceof CTPicture){ shapes.add(new XSLFPictureShape((CTPicture)ch, this)); } else if (ch instanceof CTGraphicalObjectFrame){ XSLFGraphicFrame shape = XSLFGraphicFrame.create((CTGraphicalObjectFrame)ch, this); shapes.add(shape); } } return shapes; }
private void copyDiagram(CTGraphicalObjectData objData, XSLFGraphicFrame srcShape){ String xpath = "declare namespace dgm='http://schemas.openxmlformats.org/drawingml/2006/diagram' $this//dgm:relIds"; XmlObject[] obj = objData.selectPath(xpath); if(obj != null && obj.length == 1){ XmlCursor c = obj[0].newCursor(); XSLFSheet sheet = srcShape.getSheet(); try { String dm = c.getAttributeText(new QName("http://schemas.openxmlformats.org/officeDocument/2006/relationships", "dm")); PackageRelationship dmRel = sheet.getPackagePart().getRelationship(dm); PackagePart dmPart = sheet.getPackagePart().getRelatedPart(dmRel); getSheet().importPart(dmRel, dmPart); String lo = c.getAttributeText(new QName("http://schemas.openxmlformats.org/officeDocument/2006/relationships", "lo")); PackageRelationship loRel = sheet.getPackagePart().getRelationship(lo); PackagePart loPart = sheet.getPackagePart().getRelatedPart(loRel); getSheet().importPart(loRel, loPart); String qs = c.getAttributeText(new QName("http://schemas.openxmlformats.org/officeDocument/2006/relationships", "qs")); PackageRelationship qsRel = sheet.getPackagePart().getRelationship(qs); PackagePart qsPart = sheet.getPackagePart().getRelatedPart(qsRel); getSheet().importPart(qsRel, qsPart); String cs = c.getAttributeText(new QName("http://schemas.openxmlformats.org/officeDocument/2006/relationships", "cs")); PackageRelationship csRel = sheet.getPackagePart().getRelationship(cs); PackagePart csPart = sheet.getPackagePart().getRelatedPart(csRel); getSheet().importPart(csRel, csPart); } catch (InvalidFormatException e){ throw new POIXMLException(e); } c.dispose(); } }
@Override public void setAnchor(Rectangle2D anchor){ CTTransform2D xfrm = ((CTGraphicalObjectFrame)getXmlObject()).getXfrm(); CTPoint2D off = xfrm.isSetOff() ? xfrm.getOff() : xfrm.addNewOff(); long x = Units.toEMU(anchor.getX()); long y = Units.toEMU(anchor.getY()); off.setX(x); off.setY(y); CTPositiveSize2D ext = xfrm.isSetExt() ? xfrm.getExt() : xfrm .addNewExt(); long cx = Units.toEMU(anchor.getWidth()); long cy = Units.toEMU(anchor.getHeight()); ext.setCx(cx); ext.setCy(cy); }
shapes.add(new XSLFPictureShape((CTPicture)ch, sheet)); } else if (ch instanceof CTGraphicalObjectFrame){ XSLFGraphicFrame shape = XSLFGraphicFrame.create((CTGraphicalObjectFrame)ch, sheet); shapes.add(shape); } else if (ch instanceof XmlAnyTypeImpl) {
private void copyChart(CTGraphicalObjectData objData, XSLFGraphicFrame srcShape) { XSLFSlide slide = (XSLFSlide) getSheet(); XSLFSheet src = srcShape.getSheet(); String xpath = "declare namespace c='http://schemas.openxmlformats.org/drawingml/2006/chart' c:chart"; XmlObject[] obj = objData.selectPath(xpath); if (obj != null && obj.length == 1) { XmlCursor c = obj[0].newCursor(); try { // duplicate chart with embedded workbook QName idQualifiedName = new QName("http://schemas.openxmlformats.org/officeDocument/2006/relationships", "id"); String id = c.getAttributeText(idQualifiedName); XSLFChart srcChart = (XSLFChart) src.getRelationById(id); XSLFChart chartCopy = slide.getSlideShow().createChart(slide); chartCopy.importContent(srcChart); chartCopy.setWorkbook(srcChart.getWorkbook()); c.setAttributeText(idQualifiedName, slide.getRelationId(chartCopy)); } catch (InvalidFormatException e) { throw new POIXMLException(e); } catch (IOException e) { throw new POIXMLException(e); } c.dispose(); } }
@Override public Rectangle2D getAnchor(){ CTTransform2D xfrm = ((CTGraphicalObjectFrame)getXmlObject()).getXfrm(); CTPoint2D off = xfrm.getOff(); double x = Units.toPoints(off.getX()); double y = Units.toPoints(off.getY()); CTPositiveSize2D ext = xfrm.getExt(); double cx = Units.toPoints(ext.getCx()); double cy = Units.toPoints(ext.getCy()); return new Rectangle2D.Double(x, y, cx, cy); }
} else if (sh instanceof XSLFGraphicFrame) { XSLFGraphicFrame frame = (XSLFGraphicFrame) sh; XmlObject[] sp = frame.getXmlObject().selectPath( "declare namespace p='http://schemas.openxmlformats.org/presentationml/2006/main' .//*/p:oleObj"); if (sp != null) {