SaveAsSvg.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.Drawing;
using GrapeCity.Documents.Text;

namespace DsPdfWeb.Demos.Basics
{
    // このサンプルでは、SaveAsSvg() メソッドを使用して、PDFのページを
    // SVG(Scalable Vector Graphics)画像として保存し、その画像を
    // 新しいPDFのページにロードしレンダリングする方法を紹介しています。
    // 画像の元として使用されるPDFは、サンプル SvgSpecArt にて生成されたものですが、
    // 代わりに任意のPDFを使用することもできます。
    public class SaveAsSvg
    {
        public int CreatePDF(Stream stream)
        {
            var doc = new GcPdfDocument();
            var page = doc.NewPage();

            var rc = Common.Util.AddNote(
                "既存のPDFを一時的なGcPdfDocumentに読み込み、" +
                "その最初のページをSVG画像としてストリームに保存し、その後、" +
                "その画像を結果として出力するPDFのページ上に描画しています。",
                page);

            // PDFドキュメントを一時的なGcPdfDocumentに読み込みます。
            using var fs = File.OpenRead(Path.Combine("Resources", "PDFs", "svg-spec-art.pdf"));
            var docSrc = new GcPdfDocument();
            docSrc.Load(fs);

            // 読み込んだPDFの1ページ目をSVGとして保存します。
            using var svgStream = new MemoryStream();
            docSrc.Pages[0].SaveAsSvg(svgStream, new SaveAsImageOptions() { BackColor = Color.Transparent });
            // PDFのページは、ToSvgz() メソッドを使用してSVGZ(圧縮SVG)として保存することもできます。
            // docSrc.Pages[0].ToSvgz();
            svgStream.Position = 0;
            // 保存されたSVGからGcSvgDocumentを作成し、結果として出力するPDFに描画できるようにします。
            using var svgDoc = GcSvgDocument.FromStream(svgStream);

            // わかりやすくするために、塗りつぶしと枠線を設定した矩形の上に
            // 背景を透明に設定したSVGをレンダリングしています。
            rc = new RectangleF(0, rc.Bottom, page.Size.Width, page.Size.Height - rc.Bottom);
            rc.Inflate(-4f, -4f);
            page.Graphics.DrawRectangle(rc, Color.DarkGoldenrod);
            page.Graphics.FillRectangle(rc, Color.PaleGoldenrod);
            page.Graphics.DrawSvg(svgDoc, rc);

            // PDF ドキュメントを保存します。
            doc.Save(stream);
            return doc.Pages.Count;
        }
    }
}