コード例 #1
0
        private ImageFormat GetImageFormat(SlidesConversionFormat format)
        {
            switch (format)
            {
            case SlidesConversionFormat.bmp:
                return(ImageFormat.Bmp);

            case SlidesConversionFormat.jpeg:
                return(ImageFormat.Jpeg);

            case SlidesConversionFormat.png:
                return(ImageFormat.Png);

            case SlidesConversionFormat.emf:
                return(ImageFormat.Wmf);

            case SlidesConversionFormat.wmf:
                return(ImageFormat.Wmf);

            case SlidesConversionFormat.gif:
                return(ImageFormat.Gif);

            case SlidesConversionFormat.exif:
                return(ImageFormat.Emf);

            case SlidesConversionFormat.ico:
                return(ImageFormat.Icon);

            default:
                throw new ArgumentException($"Unknown format {format}");
            }
        }
コード例 #2
0
 /// <summary>
 /// Splits presentation to parts and saves each part to the specified format.
 /// </summary>
 /// <param name="source">The source presentation file.</param>
 /// <param name="outputDir">Output directory where parts will be stored.</param>
 /// <param name="format">The required format.</param>
 /// <param name="splitType">Splitting type <see cref="SplitType"/></param>
 /// <param name="splitNumber">The number of slides in the group (applied only for <see cref="SplitType.Number"/>)</param>
 /// <param name="splitRange">The slide ranges string (applied only for <see cref="SplitType.Range"/>)</param>
 /// <param name="cancellationToken">The cancellation token.</param>
 public void Split(string source,
                   string outputDir,
                   SlidesConversionFormat format,
                   SplitType splitType,
                   int splitNumber,
                   string splitRange,
                   CancellationToken cancellationToken = default(CancellationToken))
 {
     using (var presentation = new Presentation(source))
     {
         foreach (var chunk in presentation.GetChunks(splitType, splitNumber, splitRange))
         {
             SaveChunk(outputDir, chunk.name, Path.GetFileNameWithoutExtension(source), chunk.slides, format, cancellationToken);
         }
     }
 }
コード例 #3
0
        /// <summary>
        /// Converts source file into target format, saves resulted file to out file.
        /// Returns null in case of multiple files (all saved into outFolder).
        /// </summary>
        /// <param name="sourceFile">Source slides file to proceed.</param>
        /// <param name="outFolder">Output folder.</param>
        /// <param name="format">Output format.</param>
        /// <returns>Result file path.</returns>
        public string Conversion(
            string sourceFile,
            string outFolder,
            SlidesConversionFormat format
            )
        {
            using (var presentation = new Presentation(sourceFile))
            {
                var fileName   = Path.GetFileNameWithoutExtension(sourceFile);
                var outOneFile = Path.Combine(outFolder, $"{fileName}.{format}");

                switch (format)
                {
                case SlidesConversionFormat.odp:
                case SlidesConversionFormat.otp:
                case SlidesConversionFormat.pptx:
                case SlidesConversionFormat.pptm:
                case SlidesConversionFormat.potx:
                case SlidesConversionFormat.ppt:
                case SlidesConversionFormat.pps:
                case SlidesConversionFormat.ppsm:
                case SlidesConversionFormat.pot:
                case SlidesConversionFormat.potm:
                case SlidesConversionFormat.pdf:
                case SlidesConversionFormat.xps:
                case SlidesConversionFormat.ppsx:
                case SlidesConversionFormat.tiff:
                case SlidesConversionFormat.html:
                case SlidesConversionFormat.swf:
                    var slidesFormat = format.ToString().ParseEnum <SaveFormat>();
                    presentation.Save(outOneFile, slidesFormat);
                    return(outOneFile);

                case SlidesConversionFormat.txt:
                    var lines = new List <string>();
                    foreach (var slide in presentation.Slides)
                    {
                        foreach (var shp in slide.Shapes)
                        {
                            if (shp is AutoShape ashp)
                            {
                                lines.Add(ashp.TextFrame.Text);
                            }
                        }

                        var notes = slide.NotesSlideManager.NotesSlide?.NotesTextFrame?.Text;

                        if (!string.IsNullOrEmpty(notes))
                        {
                            lines.Add(notes);
                        }
                    }
                    System.IO.File.WriteAllLines(outOneFile, lines);
                    return(outOneFile);

                case SlidesConversionFormat.doc:
                case SlidesConversionFormat.docx:
                    using (var stream = new MemoryStream())
                    {
                        presentation.Save(stream, SaveFormat.Html);
                        stream.Flush();
                        stream.Seek(0, SeekOrigin.Begin);

                        var doc = new Words.Document(stream);
                        switch (format)
                        {
                        case SlidesConversionFormat.doc:
                            doc.Save(outOneFile, Words.SaveFormat.Doc);
                            break;

                        case SlidesConversionFormat.docx:
                            doc.Save(outOneFile, Words.SaveFormat.Docx);
                            break;

                        default:
                            throw new ArgumentException($"Unknown format {format}");
                        }
                    }
                    return(outOneFile);

                case SlidesConversionFormat.bmp:
                case SlidesConversionFormat.jpeg:
                case SlidesConversionFormat.png:
                case SlidesConversionFormat.emf:
                case SlidesConversionFormat.wmf:
                case SlidesConversionFormat.gif:
                case SlidesConversionFormat.exif:
                case SlidesConversionFormat.ico:
                    ImageFormat GetImageFormat(SlidesConversionFormat f)
                    {
                        switch (format)
                        {
                        case SlidesConversionFormat.bmp:
                            return(ImageFormat.Bmp);

                        case SlidesConversionFormat.jpeg:
                            return(ImageFormat.Jpeg);

                        case SlidesConversionFormat.png:
                            return(ImageFormat.Png);

                        case SlidesConversionFormat.emf:
                            return(ImageFormat.Wmf);

                        case SlidesConversionFormat.wmf:
                            return(ImageFormat.Wmf);

                        case SlidesConversionFormat.gif:
                            return(ImageFormat.Gif);

                        case SlidesConversionFormat.exif:
                            return(ImageFormat.Emf);

                        case SlidesConversionFormat.ico:
                            return(ImageFormat.Icon);

                        default:
                            throw new ArgumentException($"Unknown format {format}");
                        }
                    }

                    ///var size = presentation.SlideSize.Size;

                    for (var i = 0; i < presentation.Slides.Count; i++)
                    {
                        var slide   = presentation.Slides[i];
                        var outFile = Path.Combine(outFolder, $"{i}.{format}");
                        using (var bitmap = slide.GetThumbnail(1, 1))                                // (new Size((int)size.Width, (int)size.Height)))
                            bitmap.Save(outFile, GetImageFormat(format));
                    }

                    return(null);

                case SlidesConversionFormat.svg:
                    var svgOptions = new SVGOptions
                    {
                        PicturesCompression = PicturesCompression.DocumentResolution
                    };

                    for (var i = 0; i < presentation.Slides.Count; i++)
                    {
                        var slide   = presentation.Slides[i];
                        var outFile = Path.Combine(outFolder, $"{i}.{format}");
                        using (var stream = new FileStream(outFile, FileMode.CreateNew))
                            slide.WriteAsSvg(stream, svgOptions);
                    }

                    return(null);

                default:
                    throw new ArgumentException($"Unknown format {format}");
                }
            }
        }
コード例 #4
0
 /// <summary>
 /// Asynchronously converts source file into target format, saves resulted file to out file.
 /// </summary>
 /// <param name="sourceFile">Source slides file to proceed.</param>
 /// <param name="outFolder">Output folder.</param>
 /// <param name="format">Output format.</param>
 public string ConvertFile(
     string sourceFile,
     string outFolder,
     SlidesConversionFormat format
     ) => Conversion(sourceFile, outFolder, format);
コード例 #5
0
        /// <summary>
        /// Merge documents into one file, saves resulted file to out file with specified format.
        /// </summary>
        /// <param name="outFolder">Output folder.</param>
        /// <param name="format">Output format.</param>
        /// <param name="styleMasterFile">Master file for style in result file. When null, style not changed from source files.</param>
        /// <param name="sourceFiles">Source slides files to proceed.</param>
        /// <returns>Result file path.</returns>
        public string Merger(
            string outFolder,
            SlidesConversionFormat format,
            string styleMasterFile,
            params string[] sourceFiles
            )
        {
            var files = new List <string>();

            foreach (var sourceFile in sourceFiles)
            {
                if (Directory.Exists(sourceFile))
                {
                    files.AddRange(Directory.EnumerateFiles(sourceFile));
                }
                else
                {
                    files.Add(sourceFile);
                }
            }

            var fileName   = Path.GetFileNameWithoutExtension(styleMasterFile ?? files.First());
            var resultFile = Path.Combine(outFolder, $"{fileName}.pptx");

            using (var resultPresentation = new Presentation())
            {
                var slides = resultPresentation.Slides;
                while (slides.Any())
                {
                    slides.Remove(slides.First());
                }

                var masters = resultPresentation.Masters;

                Presentation masterPresentation = null;
                IMasterSlide masterSlide = null;
                float        maxWidth = 0, maxHeight = 0;

                if (styleMasterFile != null)
                {
                    masterPresentation = new Presentation(styleMasterFile);
                    foreach (var master in masterPresentation.Masters)
                    {
                        masterSlide = masters.AddClone(master);
                    }
                }

                try
                {
                    foreach (var sourceFile in files)
                    {
                        using (var sourcePresentation = new Presentation(sourceFile))
                        {
                            var sourceSize = sourcePresentation.SlideSize.Size;
                            maxWidth  = Math.Max(maxWidth, sourceSize.Width);
                            maxHeight = Math.Max(maxHeight, sourceSize.Height);

                            var master = sourcePresentation.Masters.FirstOrDefault();
                            masters.AddClone(master);

                            var layout = sourcePresentation.LayoutSlides;
                            foreach (var slide in sourcePresentation.Slides)
                            {
                                if (masterSlide != null)
                                {
                                    slides.AddClone(slide, masterSlide, true);
                                }
                                else
                                {
                                    slides.AddClone(slide);
                                }
                            }
                        }
                    }

                    if (styleMasterFile != null)
                    {
                        var masterSize = masterPresentation.SlideSize.Size;
                        resultPresentation.SlideSize.SetSize(masterSize.Width, masterSize.Height, SlideSizeScaleType.DoNotScale);
                    }
                    else
                    {
                        resultPresentation.SlideSize.SetSize(maxWidth, maxHeight, SlideSizeScaleType.DoNotScale);
                    }
                }
                finally
                {
                    masterPresentation?.Dispose();
                }
                resultPresentation.Save(resultFile, Aspose.Slides.Export.SaveFormat.Pptx);
            }

            if (format == SlidesConversionFormat.pptx)
            {
                return(resultFile);
            }
            else
            {
                return(Conversion(
                           resultFile,
                           outFolder,
                           format
                           ));
            }
        }
コード例 #6
0
        private void SaveChunk(string outputDir, string chunkName, string fileName, ISlide[] chunkSlides, SlidesConversionFormat format, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (chunkSlides.Length == 0)
            {
                return;
            }
            cancellationToken.ThrowIfCancellationRequested();

            var presentation = chunkSlides[0].Presentation;

            switch (format)
            {
            case SlidesConversionFormat.pptx:
            case SlidesConversionFormat.pptm:
            case SlidesConversionFormat.ppsx:
            case SlidesConversionFormat.ppsm:
            case SlidesConversionFormat.potx:
            case SlidesConversionFormat.potm:
            case SlidesConversionFormat.pps:
            case SlidesConversionFormat.ppt:
            case SlidesConversionFormat.pot:
            case SlidesConversionFormat.odp:
            case SlidesConversionFormat.otp:

                using (var splitPresentation = new Presentation())
                {
                    while (splitPresentation.Slides.Count > 0)
                    {
                        splitPresentation.Slides.RemoveAt(0);
                    }

                    foreach (var slide in chunkSlides)
                    {
                        cancellationToken.ThrowIfCancellationRequested();

                        splitPresentation.Slides.AddClone(slide);
                    }

                    splitPresentation.Save(Path.Combine(outputDir, $"{fileName}_{chunkName}.{format}"), format.ToString().ParseEnum <SaveFormat>());
                }
                break;

            case SlidesConversionFormat.pdf:
            case SlidesConversionFormat.xps:
            case SlidesConversionFormat.tiff:
            case SlidesConversionFormat.html:
            case SlidesConversionFormat.swf:

                presentation.Save(Path.Combine(outputDir, $"{fileName}_{chunkName}.{format}"),
                                  chunkSlides.Select(s => s.SlideNumber).ToArray(),
                                  format.ToString().ParseEnum <SaveFormat>());
                break;

            case SlidesConversionFormat.doc:
            case SlidesConversionFormat.docx:

                using (var stream = new MemoryStream())
                {
                    presentation.Save(stream, chunkSlides.Select(s => s.SlideNumber).ToArray(), SaveFormat.Html);
                    stream.Flush();
                    stream.Seek(0, SeekOrigin.Begin);

                    var doc        = new Words.Document(stream);
                    var wordFormat = format == SlidesConversionFormat.doc
                                                        ? Words.SaveFormat.Doc
                                                        : Words.SaveFormat.Docx;
                    doc.Save(Path.Combine(outputDir, $"{fileName}_{chunkName}.{format}"), wordFormat);
                }
                break;

            case SlidesConversionFormat.txt:

                var lines = new List <string>();
                foreach (var slide in chunkSlides)
                {
                    cancellationToken.ThrowIfCancellationRequested();

                    foreach (var shp in slide.Shapes)
                    {
                        if (shp is AutoShape ashp)
                        {
                            lines.Add(ashp.TextFrame.Text);
                        }
                    }

                    var notes = slide.NotesSlideManager.NotesSlide?.NotesTextFrame?.Text;

                    if (!string.IsNullOrEmpty(notes))
                    {
                        lines.Add(notes);
                    }
                }
                System.IO.File.WriteAllLines(Path.Combine(outputDir, $"{fileName}_{chunkName}.{format}"), lines);
                break;

            case SlidesConversionFormat.bmp:
            case SlidesConversionFormat.jpeg:
            case SlidesConversionFormat.png:
            case SlidesConversionFormat.emf:
            case SlidesConversionFormat.wmf:
            case SlidesConversionFormat.gif:
            case SlidesConversionFormat.exif:
            case SlidesConversionFormat.ico:

                foreach (var slide in chunkSlides)
                {
                    cancellationToken.ThrowIfCancellationRequested();

                    var outFile = Path.Combine(outputDir, $"{fileName}_{slide.SlideNumber:D2}.{format}");
                    using (var bitmap = slide.GetThumbnail(1, 1))
                    {
                        bitmap.Save(outFile, GetImageFormat(format));
                    }
                }
                break;

            case SlidesConversionFormat.svg:

                var svgOptions = new SVGOptions
                {
                    PicturesCompression = PicturesCompression.DocumentResolution
                };
                foreach (var slide in chunkSlides)
                {
                    cancellationToken.ThrowIfCancellationRequested();

                    var outFile = Path.Combine(outputDir, $"{fileName}_{slide.SlideNumber:D2}.{format}");
                    using (var stream = new FileStream(outFile, FileMode.CreateNew))
                    {
                        slide.WriteAsSvg(stream, svgOptions);
                    }
                }
                break;

            default:
                throw new ArgumentException($"Unknown format {format}");
            }
        }