kiwiwings

import embedded files like xls in a new ppt slide

May 21st, 2014
711
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.50 KB | None | 0 0
  1. package org.apache.poi.xslf.usermodel;
  2.  
  3. import java.awt.geom.Rectangle2D;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.InputStream;
  7. import java.io.OutputStream;
  8. import java.lang.reflect.Method;
  9. import java.util.List;
  10.  
  11. import org.apache.poi.openxml4j.opc.PackagePart;
  12. import org.apache.poi.openxml4j.opc.PackagePartName;
  13. import org.apache.poi.openxml4j.opc.PackageRelationship;
  14. import org.apache.poi.openxml4j.opc.PackagingURIHelper;
  15. import org.apache.poi.openxml4j.opc.TargetMode;
  16. import org.apache.poi.util.IOUtils;
  17. import org.apache.xmlbeans.XmlCursor;
  18. import org.apache.xmlbeans.XmlObject;
  19. import org.junit.Test;
  20. import org.openxmlformats.schemas.drawingml.x2006.main.CTGraphicalObjectData;
  21. import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFrame;
  22.  
  23. public class TestEmbed {
  24.  
  25.     @Test
  26.     public void embed() throws Exception {
  27.         XMLSlideShow ppt = new XMLSlideShow();
  28.         XSLFSlide slide = ppt.createSlide();
  29.  
  30.         String xlsId = addPart(slide, "test.xlsx", "/ppt/embeddings/foobaa.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/package");
  31.         String imgId = addPart(slide, "image1.emf", "/ppt/media/image1.emf", "image/x-emf", XSLFRelation.IMAGES.getRelation());
  32.        
  33.         CTGraphicalObjectFrame ch = slide.getXmlObject().getCSld().getSpTree().addNewGraphicFrame();
  34.         insertXObject(ch, XmlObject.Factory.parse(anotherTmpl));
  35.         CTGraphicalObjectData gr = ch.addNewGraphic().addNewGraphicData();
  36.         gr.setUri("http://schemas.openxmlformats.org/presentationml/2006/ole");
  37.  
  38.         XSLFGraphicFrame shape = XSLFGraphicFrame.create(ch, slide);
  39.         ch.addNewXfrm();
  40.         shape.setAnchor(new Rectangle2D.Double(50, 50, 250, 250));
  41.         // slide.addRelation(xlsId, new XSLFPictureData(pic, rel));
  42.  
  43.         Method m = XSLFSheet.class.getDeclaredMethod("getShapeList");
  44.         m.setAccessible(true);
  45.         List<XSLFShape> shapes = (List<XSLFShape>)m.invoke(slide);
  46.         shapes.add(shape);
  47.        
  48.         String altCtx = xlsEmbedTmpl.replace("@xlsId", xlsId).replace("@imgId", imgId);
  49.         insertXObject(gr, XmlObject.Factory.parse(altCtx));
  50.        
  51.         OutputStream os = new FileOutputStream("bla.pptx");
  52.         ppt.write(os);
  53.         os.close();
  54.     }
  55.  
  56.     void insertXObject(XmlObject root, XmlObject child) {
  57.         XmlCursor rootCursor = root.newCursor();
  58.         rootCursor.toEndToken();
  59.  
  60.         XmlCursor anyFooCursor = child.newCursor();
  61.         anyFooCursor.toNextToken();
  62.         anyFooCursor.moveXml(rootCursor);
  63.     }
  64.    
  65.     String addPart(XSLFSlide slide, String inputFile, String zipPath, String contentType, String relationType) throws Exception {
  66.         PackagePartName ppn = PackagingURIHelper.createPartName(zipPath);
  67.        
  68.         PackagePart xlsPart = slide.getPackagePart().getPackage().createPart(ppn, contentType);
  69.         InputStream is = new FileInputStream(inputFile);
  70.         OutputStream os = xlsPart.getOutputStream();
  71.         IOUtils.copy(is, os);
  72.         os.close();
  73.         is.close();
  74.  
  75.         PackageRelationship rel = slide.getPackagePart().addRelationship(
  76.                 ppn, TargetMode.INTERNAL, relationType);
  77.        
  78.         return rel.getId();
  79.     }
  80.  
  81.     final String anotherTmpl =
  82.         "<p:nvGraphicFramePr "+
  83.         "xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\" "+
  84.         "xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">"+
  85.         "<p:cNvPr id=\"5\" name=\"Objekt 4\"/>"+
  86.         "<p:cNvGraphicFramePr>"+
  87.         "<a:graphicFrameLocks noChangeAspect=\"1\"/>"+
  88.         "</p:cNvGraphicFramePr>"+
  89.         "<p:nvPr>"+
  90.         "<p:extLst>"+
  91.         "<p:ext uri=\"{D42A27DB-BD31-4B8C-83A1-F6EECF244321}\">"+
  92.         "<p14:modId xmlns:p14=\"http://schemas.microsoft.com/office/powerpoint/2010/main\" val=\"3772319657\"/>"+
  93.         "</p:ext>"+
  94.         "</p:extLst>"+
  95.         "</p:nvPr>"+
  96.         "</p:nvGraphicFramePr>"
  97.     ;
  98.    
  99.     final String xlsEmbedTmpl =
  100.         "<mc:AlternateContent xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" "+
  101.         "xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\" "+
  102.         "xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">"+
  103.         "<mc:Choice xmlns:v=\"urn:schemas-microsoft-com:vml\" Requires=\"v\">"+
  104.         "<p:oleObj spid=\"_x0000_s1028\" name=\"Arbeitsblatt\" r:id=\"@xlsId\" imgW=\"2276410\" imgH=\"1628910\" progId=\"Excel.Sheet.12\">"+
  105.         "<p:embed/>"+
  106.         "</p:oleObj>"+
  107.         "</mc:Choice>"+
  108.         "<mc:Fallback>"+
  109.         "<p:oleObj name=\"Arbeitsblatt\" r:id=\"@xlsId\" imgW=\"2276410\" imgH=\"1628910\" progId=\"Excel.Sheet.12\">"+
  110.         "<p:embed/>"+
  111.         "<p:pic>"+
  112.         "<p:nvPicPr>"+
  113.         "<p:cNvPr id=\"0\" name=\"\"/>"+
  114.         "<p:cNvPicPr/>"+
  115.         "<p:nvPr/>"+
  116.         "</p:nvPicPr>"+
  117.         "<p:blipFill>"+
  118.         "<a:blip r:embed=\"@imgId\"/>"+
  119.         "<a:stretch>"+
  120.         "<a:fillRect/>"+
  121.         "</a:stretch>"+
  122.         "</p:blipFill>"+
  123.         "<p:spPr>"+
  124.         "<a:xfrm>"+
  125.         "<a:off x=\"3352800\" y=\"3886200\"/>"+
  126.         "<a:ext cx=\"2611438\" cy=\"1506537\"/>"+
  127.         "</a:xfrm>"+
  128.         "<a:prstGeom prst=\"rect\">"+
  129.         "<a:avLst/>"+
  130.         "</a:prstGeom>"+
  131.         "</p:spPr>"+
  132.         "</p:pic>"+
  133.         "</p:oleObj>"+
  134.         "</mc:Fallback>"+
  135.         "</mc:AlternateContent>"
  136.     ;
  137. }
Advertisement
Add Comment
Please, Sign In to add comment