poi-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Joe Dente" <jde...@21technologies.com>
Subject RE: 3rd PowerPoint Slide is Corrupt
Date Thu, 21 Jan 2010 19:14:25 GMT
Thanks for the response.

I find it very hard to believe that nobody's come across this issue
before, so I'm sure I am just doing something wrong such as not
releasing or closing an object or something. Here's a small java app
that demonstrates the problem. I've tried it with POI-3.2-FINAL (the
version I was intending to use) as well as POI-3.6 and the problem
exists in both versions. The main will generate two ppt presentations;
the 'twoSlides.ppt' deck is valid and the 'threeSlides.ppt' deck will be
corrupt when you try and open them in PowerPoint. One interesting thing
to note is that if you generate 3 slides and then do a single save as
opposed to saving after creating every slide, the slide deck is not
corrupted. In our application, every time the user presses a button we
export his current context to a PowerPoint slide, which means we need to
save the slide deck every time the user presses the button. The user can
press that button as many times as he wants to generate as many slides
as he wants in a session, and so I'm not sure what exactly to do about
this problem as far as our app is concerned.

Thanks for the help.
Joe

public class PoiPrototype {

    private static final String FILE_NAME_PASS = "twoSlides.ppt";
    
    private static final String FILE_NAME_FAIL = "threeSlides.ppt";
    
    public static SlideShow createPpt(String fileName) throws
IOException {
        //retrieve or create the presentation
        SlideShow ppt = null;
        
        File file = new File(fileName);
        if(file.exists()) {
            ppt = new SlideShow(new FileInputStream(file));
        } else {
            ppt = new SlideShow();
        }
        
        return ppt;
    }

    public static void savePpt(String fileName, SlideShow ppt) throws
FileNotFoundException, IOException {
        FileOutputStream out = new FileOutputStream(fileName);
        ppt.write(out);
        out.close();
    }
    
    public static void main(String[] args) {

        try {
            //build the non-corrupt ppt
            System.out.print("Generating two slide ppt...");
            SlideShow pptPass = createPpt(FILE_NAME_PASS);    
            savePpt(FILE_NAME_PASS, pptPass);
            //create slide1
            pptPass.createSlide();
            savePpt(FILE_NAME_PASS, pptPass);
            //create slide2
            pptPass.createSlide();
            savePpt(FILE_NAME_PASS, pptPass);
            
            //build the corrupt ppt
            System.out.print("Generating three slide ppt...");
            SlideShow pptFail = createPpt(FILE_NAME_FAIL);    
            //create slide1
            pptFail.createSlide();
            savePpt(FILE_NAME_FAIL, pptFail);
            //create slide2
            pptFail.createSlide();
            savePpt(FILE_NAME_FAIL, pptFail);
            //create slide3
            pptFail.createSlide();
            savePpt(FILE_NAME_FAIL, pptFail);

            System.out.println("COMPLETE");
            
        } catch(Throwable e) {
            System.err.println(e.getMessage());
            System.err.println(e);
        }
    }
}


-----Original Message-----
From: Yegor Kozlov [mailto:yegor@dinom.ru] 
Sent: Thursday, January 21, 2010 12:55 AM
To: POI Users List
Subject: Re: 3rd PowerPoint Slide is Corrupt

Does your code run on server side? I wonder if it is a concurrency
issue.

Which version of POI?

Can you create a bug in Bugzilla and attach sample code to reproduce the
problem (ideally a junit test case) and two ppt 
files: one with two slides, not corrupted and the other with 3 slides,
corrupted.

Yegor

> Hi,
> 
>  
> 
> I'm using the POI project to generate some PowerPoint slides. It works
> fine until I generate the 3rd slide for my slide deck, which ends up
> being corrupted every time. The first time my program runs it creates
a
> new slide deck and adds a single slide to it. After that, every time
the
> program runs it grabs the slide deck generated during the first run
and
> appends a single slide to it. After the first run of the program the
> slide deck is fine. After the second run it is fine as well. The third
> run generates a corrupt slide every time. For testing purposes I
changed
> my program so that all 3 runs of the program are generating the
> identical blank slide and yet this corruption still happens, so it
does
> not appear to have anything to do with my slide contents. I am
following
> the code samples given on the POI website under "Shapes How To":
> 
>  
> 
> To create the slide deck during the first run:
> 
> SlideShow ppt = new SlideShow();
> 
>  
> 
> To connect to an existing slide deck during subsequent runs:
> 
> SlideShow ppt = null;
> 
> File pptFile = new File(pptFileName);
> 
> if(pptFile.exists()) {
> 
>     if(pptFile.canWrite()) {
> 
>     //construct the ppt from an existing file
> 
>        ppt = new SlideShow(new FileInputStream(pptFile));
> 
>     } else {
> 
>        throw new IOException("Unable to write to the PowerPoint file
'"
> + pptFileName + "'");
> 
>     }
> 
> }
> 
>  
> 
> To add a blank slide to the slide deck (nothing fancy here):
> 
> Slide slide = ppt.createSlide();
> 
>  
> 
> To save my slide deck after adding a slide:
> 
> FileOutputStream out = new FileOutputStream(pptFileName);
> 
> ppt.write(out);
> 
> out.close();
> 
>  
> 
> This all seems very straightforward and so I am not sure why the third
> slide is always corrupted. Also, if I use my program to generate 2
> slides and then I add a third slide through PowerPoint, I can continue
> adding slides to the slide deck without any corruption. I can also
> create a blank slide deck through PowerPoint and then use my program
to
> append blank slides to the deck and no corruption happens. So this
leads
> me to believe it has something to do with the saving of my PowerPoint
> slide deck, since whenever I save it through PowerPoint the corruption
> does not occur.
> 
>  
> 
> I appreciate any help.
> 
> Thanks in advance.
> 
> Joe
> 
> 


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


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


Mime
View raw message