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