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

'' This sample shows how to save pages of an existing PDF as images.
'' It loads a PDF generated by the SlidePages sample, then saves
'' the whole PDF as a multi-page TIFF. It also saves each of the pages
'' as a separate JPEG image.
'' All generated images are attached to the resulting PDF.
'' 
'' Other image formats that are also supported: 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画像として保存します。" +
            "作成されたすべての画像がこのドキュメントに添付されます。",
            page)

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

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

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

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