From 7feda0a1df79b5b1c41c927ab848d9f484f60985 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Wed, 23 Feb 2011 19:01:24 +0000 Subject: [PATCH] Switch Picture processing in HSLFSlideShow to be lazy-loading, to speed things up if you're only interested in text stuff git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1073883 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/poi/hslf/HSLFSlideShow.java | 44 +++++++++++++------ 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java b/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java index 22a3b8abaa..65954a775f 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java +++ b/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java @@ -174,9 +174,6 @@ public final class HSLFSlideShow extends POIDocument { // Look for any other streams readOtherStreams(); - - // Look for Picture Streams: - readPictures(); } /** * Constructs a new, empty, Powerpoint document. @@ -309,7 +306,8 @@ public final class HSLFSlideShow extends POIDocument { } /** - * Find and read in pictures contained in this presentation + * Find and read in pictures contained in this presentation. + * This is lazily called as and when we want to touch pictures. */ private void readPictures() throws IOException { _pictures = new ArrayList(); @@ -472,6 +470,9 @@ public final class HSLFSlideShow extends POIDocument { // Write any pictures, into another stream + if(_pictures == null) { + readPictures(); + } if (_pictures.size() > 0) { ByteArrayOutputStream pict = new ByteArrayOutputStream(); for (PictureData p : _pictures) { @@ -526,15 +527,24 @@ public final class HSLFSlideShow extends POIDocument { * @return offset of this picture in the Pictures stream */ public int addPicture(PictureData img) { - int offset = 0; - - if(_pictures.size() > 0){ - PictureData prev = _pictures.get(_pictures.size() - 1); - offset = prev.getOffset() + prev.getRawData().length + 8; - } - img.setOffset(offset); - _pictures.add(img); - return offset; + // Process any existing pictures if we haven't yet + if(_pictures == null) { + try { + readPictures(); + } catch(IOException e) { + throw new CorruptPowerPointFileException(e.getMessage()); + } + } + + // Add the new picture in + int offset = 0; + if(_pictures.size() > 0) { + PictureData prev = _pictures.get(_pictures.size() - 1); + offset = prev.getOffset() + prev.getRawData().length + 8; + } + img.setOffset(offset); + _pictures.add(img); + return offset; } /* ******************* fetching methods follow ********************* */ @@ -563,6 +573,14 @@ public final class HSLFSlideShow extends POIDocument { * presentation doesn't contain pictures. */ public PictureData[] getPictures() { + if(_pictures == null) { + try { + readPictures(); + } catch(IOException e) { + throw new CorruptPowerPointFileException(e.getMessage()); + } + } + return _pictures.toArray(new PictureData[_pictures.size()]); } -- 2.39.5