Everything makes sense now, thanks Yegor!

I'll try it asap


   -
   - *Pablo Rivera*
   - Software Engineer
   -
   - [email protected]
   - T:(+34) 902 10 83 84
   -
      -
   - www.mediasq.com




2012/5/18 Yegor Kozlov <[email protected]>

> This is expected. These shapes are placeholders, not real shapes.
> When you create a slide from a predefined layout, PowerPoint copies
> all shapes defined in the master layout to the new slide.
> The shapes are placeholders and technically speaking they are dummy
> text shapes - there are no pictures/tables yet, the purpose of
> placeholders is to show places where the actual shapes will be placed.
>  When you click on such a placeholder shape in PowerPoint, it replaces
> the dummy shape with a real one (image, table, whatever)
>
> POI should do something like this:
>
>    public static void main(String[] args) throws Exception {
>        XMLSlideShow pptx = new XMLSlideShow(new
>                FileInputStream("layout_v0.potx"));
>        XSLFSlideMaster master = pptx.getSlideMasters()[0];
>
>        XSLFSlideLayout[] layouts = master.getSlideLayouts();
>        Iterator layout_it = new
> ArrayList(Arrays.asList(layouts)).iterator();
>        while (layout_it.hasNext()) {
>            XSLFSlideLayout layout = (XSLFSlideLayout) layout_it.next();
>            XSLFSlide slide = pptx.createSlide(layout);
>            XSLFShape[] shapes = slide.getShapes();
>            Iterator shapes_it = new
> ArrayList(Arrays.asList(shapes)).iterator();
>            while (shapes_it.hasNext()) {
>                XSLFShape shape = (XSLFShape) shapes_it.next();
>                System.out.println(shape.getShapeName());
>                if (shape instanceof XSLFConnectorShape) {
>                    System.out.println("CONNECTORSHAPE");
>                } else if (shape instanceof XSLFTextShape) {
>                    System.out.println("TEXTSHAPE");
>                     CTShape sh =  (CTShape)shape.getXmlObject();
>
>                    CTPlaceholder ph = sh.getNvSpPr().getNvPr().getPh();
>                    if(ph == null) {
>                        STPlaceholderType.Enum pType = ph.getType();
>                        if(ph.getType() == STPlaceholderType.PIC) {
> // picture placeholder
>                            Rectangle2D anchor = shape.getAnchor();
>
>                            // remove the placehoder shape
>                            slide.removeShape(shape);
>                            // insert a picture indead
>                            XSLFPictureShape pic = slide.createPicture(0);
>                            pic.setAnchor(anchor);
>                        } else if (ph.getType() ==
> STPlaceholderType.TBL){  //table placeholder
>                            Rectangle2D anchor = shape.getAnchor();
>
>                            // remove the placehoder shape
>                            slide.removeShape(shape);
>                            // insert a table indead
>                            XSLFTable tbl = slide.createTable();
>                            tbl.setAnchor(anchor);
>                        } else {
>                            // process more placeholders
>                         }
>                    }
>
>
>                } else if (shape instanceof XSLFPictureShape) {
>                    System.out.println("PICTURESHAPE");
>                }
>            }
>        }
>
>        return;
>    }
>
> Cheers,
> Yegor
>
> On Fri, May 18, 2012 at 2:40 PM, Pablo Rivera | MediaSquare
> <[email protected]> wrote:
> > Hi,
> >
> > I have a potx template with some layouts created in MS Powerpoint 2010 by
> > me with text, table and image placeholders.
> >
> > I'm trying to execute this code:
> >
> > ---
> > import org.apache.poi.xslf.usermodel.*;
> > import java.io.*;
> > import java.awt.geom.*;
> > import java.awt.*;
> > import java.util.*;
> >
> > public class Powerpoint{
> >  public static void main(String[] args) throws Exception{
> >    XMLSlideShow pptx = new XMLSlideShow(new
> > FileInputStream("layout_v0.potx"));
> >    XSLFSlideMaster master = pptx.getSlideMasters()[0];
> >
> >    XSLFSlideLayout[] layouts = master.getSlideLayouts();
> >    Iterator layout_it = new ArrayList(Arrays.asList(layouts)).iterator();
> >    while(layout_it.hasNext()){
> >      XSLFSlideLayout layout = (XSLFSlideLayout) layout_it.next();
> >      XSLFSlide slide = pptx.createSlide(layout);
> >      XSLFShape[] shapes = slide.getShapes();
> >      Iterator shapes_it = new
> ArrayList(Arrays.asList(shapes)).iterator();
> >      while(shapes_it.hasNext()){
> >        XSLFShape shape = (XSLFShape) shapes_it.next();
> >        System.out.println(shape.getShapeName());
> >        if (shape instanceof XSLFConnectorShape){
> >        System.out.println("CONNECTORSHAPE");
> >      } else if (shape instanceof XSLFTextShape){
> >        System.out.println("TEXTSHAPE");
> >      } else if (shape instanceof XSLFPictureShape){
> >        System.out.println("PICTURESHAPE");
> >      }
> >      }
> >    }
> >
> >    return;
> >  }
> > }
> > ---
> >
> > And the result is:
> >
> > $ java Powerpoint
> > Title 1
> > TEXTSHAPE
> > Subtitle 2
> > TEXTSHAPE
> > Text Placeholder 20
> > TEXTSHAPE
> > Text Placeholder 22
> > TEXTSHAPE
> > Picture Placeholder 24
> > TEXTSHAPE
> > Table Placeholder 26
> > TEXTSHAPE
> >
> > Obviously Picture Placeholder 24 and Table Placeholder 26 shouldn't be
> > Textshapes.
> >
> > Am I doing anything wrong or Powerpoint saves this in a wrong format?
> >
> > Thanks in advance.
> >
> >
> >   -
> >   - *Pablo Rivera*
> >   - Software Engineer
> >   -
> >   - [email protected]
> >   - T:(+34) 902 10 83 84
> >   -
> >      -
> >   - www.mediasq.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

Reply via email to