SaveAsImage.cs
// 
// このコードは、DioDocs for PDF のサンプルの一部として提供されています。
// © MESCIUS inc. All rights reserved.
// 
using System;
using System.IO;
using System.Linq;
using System.Drawing;
using System.Collections.Generic;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Svg;
using GrapeCity.Documents.Text;
using GrapeCity.Documents.Drawing;

namespace DsPdfWeb.Demos.Basics
{
    // 既存のPDFのページを画像として保存するサンプルです。
    // サンプル SlidePages で生成されたPDFを読み込み、PDF全体を
    // 複数ページのTIFFとして保存します。また、各ページを個別の
    // JPEG画像として保存します。最後に、読み込んだPDFの最後のページを
    // SVGZ(圧縮SVG)として保存します。
    // 保存された画像はすべてこのサンプルで生成されるPDFに添付されます。
    // 
    // サポートされている他の画像フォーマットはPNG、BMP、GIFです。
    public class SaveAsImage
    {
        public int CreatePDF(Stream stream)
        {
            var doc = new GcPdfDocument();
            var page = doc.NewPage();

            Common.Util.AddNote(
                "「スライドページ」サンプルで生成された PDF をロードし、PDF 全体を" +
                "マルチページ TIFF として保存します。" +
                "また、各ページを個別のJPEG画像として保存します。" +
                "そして、最後のページをSVGZ(圧縮SVG)として保存します。" +
                "生成された画像はすべてこのドキュメントに添付されています。",
                page);

            // 一時ファイルを追跡し、終了時に削除します。
            var tfiles = new List<string>();

            using var fs = File.OpenRead(Path.Combine("Resources", "PDFs", "SlidePages.pdf"));
                var docSrc = new GcPdfDocument();
                docSrc.Load(fs);
                // ロードされた PDF のすべてのページをマルチページ TIFF として保存します。
                var tf = Path.GetTempFileName();
                docSrc.SaveAsTiff(tf);
                var fspec = FileSpecification.FromEmbeddedFile(EmbeddedFileStream.FromFile(doc, tf));
                fspec.File.FileName = "SlidePages.tiff";
                doc.EmbeddedFiles.Add(fspec.File.FileName, fspec);
                tfiles.Add(tf);

                // ロードされた PDF の各ページを JPEG として保存します。
                foreach (var p in docSrc.Pages)
                {
                    tf = Path.GetTempFileName();
                    p.SaveAsJpeg(tf);
                    fspec = FileSpecification.FromEmbeddedFile(EmbeddedFileStream.FromFile(doc, tf));
                    fspec.File.FileName = $"Page_{p.Index}.jpeg";
                    doc.EmbeddedFiles.Add(fspec.File.FileName, fspec);
                    tfiles.Add(tf);
                }

                // 最後に、PDFの最後のページをSVGZ(圧縮SVG)として保存します。
                var bytes = docSrc.Pages.Last.ToSvgz(new SaveAsImageOptions() { BackColor = Color.Transparent });
                fspec = FileSpecification.FromEmbeddedFile(EmbeddedFileStream.FromBytes(doc, bytes));
                fspec.File.FileName = $"Page_{docSrc.Pages.Last.Index}.svgz";
                doc.EmbeddedFiles.Add(fspec.File.FileName, fspec);

            doc.Save(stream);
            // 一時ファイルを削除します。
            tfiles.ForEach(tf_ => File.Delete(tf_));
            // PDF ドキュメントを保存します。
            return doc.Pages.Count;
        }
    }
}