Add Auto Shapes in Slide in Aspose.Slides vs pptx4j
Contents
[
Hide
]
Aspose.Slides - Add Auto Shapes in Slide
Aspose.Slides for Java supports adding different kinds of shapes to the slides. Using Aspose.Slides for Java , developers can not only create simple lines , but some fancy lines can also be drawn on the slides.
Java
//Get the first slide
ISlide sld = pres.getSlides().get_Item(0);
for (int i = 1 ; i <= ShapeType.ChartPlus ; i++)
{
System.out.println(i + ". Done.");
//Add an auto shape of type line
sld.getShapes().addAutoShape(i, 50, 100, 150, 100);
sld = pres.getSlides().addEmptySlide(pres.getLayoutSlides().get_Item(0));
}
pptx4j - Add Auto Shapes in Slide
Below sample shows how autoshapes can be added in slide of presentation using pptx4j.
Java
public static void main(String[] args) throws Exception
{
// Where will we save our new .ppxt?
String outputfilepath = dataDir + "Pptx4jAutoShapes.pptx";
// Create skeletal package
PresentationMLPackage presentationMLPackage = PresentationMLPackage.createPackage();
MainPresentationPart pp = (MainPresentationPart)presentationMLPackage.getParts().getParts().get(
new PartName("/ppt/presentation.xml"));
SlideLayoutPart layoutPart = (SlideLayoutPart)presentationMLPackage.getParts().getParts().get(
new PartName("/ppt/slideLayouts/slideLayout1.xml"));
boolean noLine = false;
/* ST_ShapeType has 203 values
*
* Create a slide for each shape */
int i = 1;
for (STShapeType st : STShapeType.values() ) {
System.out.println("Adding slide for shape: " + st.value() );
SlidePart slidePart = createSlidePart(pp, layoutPart, i);
// Create and add shapes
Shape title = ((Shape)XmlUtils.unmarshalString(
getSlideTitle(st.value()), Context.jcPML) );
slidePart.getJaxbElement().getCSld().getSpTree().getSpOrGrpSpOrGraphicFrame().add(title);
Shape sample = ((Shape)XmlUtils.unmarshalString(
getPresetShape(st.value(), noLine), Context.jcPML) );
slidePart.getJaxbElement().getCSld().getSpTree().getSpOrGrpSpOrGraphicFrame().add(sample);
i++;
}
// All done: save it
presentationMLPackage.save(new java.io.File(outputfilepath));
System.out.println("\n\n done .. saved " + outputfilepath);
}
/**
* Create a slide and add it to the package
*
* @param pp
* @param layoutPart
* @param i
* @return the slide
* @throws InvalidFormatException
* @throws JAXBException
*/
private static SlidePart createSlidePart(MainPresentationPart pp, SlideLayoutPart layoutPart, int i)
throws InvalidFormatException, JAXBException {
// Slide part
SlidePart slidePart = new SlidePart(new PartName("/ppt/slides/slide" + i +".xml") );
pp.addSlideIdListEntry(slidePart);
slidePart.setJaxbElement( SlidePart.createSld() );
// Slide layout part
slidePart.addTargetPart(layoutPart);
return slidePart;
}
/**
* get XML for the specified present shape
*
* @param preset
* @param noLine
* @return
*/
private static String getPresetShape(String preset, boolean noLine) {
String txBody = "";
String ln = "";
// Shape will say "click here to add title"
// if txBody is not present.
// If txBody is present, shape will be invisible
// unless a:ln is present
if (!noLine) {
// txBody = "<p:txBody>"
// + "<a:bodyPr />"
// + "<a:lstStyle />"
// + "<a:p>"
// + "<a:r>"
// + "<a:rPr lang=\"en-US\" smtClean=\"0\" />"
// + "<a:t> </a:t>"
// + "</a:r>"
// + "<a:endParaRPr lang=\"en-US\" />"
// + "</a:p>"
// + "</p:txBody>";
ln = "<a:ln>"
+"<a:solidFill>"
+"<a:srgbClr val=\"FF0000\"/>"
+"</a:solidFill>"
+"</a:ln>";
}
/*
* If you don't have a:ln, there will be no lines,
* so the shape will be invisible.
*
* If you add <p:ph type=\"title\" />, you'll get
* a title (and the dotted outline of the shape
* will be visible).
*
* Without a p:txBody, the words "Click to
* add title" will appear. (maybe title because
* of our p:ph/@type?)
*
*/
return
"<p:sp xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">"
+ "<p:nvSpPr>"
+ "<p:cNvPr id=\"4\" name=\"My Preset Shape\" />"
+ "<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=\"1981200\" y=\"533400\"/>"
+ "<a:ext cx=\"1143000\" cy=\"1066800\"/>"
+ "</a:xfrm>"
+ "<a:prstGeom prst=\"" + preset + "\">"
+ "<a:avLst/>"
+ "</a:prstGeom>"
+ ln
+ "</p:spPr>"
+ txBody
+ "</p:sp>";
}
private static String getSlideTitle(String preset) {
return "<p:sp xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">"
+ "<p:nvSpPr>"
+ "<p:cNvPr id=\"4\" name=\"Title 3\" />"
+ "<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>" + preset + "</a:t>"
+ "</a:r>"
+ "<a:endParaRPr lang=\"en-US\" />"
+ "</a:p>"
\+ "</p:txBody>"
\+ "</p:sp>";
}
Download Running Code
Download Sample Code
For more details, visit Working with Shapes.