Wiki
Clone wikiAspose Java for Docx4j / Insert-Image-to-Slide
Aspose.Slides
//Instantiate Presentation class that represents the PPTX Presentation pres = new Presentation(); //Get the first slide ISlide sld = pres.getSlides().get_Item(0); //Instantiate the Image class IPPImage imgx = null; try{ imgx = pres.getImages().addImage(new FileInputStream(new File("data/pptx4j/greentick.png"))); } catch(IOException e){} //Add Picture Frame with height and width equivalent of Picture sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx); //Write the PPTX file to disk pres.save("data/pptx4j/ImageInSlide-Aspose.pptx", SaveFormat.Pptx);
PPTX4j
public static void main(String[] args) throws Exception { final Logger log = LoggerFactory.getLogger(Pptx4jAddImageToSlide.class); // Where will we save our new .pptx? String outputfilepath = "data/pptx4j/ImageInSlide-Pptx4j.pptx"; // Create skeletal package, including a MainPresentationPart and a SlideLayoutPart PresentationMLPackage presentationMLPackage = PresentationMLPackage.createPackage(); // Need references to these parts to create a slide // Please note that these parts *already exist* - they are // created by createPackage() above. See that method // for instruction on how to create and add a part. 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")); // OK, now we can create a slide SlidePart slidePart = presentationMLPackage.createSlidePart(pp, layoutPart, new PartName("/ppt/slides/slide1.xml")); // Add image part File file = new File("data/pptx4j/greentick.png" ); BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(presentationMLPackage, slidePart, file); // Add p:pic to slide slidePart.getJaxbElement().getCSld().getSpTree().getSpOrGrpSpOrGraphicFrame().add( createPicture(imagePart.getSourceRelationship().getId())); // Do it again on another slide SlidePart slidePart2 = presentationMLPackage.createSlidePart(pp, layoutPart, new PartName("/ppt/slides/slide2.xml")); Relationship rel = slidePart2.addTargetPart(imagePart); slidePart2.getJaxbElement().getCSld().getSpTree().getSpOrGrpSpOrGraphicFrame().add( createPicture(rel.getId())); // All done: save it presentationMLPackage.save(new java.io.File(outputfilepath)); System.out.println("\n\n done .. saved " + outputfilepath); } private static Object createPicture(String relId) throws JAXBException { // Create p:pic java.util.HashMap<String, String>mappings = new java.util.HashMap<String, String>(); mappings.put("id1", "4"); mappings.put("name", "Picture 3"); mappings.put("descr", "greentick.png"); mappings.put("rEmbedId", relId ); mappings.put("offx", Long.toString(4214812)); mappings.put("offy", Long.toString(3071812)); mappings.put("extcx", Long.toString(714375)); mappings.put("extcy", Long.toString(714375)); return org.docx4j.XmlUtils.unmarshallFromTemplate(SAMPLE_PICTURE, mappings, Context.jcPML, Pic.class ) ; } private static String SAMPLE_PICTURE = "<p:pic 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:nvPicPr>" + "<p:cNvPr id=\"${id1}\" name=\"${name}\" descr=\"${descr}\"/>" + "<p:cNvPicPr>" + "<a:picLocks noChangeAspect=\"1\"/>" + "</p:cNvPicPr>" + "<p:nvPr/>" + "</p:nvPicPr>" + "<p:blipFill>" + "<a:blip r:embed=\"${rEmbedId}\" cstate=\"print\"/>" + "<a:stretch>" + "<a:fillRect/>" + "</a:stretch>" + "</p:blipFill>" + "<p:spPr>" + "<a:xfrm>" + "<a:off x=\"${offx}\" y=\"${offy}\"/>" + "<a:ext cx=\"${extcx}\" cy=\"${extcy}\"/>" + "</a:xfrm>" + "<a:prstGeom prst=\"rect\">" + "<a:avLst/>" + "</a:prstGeom>" + "</p:spPr>" + "</p:pic>";
Download Source Code
Updated