''
'' This code is part of Document Solutions for PDF demos.
'' Copyright (c) MESCIUS 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
'' This sample loads a PDF (we use the document generated by the Wetlands sample)
'' and extracts all images from it. It then prints those images into a new PDF,
'' centered one per page.
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()
'' Load an existing PDF with some images:
docSrc.Load(fs)
'' This call extracts information about images from the loaded PDF,
'' note that for large files it may take a while to complete:
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
'' The same image may appear on multiple locations,
'' imageInfo includes page indices and locations on pages
'' for simplicity sake we only print page numbers here:
Dim sb = New StringBuilder()
imageInfo.Locations.ForEach(Function(il_) sb.Append((il_.Page.Index + 1).ToString() + ", "))
Dim g = doc.NewPage().Graphics
g.DrawString($"This image appears on page(s) {sb.ToString().TrimEnd(" "c, ","c)} of the original PDF:", tf, New PointF(72, 72))
g.DrawImage(imageInfo.Image, imageRc, Nothing, ImageAlign.ScaleImage)
Next
'' Done:
doc.Save(stream)
Return doc.Pages.Count
End Using
End Function
End Class