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

'' このサンプルは、FormXObject を使用してカスタム外観ストリームを注釈に追加する方法を
'' 示します。
'' サンプルでは、既存の PDF が読み込まれ、ドキュメントのページがループされます。 
'' 各ページで、StampAnnotation が作成され、注釈の通常のデフォルト外観ストリームに
'' 割り当てられた FormXObject が作成されます。
'' 半透明のPNG画像は、通常の GcGraphics の機能(Transform および DrawImage)を使用して
'' FormXObject のグラフィックスに描画されます。
Public Class StampImage
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()

        '' スタンプ注釈を追加する既存の PDF を読み込みます。
        '' (ドキュメントの読み込みの詳細については、LoadPDF を参照してください)
        Dim jsFile = Path.Combine("Resources", "PDFs", "diodocs_flyer.pdf")
        Using fs = New FileStream(jsFile, FileMode.Open, FileAccess.Read)
            doc.Load(fs)
            Dim rect = New RectangleF(PointF.Empty, doc.Pages(0).Size)

            '' スタンプの外観として使用される FormXObject を作成します。
            Dim fxo = New FormXObject(doc, rect)
            '' リソースからイメージを取得し、FormXObject のグラフィックスに描画します。
            '' (GcGraphics.Transform の使用方法の詳細については、Transformations を参照してください)
            Dim img = Image.FromFile(Path.Combine("Resources", "ImagesBis", "circular-450x144.png"))
            Dim center = New Vector2(fxo.Bounds.Width / 2, fxo.Bounds.Height / 2)
            fxo.Graphics.Transform =
                Matrix3x2.CreateRotation((-35 * Math.PI) / 180.0F, center) *
                Matrix3x2.CreateScale(3, center)
            fxo.Graphics.DrawImage(img, fxo.Bounds, Nothing, ImageAlign.CenterImage)

            '' ページをループし、各ページにスタンプを追加します。
            For Each page In doc.Pages
                '' ページ全体に StampAnnotation を作成します。
                Dim stamp = New StampAnnotation() With
                    {
                        .Icon = StampAnnotationIcon.Draft.ToString(),
                        .Name = "draft",
                        .Page = page,
                        .Rect = rect,
                        .UserName = "グレープシティ"
                    }
                '' すべてのページで同じ FormXObject を再利用します。
                stamp.AppearanceStreams.Normal.Default = fxo
            Next
            ''
            doc.Save(stream)
        End Using
        '' PDF ドキュメントを保存します。
        Return doc.Pages.Count
    End Function
End Class