FileAttachments.vb
''
'' This code is part of GrapeCity Documents for PDF samples.
'' Copyright (c) GrapeCity, Inc. All rights reserved.
''
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Pdf.Annotations
Imports GrapeCity.Documents.Pdf.Actions
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Drawing

'' This sample demonstrates how to create file attachment annotations on a page.
'' See also the DocAttachments sample that demonstrates document level file attachments.
Public Class FileAttachments
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()
        Dim page = doc.NewPage()
        Dim g = page.Graphics

        Dim rc = Util.AddNote(
            "Some files from the sample's Resources/Images folder are attached to this page." + vbLf +
            "Some viewers may not show attachments, so we draw rectangles to indicate their (usually clickable) locations.",
            page)
        Dim ip = New PointF(rc.X, rc.Bottom + 9)
        Dim attSize = New SizeF(36, 12)
        Dim gap = 8
        Dim files As String() = {
            "tudor.jpg",
            "sea.jpg",
            "puffins.jpg",
            "lavender.jpg",
            "skye.jpg",
            "fiord.jpg",
            "out.jpg"
        }
        For Each fn In files
            Dim File = Path.Combine("Resources", "Images", fn)
            Dim faa = New FileAttachmentAnnotation() With {
                    .Color = Color.FromArgb(&HFFC540A5),
                    .UserName = "Jaime Smith",
                    .Rect = New RectangleF(ip.X, ip.Y, attSize.Width, attSize.Height),
                    .Contents = "Attached file: " + File,
                    .Icon = FileAttachmentAnnotationIcon.Paperclip,
                    .File = FileSpecification.FromEmbeddedFile(EmbeddedFileStream.FromFile(doc, File))
                }
            page.Annotations.Add(faa)
            g.FillRectangle(faa.Rect, Color.FromArgb(&HFF40C5A3))
            g.DrawRectangle(faa.Rect, Color.FromArgb(&HFF6040C5))
            ip.Y += attSize.Height + gap
        Next
        ''
        '' Done:
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class