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;
}
}
}