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

'' このサンプルは PDF を読み込み(Wetlands サンプルで生成された
'' ドキュメントを使用します)、そこからすべてのイメージを抽出します。
'' 次に、これらの画像を1ページあたり1つの新しい PDF に印刷します。
Public Class GetImages
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim tf = New TextFormat() With {.Font = StandardFonts.Times, .FontSize = 12}
        Using fs = New FileStream(Path.Combine("Resources", "PDFs", "Wetlands.pdf"), FileMode.Open, FileAccess.Read)
            Dim docSrc = New GcPdfDocument()
            '' 既存の PDF にいくつかの画像を読み込みます。
            docSrc.Load(fs)
            '' この呼び出しは、読み込まれた PDF からイメージに関する情報を抽出します。
            '' 大きなファイルの場合、完了するまでに時間がかかることに注意してください。
            Dim imageInfos = docSrc.GetImages()

            Dim doc = New GcPdfDocument()
            Dim textPt = New PointF(72, 72)
            Dim imageRc = New RectangleF(72, 72 * 2, doc.PageSize.Width - 72 * 2, doc.PageSize.Height - 72 * 3)

            For Each imageInfo In imageInfos
                '' 同じイメージが複数の場所に表示され、imageInfo にはページの
                '' インデックスとページ上の位置が含まれます。
                '' わかりやすくするために、ここではページ番号のみを表示しています
                Dim sb = New StringBuilder()
                imageInfo.Locations.ForEach(Function(il_) sb.Append((il_.Page.Index + 1).ToString() + ", "))
                Dim g = doc.NewPage().Graphics
                g.DrawString($"この画像は、元 PDF ファイルの {sb.ToString().TrimEnd(" "c, ","c)} ページに表示されています。", tf, New PointF(72, 72))
                g.DrawImage(imageInfo.Image, imageRc, Nothing, ImageAlign.ScaleImage)
            Next
            '' PDF ドキュメントを保存します。
            doc.Save(stream)
            Return doc.Pages.Count
        End Using
    End Function
End Class