You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ce...@apache.org on 2015/03/01 18:50:16 UTC

svn commit: r1663137 - in /poi/trunk/src: integrationtest/org/apache/poi/stress/XSLFFileHandler.java ooxml/java/org/apache/poi/extractor/ExtractorFactory.java

Author: centic
Date: Sun Mar  1 17:50:16 2015
New Revision: 1663137

URL: http://svn.apache.org/r1663137
Log:
Add missing close and handle theme-pptx in ExtractorFactory. Add creating slide-bitmaps to PPTX integration test.

Modified:
    poi/trunk/src/integrationtest/org/apache/poi/stress/XSLFFileHandler.java
    poi/trunk/src/ooxml/java/org/apache/poi/extractor/ExtractorFactory.java

Modified: poi/trunk/src/integrationtest/org/apache/poi/stress/XSLFFileHandler.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/integrationtest/org/apache/poi/stress/XSLFFileHandler.java?rev=1663137&r1=1663136&r2=1663137&view=diff
==============================================================================
--- poi/trunk/src/integrationtest/org/apache/poi/stress/XSLFFileHandler.java (original)
+++ poi/trunk/src/integrationtest/org/apache/poi/stress/XSLFFileHandler.java Sun Mar  1 17:50:16 2015
@@ -18,35 +18,93 @@ package org.apache.poi.stress;
 
 import static org.junit.Assert.assertNotNull;
 
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
 import java.io.FileInputStream;
+import java.io.IOException;
 import java.io.InputStream;
 
 import org.apache.poi.openxml4j.opc.OPCPackage;
 import org.apache.poi.xslf.XSLFSlideShow;
+import org.apache.poi.xslf.usermodel.XMLSlideShow;
+import org.apache.poi.xslf.usermodel.XSLFNotes;
+import org.apache.poi.xslf.usermodel.XSLFShape;
+import org.apache.poi.xslf.usermodel.XSLFSlide;
+import org.apache.poi.xslf.usermodel.XSLFTextParagraph;
+import org.apache.poi.xslf.usermodel.XSLFTextShape;
 import org.junit.Test;
 
 public class XSLFFileHandler extends AbstractFileHandler {
 	@Override
     public void handleFile(InputStream stream) throws Exception {
-        // ignore password protected files
-        if (POIXMLDocumentHandler.isEncrypted(stream)) return;
-
         XSLFSlideShow slide = new XSLFSlideShow(OPCPackage.open(stream));
 		assertNotNull(slide.getPresentation());
 		assertNotNull(slide.getSlideMasterReferences());
 		assertNotNull(slide.getSlideReferences());
 		
 		new POIXMLDocumentHandler().handlePOIXMLDocument(slide);
+
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+		try {
+		    slide.write(out);
+		} finally {
+		    out.close();
+		}
+		
+        createBitmaps(out);		
 	}
 
+    private void createBitmaps(ByteArrayOutputStream out) throws IOException {
+        XMLSlideShow ppt = new XMLSlideShow(new ByteArrayInputStream(out.toByteArray()));
+        Dimension pgsize = ppt.getPageSize();
+        XSLFSlide[] xmlSlide = ppt.getSlides();
+        int slideSize = xmlSlide.length;
+        for (int i = 0; i < slideSize; i++) {
+//            System.out.println("slide-" + (i + 1));
+//            System.out.println("" + xmlSlide[i].getTitle());
+
+            BufferedImage img = new BufferedImage(pgsize.width, pgsize.height, BufferedImage.TYPE_INT_RGB);
+            Graphics2D graphics = img.createGraphics();
+
+            // draw stuff
+            xmlSlide[i].draw(graphics);
+
+            // Also try to read notes
+            XSLFNotes notes = xmlSlide[i].getNotes();
+            if(notes != null) {
+                for (XSLFShape note : notes) {
+                    note.draw(graphics);
+                    
+                    if (note instanceof XSLFTextShape) {
+                        XSLFTextShape txShape = (XSLFTextShape) note;
+                        for (XSLFTextParagraph xslfParagraph : txShape.getTextParagraphs()) {
+                            xslfParagraph.getText();
+                        }
+                    }
+                }
+            }
+        }
+    }
+
 	// a test-case to test this locally without executing the full TestAllFiles
 	@Test
 	public void test() throws Exception {
-		InputStream stream = new FileInputStream("test-data/slideshow/testPPT.pptx");
+		InputStream stream = new FileInputStream("test-data/slideshow/pptx2svg.pptx");
 		try {
 			handleFile(stream);
 		} finally {
 			stream.close();
 		}
 	}
+
+
+    // a test-case to test this locally without executing the full TestAllFiles
+    @Test
+    public void testExtractor() throws Exception {
+        handleExtracting(new File("test-data/slideshow/testPPT.thmx"));
+    }
 }
\ No newline at end of file

Modified: poi/trunk/src/ooxml/java/org/apache/poi/extractor/ExtractorFactory.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/extractor/ExtractorFactory.java?rev=1663137&r1=1663136&r2=1663137&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/extractor/ExtractorFactory.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/extractor/ExtractorFactory.java Sun Mar  1 17:50:16 2015
@@ -51,6 +51,7 @@ import org.apache.poi.poifs.filesystem.D
 import org.apache.poi.poifs.filesystem.DirectoryNode;
 import org.apache.poi.poifs.filesystem.Entry;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+import org.apache.poi.xslf.XSLFSlideShow;
 import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor;
 import org.apache.poi.xslf.usermodel.XSLFRelation;
 import org.apache.poi.xssf.extractor.XSSFEventBasedExcelExtractor;
@@ -190,6 +191,14 @@ public class ExtractorFactory {
           }
        }
 
+       // special handling for SlideShow-Theme-files, 
+       if(XSLFRelation.THEME_MANAGER.getContentType().equals(corePart.getContentType())) {
+           return new XSLFPowerPointExtractor(new XSLFSlideShow(pkg));
+       }
+
+       // ensure that we close the package again if there is an error opening it, however
+       // we need to revert the package to not re-write the file via close(), which is very likely not wanted for a TextExtractor!
+       pkg.revert();
        throw new IllegalArgumentException("No supported documents found in the OOXML package (found "+corePart.getContentType()+")");
 	}
 



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