StampImage.vb
'' 
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' © MESCIUS 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
Imports GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing

'' このサンプルは、FormXObject を使用して注釈にカスタム外観ストリームを
'' 追加する方法を示します。
'' 既存の PDF が読み込まれ、ドキュメントのページがループされます。
'' 各ページで、StampAnnotation と FormXObject を作成し、
'' 注釈の通常のデフォルト外観ストリームに割り当てます。
'' 次に、Transform メソッドと DrawImage メソッドを使用して、
'' スタンプを表す半透明の PNG 画像を FormXObject の Graphics に描画します。
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 = GCDRAW.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 = "回覧用",
                        .page = page,
                        .rect = rect,
                        .UserName = "ユーザーA"
                    }
                '' すべてのページで同じ FormXObject を再利用します。
                stamp.AppearanceStreams.Normal.Default = fxo
            Next
            ''
            doc.Save(stream)
        End Using
        '' PDF ドキュメントを保存します。
        Return doc.Pages.Count
    End Function
End Class