Пример #1
0
 /// <summary>
 /// Finishes off the Presentation (fills extra page)
 /// </summary>
 public void FinishPres()
 {
     objSlide = (Microsoft.Office.Interop.PowerPoint._Slide)objSlides._Index(sCount);
     oCount   = 1;
     AddText("This deck generated by eFlash", "Comic Sans MS", 40, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse, 50, 50, 800, 150);
     AddPic(Constant.ePath + "About.png", MsoTriState.msoFalse, MsoTriState.msoTrue, 200, 200, 350, 250);
     //AddPic("C:\\Program Files\\eFlash\\Data\\Media\\About.png", MsoTriState.msoFalse, MsoTriState.msoTrue, 200, 200, 350, 250);
 }
        /// <summary>
        /// Open a PPT deck and create a directory of jpg images, one for each slide in the deck.
        /// </summary>
        /// <param name="g"></param>
        /// <param name="file"></param>
        private void processPpt(Guid g, FileInfo file)
        {
            if (stopNow)
            {
                return;
            }

            if (pptApp == null)
            {
                try {
                    pptApp = new PowerPoint.Application();
                    // Check if PPT was already running.
                    pptAlreadyOpen = (pptApp.Visible == MsoTriState.msoTrue);
                }
                catch (Exception e) {
                    log.WriteLine("Failed to create PowerPoint application instance. " + e.ToString());
                    log.ErrorLevel = 6;
                    pptApp         = null;
                    return;
                }
            }

            try {
                PowerPoint._Presentation ppPres = pptApp.Presentations.Open(file.FullName, MsoTriState.msoTrue,
                                                                            MsoTriState.msoFalse, MsoTriState.msoFalse);

                PowerPoint.Slides slides = ppPres.Slides;

                String tempDirName = Utility.GetTempDir();
                Directory.CreateDirectory(tempDirName);
                int slideCount = slides.Count;
                int ptStart    = progressTracker.CurrentValue;
                for (int i = 1; i <= slides.Count; i++)
                {
                    if (stopNow)
                    {
                        break;
                    }
                    //The image looks much better and is reasonably small if we save to wmf format first, then
                    // convert to jpg.  I guess the .Net jpeg encoder is better than the PPT encoder??
                    // Sometimes we may want to use the jpeg export with certain decks because we can get better
                    // fidelity with some less common symbols.

                    PowerPoint._Slide ppSlide = (PowerPoint._Slide)slides._Index(i);
                    String            jpgfile = Path.Combine(tempDirName, "slide" + i.ToString() + ".jpg");
                    Image             img     = null;
                    string            tmpfile = null;
                    if (useNativeJpegExport)
                    {
                        tmpfile = Path.Combine(tempDirName, "slidetmp" + i.ToString() + ".JPG");
                        ppSlide.Export(tmpfile, "JPG", 0, 0);
                        img = Image.FromFile(tmpfile);
                    }
                    else
                    {
                        tmpfile = Path.Combine(tempDirName, "slide" + i.ToString() + ".WMF");
                        ppSlide.Export(tmpfile, "WMF", 0, 0);
                        img = Image.FromFile(tmpfile);
                    }
                    try {
                        //The right shift is used to work around a CP3 issue: Some slide decks are shifted to the right, so we also
                        // need to do this to keep ink from being mis-aligned.  As of 2013 this should no longer be needed when
                        // using a current version of CP3.
                        if (rightShift > 0)
                        {
                            Image shiftedImage;
                            RightImageShift(img, rightShift, out shiftedImage);
                            shiftedImage.Save(jpgfile, ImageFormat.Jpeg);
                            shiftedImage.Dispose();
                        }
                        else
                        {
                            img.Save(jpgfile, ImageFormat.Jpeg);
                        }
                    }
                    catch (Exception e) {
                        log.WriteLine("Failed to save image for slide " + jpgfile + " exception: " + e.ToString());
                        log.ErrorLevel = 6;
                    }
                    img.Dispose();
                    System.IO.File.Delete(tmpfile);

                    progressTracker.CurrentValue = ((i * 100) / slideCount) + ptStart;
                }

                ppPres.Close();
                ppPres = null;

                this.outputDirs.Add(g, tempDirName);
            }
            catch (Exception e) {
                log.WriteLine(e.ToString());
                log.ErrorLevel = 6;
            }
        }