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