Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.apache.poi.xslf.usermodel;
- import java.awt.geom.Rectangle2D;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.lang.reflect.Method;
- import java.util.List;
- import org.apache.poi.openxml4j.opc.PackagePart;
- import org.apache.poi.openxml4j.opc.PackagePartName;
- import org.apache.poi.openxml4j.opc.PackageRelationship;
- import org.apache.poi.openxml4j.opc.PackagingURIHelper;
- import org.apache.poi.openxml4j.opc.TargetMode;
- import org.apache.poi.util.IOUtils;
- import org.apache.xmlbeans.XmlCursor;
- import org.apache.xmlbeans.XmlObject;
- import org.junit.Test;
- import org.openxmlformats.schemas.drawingml.x2006.main.CTGraphicalObjectData;
- import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFrame;
- public class TestEmbed {
- @Test
- public void embed() throws Exception {
- XMLSlideShow ppt = new XMLSlideShow();
- XSLFSlide slide = ppt.createSlide();
- String xlsId = addPart(slide, "test.xlsx", "/ppt/embeddings/foobaa.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/package");
- String imgId = addPart(slide, "image1.emf", "/ppt/media/image1.emf", "image/x-emf", XSLFRelation.IMAGES.getRelation());
- CTGraphicalObjectFrame ch = slide.getXmlObject().getCSld().getSpTree().addNewGraphicFrame();
- insertXObject(ch, XmlObject.Factory.parse(anotherTmpl));
- CTGraphicalObjectData gr = ch.addNewGraphic().addNewGraphicData();
- gr.setUri("http://schemas.openxmlformats.org/presentationml/2006/ole");
- XSLFGraphicFrame shape = XSLFGraphicFrame.create(ch, slide);
- ch.addNewXfrm();
- shape.setAnchor(new Rectangle2D.Double(50, 50, 250, 250));
- // slide.addRelation(xlsId, new XSLFPictureData(pic, rel));
- Method m = XSLFSheet.class.getDeclaredMethod("getShapeList");
- m.setAccessible(true);
- List<XSLFShape> shapes = (List<XSLFShape>)m.invoke(slide);
- shapes.add(shape);
- String altCtx = xlsEmbedTmpl.replace("@xlsId", xlsId).replace("@imgId", imgId);
- insertXObject(gr, XmlObject.Factory.parse(altCtx));
- OutputStream os = new FileOutputStream("bla.pptx");
- ppt.write(os);
- os.close();
- }
- void insertXObject(XmlObject root, XmlObject child) {
- XmlCursor rootCursor = root.newCursor();
- rootCursor.toEndToken();
- XmlCursor anyFooCursor = child.newCursor();
- anyFooCursor.toNextToken();
- anyFooCursor.moveXml(rootCursor);
- }
- String addPart(XSLFSlide slide, String inputFile, String zipPath, String contentType, String relationType) throws Exception {
- PackagePartName ppn = PackagingURIHelper.createPartName(zipPath);
- PackagePart xlsPart = slide.getPackagePart().getPackage().createPart(ppn, contentType);
- InputStream is = new FileInputStream(inputFile);
- OutputStream os = xlsPart.getOutputStream();
- IOUtils.copy(is, os);
- os.close();
- is.close();
- PackageRelationship rel = slide.getPackagePart().addRelationship(
- ppn, TargetMode.INTERNAL, relationType);
- return rel.getId();
- }
- final String anotherTmpl =
- "<p:nvGraphicFramePr "+
- "xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\" "+
- "xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">"+
- "<p:cNvPr id=\"5\" name=\"Objekt 4\"/>"+
- "<p:cNvGraphicFramePr>"+
- "<a:graphicFrameLocks noChangeAspect=\"1\"/>"+
- "</p:cNvGraphicFramePr>"+
- "<p:nvPr>"+
- "<p:extLst>"+
- "<p:ext uri=\"{D42A27DB-BD31-4B8C-83A1-F6EECF244321}\">"+
- "<p14:modId xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\" val=\"3772319657\"/>"+
- "</p:ext>"+
- "</p:extLst>"+
- "</p:nvPr>"+
- "</p:nvGraphicFramePr>"
- ;
- final String xlsEmbedTmpl =
- "<mc:AlternateContent xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" "+
- "xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\" "+
- "xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">"+
- "<mc:Choice xmlns:v=\"urn:schemas-microsoft-com:vml\" Requires=\"v\">"+
- "<p:oleObj spid=\"_x0000_s1028\" name=\"Arbeitsblatt\" r:id=\"@xlsId\" imgW=\"2276410\" imgH=\"1628910\" progId=\"Excel.Sheet.12\">"+
- "<p:embed/>"+
- "</p:oleObj>"+
- "</mc:Choice>"+
- "<mc:Fallback>"+
- "<p:oleObj name=\"Arbeitsblatt\" r:id=\"@xlsId\" imgW=\"2276410\" imgH=\"1628910\" progId=\"Excel.Sheet.12\">"+
- "<p:embed/>"+
- "<p:pic>"+
- "<p:nvPicPr>"+
- "<p:cNvPr id=\"0\" name=\"\"/>"+
- "<p:cNvPicPr/>"+
- "<p:nvPr/>"+
- "</p:nvPicPr>"+
- "<p:blipFill>"+
- "<a:blip r:embed=\"@imgId\"/>"+
- "<a:stretch>"+
- "<a:fillRect/>"+
- "</a:stretch>"+
- "</p:blipFill>"+
- "<p:spPr>"+
- "<a:xfrm>"+
- "<a:off x=\"3352800\" y=\"3886200\"/>"+
- "<a:ext cx=\"2611438\" cy=\"1506537\"/>"+
- "</a:xfrm>"+
- "<a:prstGeom prst=\"rect\">"+
- "<a:avLst/>"+
- "</a:prstGeom>"+
- "</p:spPr>"+
- "</p:pic>"+
- "</p:oleObj>"+
- "</mc:Fallback>"+
- "</mc:AlternateContent>"
- ;
- }
Advertisement
Add Comment
Please, Sign In to add comment