001 /* 002 * JBoss DNA (http://www.jboss.org/dna) 003 * See the COPYRIGHT.txt file distributed with this work for information 004 * regarding copyright ownership. Some portions may be licensed 005 * to Red Hat, Inc. under one or more contributor license agreements. 006 * See the AUTHORS.txt file in the distribution for a full listing of 007 * individual contributors. 008 * 009 * JBoss DNA is free software. Unless otherwise indicated, all code in JBoss DNA 010 * is licensed to you under the terms of the GNU Lesser General Public License as 011 * published by the Free Software Foundation; either version 2.1 of 012 * the License, or (at your option) any later version. 013 * 014 * JBoss DNA is distributed in the hope that it will be useful, 015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 017 * Lesser General Public License for more details. 018 * 019 * You should have received a copy of the GNU Lesser General Public 020 * License along with this software; if not, write to the Free 021 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 022 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 023 */ 024 package org.jboss.dna.sequencer.msoffice.powerpoint; 025 026 import java.util.List; 027 import java.io.*; 028 import java.awt.image.BufferedImage; 029 import java.awt.*; 030 import java.awt.geom.Rectangle2D; 031 import java.util.ArrayList; 032 import org.apache.poi.hslf.usermodel.SlideShow; 033 import org.apache.poi.hslf.model.Slide; 034 import org.apache.poi.hslf.model.TextRun; 035 036 /** 037 * Utility for extracting metadata from PowerPoint files 038 * 039 * @author Michael Trezzi 040 */ 041 public class PowerPointMetadataReader { 042 043 public static List<SlideMetadata> instance( InputStream stream ) throws IOException { 044 SlideShow slideshow = new SlideShow(stream); 045 Slide[] slides = slideshow.getSlides(); 046 047 List<SlideMetadata> slidesMetadata = new ArrayList<SlideMetadata>(); 048 049 for (Slide slide : slides) { 050 SlideMetadata slideMetadata = new SlideMetadata(); 051 // process title 052 slideMetadata.setTitle(slide.getTitle()); 053 054 // process notes 055 for (TextRun textRun : slide.getNotesSheet().getTextRuns()) { 056 if (slideMetadata.getNotes() == null) { 057 slideMetadata.setNotes(""); 058 } 059 slideMetadata.setNotes(slideMetadata.getNotes() + textRun.getText()); 060 } 061 // process text 062 for (TextRun textRun : slide.getTextRuns()) { 063 if (!textRun.getText().equals(slideMetadata.getTitle()) && textRun.getText() != null) { 064 if (slideMetadata.getText() == null) { 065 slideMetadata.setText(""); 066 } 067 slideMetadata.setText(slideMetadata.getText() + textRun.getText()); 068 } 069 } 070 071 // process thumbnail 072 Dimension pgsize = slideshow.getPageSize(); 073 074 BufferedImage img = new BufferedImage(pgsize.width, pgsize.height, BufferedImage.TYPE_INT_RGB); 075 Graphics2D graphics = img.createGraphics(); 076 // clear the drawing area 077 graphics.setPaint(Color.white); 078 graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height)); 079 080 // render 081 slide.draw(graphics); 082 083 ByteArrayOutputStream out = new ByteArrayOutputStream(); 084 javax.imageio.ImageIO.write(img, "png", out); 085 slideMetadata.setThumbnail(out.toByteArray()); 086 087 slidesMetadata.add(slideMetadata); 088 089 } 090 091 return slidesMetadata; 092 } 093 094 }