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

'' 既存のPDFのページを画像として保存するサンプルです。
'' サンプル SlidePages で生成されたPDFを読み込み、PDF全体を
'' 複数ページのTIFFとして保存します。また、各ページを個別の
'' JPEG画像として保存します。最後に、読み込んだPDFの最後のページを
'' SVGZ(圧縮SVG)として保存します。
'' 保存された画像はすべてこのサンプルで生成されるPDFに添付されます。
'' 
'' サポートされている他の画像フォーマットはPNG、BMP、GIFです。
Public Class SaveAsImage
    Public Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()
        Dim page = doc.NewPage()

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

        '' 一時ファイルを追跡し、終了時に削除します。
        Dim tfiles = New List(Of String)

        Using fs = New FileStream(Path.Combine("Resources", "PDFs", "SlidePages.pdf"), FileMode.Open, FileAccess.Read)
            Dim docSrc = New GcPdfDocument()
            docSrc.Load(fs)
            '' ロードされた PDF のすべてのページをマルチページ TIFF として保存します。
            Dim tf = Path.GetTempFileName()
            docSrc.SaveAsTiff(tf)
            Dim fspec = FileSpecification.FromEmbeddedFile(EmbeddedFileStream.FromFile(doc, tf))
            fspec.File.FileName = "SlidePages.tiff"
            doc.EmbeddedFiles.Add(fspec.File.FileName, fspec)
            tfiles.Add(tf)

            '' ロードされた PDF の各ページを JPEG として保存します。
            For Each 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)
            Next

            '' 最後に、PDFの最後のページをSVGZ(圧縮SVG)として保存します。
            Dim bytes = docSrc.Pages.Last.ToSvgz(New SaveAsImageOptions() With {.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)

        End Using
        '' PDF ドキュメントを保存します。
        doc.Save(stream)
        '' 一時ファイルを削除します。
        tfiles.ForEach(Sub(tf_) File.Delete(tf_))
        Return doc.Pages.Count
    End Function
End Class