poi-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Yegor Kozlov <yegor.koz...@dinom.ru>
Subject Re: Sample code to get Shape property of PPT 2007 document
Date Mon, 14 Nov 2011 08:24:44 GMT
In general, the Presentation ML inheritance chain is as follows:

Slide <-- SlideLayout <-- SlideMaster <-- default styles in SlideMaster

That is, if a shape property is missing in slide.xml, you need to
lookup in the slide's layout and then in the master. The difference
between slide layout and slide master is that slide layout applies to
all slides of that type while slide master applies to all slides
regardless of their type.

Example: Examine the structure of a title shape (note that none of the
shape properties are defined which means they all are taken from the
master sheet):

<p:sp>
<p:nvSpPr>
<p:cNvPr id="2" name="Title 1"/>
<p:cNvSpPr>
<a:spLocks noGrp="1"/>
</p:cNvSpPr>
<p:nvPr>
<p:ph type="title"/>
</p:nvPr>
</p:nvSpPr>
<p:spPr/>
<p:txBody>
<a:bodyPr/>
<a:lstStyle/>
<a:p>
<a:r>
<a:rPr lang="en-US" dirty="0" smtClean="0"/>
<a:t>Office theme again</a:t>
</a:r>
<a:endParaRPr lang="en-US" dirty="0"/>
</a:p>
</p:txBody>
</p:sp>

The link between a shape and its master shape is set via the
Placeholder element:
<p:ph type="title"/>

this tells PowerPoint to lookup a shape with <p:ph type="title"/> in
the slide layout. Now we go there and get the master shape:

<p:sp>
<p:nvSpPr>
<p:cNvPr id="2" name="Title 1"/>
<p:cNvSpPr>
<a:spLocks noGrp="1"/>
</p:cNvSpPr>
<p:nvPr>
<p:ph type="title"/>
</p:nvPr>
</p:nvSpPr>
<p:spPr/>
<p:txBody>
<a:bodyPr/>
<a:lstStyle/>
<a:p>
<a:r>
<a:rPr lang="en-US" smtClean="0"/>
<a:t>Click to edit Master title style</a:t>
</a:r>
<a:endParaRPr lang="en-US"/>
</a:p>
</p:txBody>
</p:sp>

Still no luck with getting shape properties. Let's drill down deeper
to the master level:

<p:sp>
<p:nvSpPr>
<p:cNvPr id="2" name="Title Placeholder 1"/>
<p:cNvSpPr>
<a:spLocks noGrp="1"/>
</p:cNvSpPr>
<p:nvPr>
<p:ph type="title"/>
</p:nvPr>
</p:nvSpPr>
<p:spPr>
<a:xfrm>
<a:off x="457200" y="274638"/>
<a:ext cx="8229600" cy="1143000"/>
</a:xfrm>
<a:prstGeom prst="rect">
<a:avLst/>
</a:prstGeom>
</p:spPr>
<p:txBody>
<a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440"
bIns="45720" rtlCol="0" anchor="ctr">
<a:normAutofit/>
</a:bodyPr>
<a:lstStyle/>
<a:p>
<a:r>
<a:rPr lang="en-US" smtClean="0"/>
<a:t>Click to edit Master title style</a:t>
</a:r>
<a:endParaRPr lang="en-US"/>
</a:p>
</p:txBody>
</p:sp>

Gotcha! The xfrm element is found which tells you the position of the
title shape on the slide.

You can find sample code that fetches shape properties in PPTX here:
https://svn.apache.org/repos/asf/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java

See the fetchShapeProperty method and its usages.

Hope my explanation helps.

Yegor

On Mon, Nov 14, 2011 at 9:39 AM, Jebarlin Robertson
<jebarlin.android@gmail.com> wrote:
> Thanks for your valuable reply Yegor
>
> I am using XSLFSlide and XSLFShape only. But If you don't change the shape
> (Text Box) size or the position in PPTX, the shape properties are not
> present in the slide.xml file.
>
> So my doubt is from where i can take the default shape properties for the
> default shapes.
>
> I have masterSlide.xml and the slidelayout.xml. Which one need to be
> consider for the default shapes properties.?
>
> Jebarlin.R
>
>
> On Fri, Nov 11, 2011 at 7:28 PM, Yegor Kozlov <yegor.kozlov@dinom.ru> wrote:
>
>> The simplest solution is to use the XSLF usermodel API:
>>
>>         XMLSlideShow ppt = new XMLSlideShow(new
>> FileInputStream("presentation.pptx"));        for(XSLFSlide slide :
>> ppt.getSlides()) {            for(XSLFShape sh : slide){
>>  Rectangle2D anchor = sh.getAnchor();                 String name =
>> sh.getShapeName();
>>                .....             }        }
>> If you want to poke in the slide XML yourself, look at the xfrm bean
>> that holds 2D transform for shapes:
>>
>>         <a:xfrm>
>>            <a:off x="901700" y="1949450"/>
>>            <a:ext cx="8285163" cy="2235200"/>
>>            <a:chOff x="901700" y="2946400"/>
>>            <a:chExt cx="8285163" cy="2235200"/>
>>          </a:xfrm>
>>
>> All values are in EMUs (1pt = 12700 EMUs)
>>
>> Yegor
>>
>> On Fri, Nov 11, 2011 at 3:50 PM, Jebarlin Robertson
>> <jebarlin.android@gmail.com> wrote:
>> > Hi,
>> >
>> > Can  anyone give me some sample code to get the shape and its property
>> from
>> > PPT (2007 format) document?
>> >
>> >
>> > I just want to know how to get the shape properties such as width, hight,
>> > X, Y axis, from the XML, If these properties are not in the slide.xml
>> then
>> > how to get it from masterslide.xml?
>> >
>> > Thanks in Advance.
>> >
>> >
>> > Thanks and Regards,
>> > Jebarlin Robertson.R
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@poi.apache.org
>> For additional commands, e-mail: user-help@poi.apache.org
>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@poi.apache.org
For additional commands, e-mail: user-help@poi.apache.org


Mime
View raw message